On Tue, May 03, 2022 at 03:03:59PM +0100, Phillip Wood wrote: > > + > > +# this prerequisite should be added to all the tests, it not only prevents > > +# the test from failing but also warms up any authentication cache sudo > > +# might need to avoid asking for a password > > If this is required for all the tests then it would be simpler just to skip > all the tests if it is not satisfied as you do above. it is obviously not required (as shown by some tests in patch 3 not having it and by my choice if the word "should"), but it still recommended, which I was hoping would be explained by that comment since if sudo to root is only allowed "temporarily" by someone typing their password, then sudo keeps that authentication in a cache, that could probably expire otherwise. Ironically, this comment was meant to explain why it was not checked once at the beginning and being used instead in almost every test, but presume I wasn't clear enough, not sure if worth resubmitting either. > Running "sudo env" shows that it sets $HOME to /root which means that these > tests will pick up /root/.gitconfig if it exists. I think this depends on how sudo is configured, but yes ANY environment variables could be set to unsafe values that would confuse git if it assumes it is still running as part of the test suite. My approach was to make sure (with the prerequisite) that at least we have PATH set to the right value, so we won't start accidentally running the system provided git, but you are correct that at least for patch1, the only thing I can WARRANT to work is `git status`, but it should be also clear to whoever writes tests using sudo, that it can't be otherwise since git it is not only running as root, but it is running in the environment that sudo provides when doing so. > Normally when running the > tests we set $HOME to $TEST_DIRECTORY so they are run in a predictable > environment. At least anything pointed to by core.hooksPath or > core.fsmontior in that file is expecting to be run as root. which should be the same expectation of anyone running `sudo make install` in their own repository, so we are just mimicking the use case we care about. core.hooksPath or core.fsmonitor might be relevant now, but there is no way for me to predict what else might be in the future, and then again `sudo -H` will behave differently than `sudo` and there is nothing git can do to prevent that, so I keep thinking $HOME is not that special eitherway. it might be worth adding that as well as a constrain into the prerequisite though, so if your sudo does change HOME then we skip these tests, or we try harder to call sudo in a way that doesn't change HOME instead. > I think it is > worth spelling this out explicitly in the commit message (currently it is a > bit vague about what the implications of not having better integration with > the test framework are) and the top of the test file. Note that t1509 > sources test-lib.sh as the root user so does not have this issue. As explained below, there is no way to "explictly" document all things that might be relevant, and being vague was therefore by design. t1509 has also a different objective AFAIK, which is to test in an environment where everything is running as root, which is not what we want to do here. root is relevant only when we got it through sudo, hence I don't think that just reading test-lib.sh through sudo as well would be a "solution" in this case, but I agree with you that for a full integration a lot more would be needed, which was again documented and punted explicitly. > > +test_lazy_prereq SUDO ' > > + sudo -n id -u >u && > > + id -u root >r && > > + test_cmp u r && > > + command -v git >u && > > + sudo command -v git >r && > > + test_cmp u r > > +' > > + > > +test_expect_success SUDO 'setup' ' > > + sudo rm -rf root && > > + mkdir -p root/r && > > + sudo chown root root && > > + ( > > + cd root/r && > > + git init > > Using git -C <directory> would eliminate a lot of the sub shells in this > file My assumption (and help me understand if it was incorrect) is that these tests should document the expected use cases, so you are correct that both cd and -C accomplish the same in the end, but I think that cd is what users would more normally use, and by writing with it (specially since it requires a subshell) is also more easy to spot and understand that an invocation of git with -C. I have to admit I didn't even thought of using -C originally because of that, but if you think that makes the test easier to understand and better I am sure happy to include that in a reroll. Carlo