git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: "Samuel Čavoj" <samuel@cavoj.net>
Cc: git@vger.kernel.org, Phillip Wood <phillip.wood123@gmail.com>
Subject: Re: [PATCH v3 1/3] t3435: use `test_config` instead of `git config`
Date: Thu, 15 Oct 2020 09:43:15 -0700	[thread overview]
Message-ID: <xmqqlfg7h23g.fsf@gitster.c.googlers.com> (raw)
In-Reply-To: <20201013213021.3671432-1-samuel@cavoj.net> ("Samuel Čavoj"'s message of "Tue, 13 Oct 2020 23:30:22 +0200")

Samuel Čavoj <samuel@cavoj.net> writes:

> Replace usages of `git config` with `test_config` in t3435 to prevent
> side-effects between tests.
>
> Signed-off-by: Samuel Čavoj <samuel@cavoj.net>
> ---
> changed v2 -> v3:
>     - added this patch
> ---
>  t/t3435-rebase-gpg-sign.sh | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)

As I already said, I think this is not needed.

The way the existing tests protect themselves from what previously
happened is to explicitly set up _their_ expectation in them before
running the part that is affected by the configuration setting,
which is an approach that is easy to read and understand because it
is explicit in what these tests care about.

> diff --git a/t/t3435-rebase-gpg-sign.sh b/t/t3435-rebase-gpg-sign.sh
> index b47c59c190..696cb6b6a4 100755
> --- a/t/t3435-rebase-gpg-sign.sh
> +++ b/t/t3435-rebase-gpg-sign.sh
> @@ -27,7 +27,7 @@ test_rebase_gpg_sign () {
>  	shift
>  	test_expect_success "rebase $* with commit.gpgsign=$conf $will sign commit" "
>  		git reset two &&
> -		git config commit.gpgsign $conf &&
> +		test_config commit.gpgsign $conf &&
>  		set_fake_editor &&
>  		FAKE_LINES='r 1 p 2' git rebase --force-rebase --root $* &&
>  		$must_fail git verify-commit HEAD^ &&

These are the first three uses of this test helper.

    test_rebase_gpg_sign ! false
    test_rebase_gpg_sign   true
    test_rebase_gpg_sign ! true  --no-gpg-sign

Examine what this patch does to the second test that is run by the
second invocation of test_rebase_gpg_sign, for example.  Before this
patch, "git config" that was done by the first test is left and
commit.gpgsign was set to 'false' when the second test started.
With this patch, it is removed by the clean-up action set by
test_config, so the second test starts without the configuration.

But this patch does *not* affect correctness of the second invocation.
Why?

Because the way these tests protect themselves is NOT based on the
"I muck with configuration, so I'll clean them up for the next
person" attitude which is made easy to do with test_config ANYWAY.
The correctness of the second test still relies on the fact that it
itself tweaks the variable it cares about to the state it wants it
to be.

So in this particular test script, where all test pieces are about
checking their behaviour on different setting of commit.gpgsign, use
of test_config does not buy us anything other than extra clean-up
after each test that is unnecessary.

Where test_config shines is when only a few (or a single) test cares
about different setting of a variable, and all later tests want to
test the behaviour under the default setting.  Among 47 tests, the
second and 42nd tests may want to test with commit.gpgsign set to
true, while the remainder may want to test without the variable at
all.  In such a case, it is easier to declare that the normal state
in that test script is not to have the configuration, and use
test_config in these selected tests to tentatively set it and remove
it after the tests are done.

But that rationale does not apply to this script.  It seems that
each test piece wants to be in control of and be tested under
specific setting of the variable.

> @@ -63,7 +63,7 @@ test_rebase_gpg_sign   false -i --no-gpg-sign --gpg-sign
>  
>  test_expect_failure 'rebase -p --no-gpg-sign override commit.gpgsign' '
>  	git reset --hard merged &&
> -	git config commit.gpgsign true &&
> +	test_config commit.gpgsign true &&
>  	git rebase -p --no-gpg-sign --onto=one fork-point master &&
>  	test_must_fail git verify-commit HEAD
>  '

      parent reply	other threads:[~2020-10-15 16:43 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-13 21:30 [PATCH v3 1/3] t3435: use `test_config` instead of `git config` Samuel Čavoj
2020-10-13 21:30 ` [PATCH v3 2/3] sequencer: fix gpg option passed to merge subcommand Samuel Čavoj
2020-10-15 16:47   ` Junio C Hamano
2020-10-13 21:30 ` [PATCH v3 3/3] sequencer: pass explicit --no-gpg-sign to merge Samuel Čavoj
2020-10-15 17:02   ` Junio C Hamano
2020-10-17 22:02     ` Samuel Čavoj
2020-10-17 22:34       ` Junio C Hamano
2020-10-17 23:16         ` Samuel Čavoj
2020-10-15 16:43 ` Junio C Hamano [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=xmqqlfg7h23g.fsf@gitster.c.googlers.com \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=phillip.wood123@gmail.com \
    --cc=samuel@cavoj.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).