Re: [PATCH v2 2/9] t5526: use grep to assert on fetches

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Feb 16 2022, Glen Choo wrote:

> In a previous commit, we replaced test_cmp invocations with
> verify_fetch_result(). Finish the process of removing test_cmp by using
> grep in verify_fetch_result() instead.
>
> This makes the tests less sensitive to changes because, instead of
> checking the whole stderr, we only grep for the lines of the form
>
> * "<old-head>..<new-head>\s+branch\s+-> origin/branch"
> * "Fetching submodule <submodule-path>" (if fetching a submodule)
>
> when we expect the repo to have fetched. If we expect the repo to not
> have fetched, grep to make sure the lines are absent. Also, simplify the
> assertions by using grep patterns that match only the relevant pieces of
> information, e.g. <old-head> is irrelevant because we only want to know
> if the fetch was performed, so we don't need to know where the branch
> was before the fetch.

I tried ejecting 1/9 and 2/9 out of this series locally, and it passes
all tests until the new tests you add in 7/9.

As ugly as some of the pre-image is, I wonder if dropping these first
two and biting the bullet and just continuing with the test_cmp is
better.

The test_cmp is going to catch issues that even the cleverest grep
combinations won't, e.g. in the submodule-in-C series I discovered a bug
where all of our testing & the existing series hadn't spotted that we
were dropping a \n at the end in one of the messages.

Particularly as:

>  # Verifies that the expected repositories were fetched. This is done by
> -# concatenating the files expect.err.[super|sub|deep] in the correct
> -# order and comparing it to the actual stderr.
> +# checking that the branches of [super|sub|deep] were updated to
> +# [super|sub|deep]head if the corresponding file exists.
>  #
> -# If a repo should not be fetched in the test, its corresponding
> -# expect.err file should be rm-ed.
> +# If the [super|sub|deep] head file does not exist, this verifies that
> +# the corresponding repo was not fetched. Thus, if a repo should not be
> +# fetched in the test, its corresponding head file should be
> +# rm-ed.
>  verify_fetch_result() {
>  	ACTUAL_ERR=$1 &&
> -	rm -f expect.err.combined &&
> -	if [ -f expect.err.super ]; then
> -		cat expect.err.super >>expect.err.combined
> +	# Each grep pattern is guaranteed to match the correct repo
> +	# because each repo uses a different name for their branch i.e.
> +	# "super", "sub" and "deep".
> +	if [ -f superhead ]; then
> +		grep -E "\.\.$(cat superhead)\s+super\s+-> origin/super" $ACTUAL_ERR
> +	else
> +		! grep "super" $ACTUAL_ERR
>  	fi &&
> -	if [ -f expect.err.sub ]; then
> -		cat expect.err.sub >>expect.err.combined
> +	if [ -f subhead ]; then
> +		grep "Fetching submodule submodule" $ACTUAL_ERR &&
> +		grep -E "\.\.$(cat subhead)\s+sub\s+-> origin/sub" $ACTUAL_ERR
> +	else
> +		! grep "Fetching submodule submodule" $ACTUAL_ERR
>  	fi &&
> -	if [ -f expect.err.deep ]; then
> -		cat expect.err.deep >>expect.err.combined
> -	fi &&
> -	test_cmp expect.err.combined $ACTUAL_ERR
> +	if [ -f deephead ]; then
> +		grep "Fetching submodule submodule/subdir/deepsubmodule" $ACTUAL_ERR &&
> +		grep -E "\.\.$(cat deephead)\s+deep\s+-> origin/deep" $ACTUAL_ERR
> +	else
> +		! grep "Fetching submodule submodule/subdir/deepsubmodule" $ACTUAL_ERR
> +	fi
>  }

This sort of thing is really hard to understand and review...

>  test_expect_success setup '
> @@ -274,13 +277,10 @@ test_expect_success "Recursion doesn't happen when no new commits are fetched in
>  '
>  
>  test_expect_success "Recursion stops when no new submodule commits are fetched" '
> -	head1=$(git rev-parse --short HEAD) &&
>  	git add submodule &&
>  	git commit -m "new submodule" &&
> -	head2=$(git rev-parse --short HEAD) &&
> -	echo "From $pwd/." > expect.err.super &&
> -	echo "   $head1..$head2  super      -> origin/super" >>expect.err.super &&

...as opposed to if we just rolled the generation of this into some
utility printf function.



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux