Re: [PATCH v5 23/24] t1405: some basic tests on main ref store

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

 



On 02/22/2017 03:04 PM, Nguyễn Thái Ngọc Duy wrote:
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx>
> ---
>  t/t1405-main-ref-store.sh (new +x) | 123 +++++++++++++++++++++++++++++++++++++
>  1 file changed, 123 insertions(+)
>  create mode 100755 t/t1405-main-ref-store.sh
> 
> diff --git a/t/t1405-main-ref-store.sh b/t/t1405-main-ref-store.sh
> new file mode 100755
> index 000000000..0999829f1
> --- /dev/null
> +++ b/t/t1405-main-ref-store.sh
> @@ -0,0 +1,123 @@
> +#!/bin/sh
> +
> +test_description='test main ref store api'
> +
> +. ./test-lib.sh
> +
> +RUN="test-ref-store main"
> +
> +test_expect_success 'pack_refs(PACK_REFS_ALL | PACK_REFS_PRUNE)' '
> +	test_commit one &&
> +	N=`find .git/refs -type f | wc -l` &&

I think we prefer $() to ``. (Same throughout this file and also t1406
in the next commit.)

It's notable that these tests grep around the filesystem, so they won't
be applicable to future refs backends. Of course, "pack-refs" is
intrinsically only applicable to the files backend, so for this test
it's not surprising. But some tests could conceivably be written in a
generic way, so that they should pass for any refs backend.

Just food for thought; no need to change anything now.

> +	test "$N" != 0 &&
> +	$RUN pack-refs 3 &&
> +	N=`find .git/refs -type f | wc -l`

Didn't you mean to test the final `$N`?

> +'
> +
> +test_expect_success 'peel_ref(new-tag)' '
> +	git rev-parse HEAD >expected &&
> +	git tag -a -m new-tag new-tag HEAD &&
> +	$RUN peel-ref refs/tags/new-tag >actual &&
> +	test_cmp expected actual
> +'
> +
> +test_expect_success 'create_symref(FOO, refs/heads/master)' '
> +	$RUN create-symref FOO refs/heads/master nothing &&
> +	echo refs/heads/master >expected &&
> +	git symbolic-ref FOO >actual &&
> +	test_cmp expected actual
> +'
> +
> +test_expect_success 'delete_refs(FOO, refs/tags/new-tag)' '
> +	git rev-parse FOO -- &&
> +	git rev-parse refs/tags/new-tag -- &&
> +	$RUN delete-refs 0 FOO refs/tags/new-tag &&
> +	test_must_fail git rev-parse FOO -- &&
> +	test_must_fail git rev-parse refs/tags/new-tag --
> +'
> +
> +test_expect_success 'rename_refs(master, new-master)' '
> +	git rev-parse master >expected &&
> +	$RUN rename-ref refs/heads/master refs/heads/new-master &&
> +	git rev-parse new-master >actual &&
> +	test_cmp expected actual &&
> +	test_commit recreate-master
> +'

Isn't HEAD set to `refs/heads/master` prior to this test? If so, then I
think it should become detached when you rename `refs/heads/master`. Or
maybe it should be changed to point at `refs/heads/new-master`, I can't
remember. In either case, it might be useful for the test to check that
the behavior matches the status quo, so we notice if the behavior ever
changes inadvertently.

> +
> +test_expect_success 'for_each_ref(refs/heads/)' '
> +	$RUN for-each-ref refs/heads/ | cut -c 42- >actual &&
> +	cat >expected <<-\EOF &&
> +	master 0x0
> +	new-master 0x0
> +	EOF
> +	test_cmp expected actual
> +'
> +
> +test_expect_success 'resolve_ref(new-master)' '
> +	SHA1=`git rev-parse new-master` &&
> +	echo "$SHA1 refs/heads/new-master 0x0" >expected &&
> +	$RUN resolve-ref refs/heads/new-master 0 >actual &&
> +	test_cmp expected actual
> +'
> +
> +test_expect_success 'verify_ref(new-master)' '
> +	$RUN verify-ref refs/heads/new-master
> +'
> +
> +test_expect_success 'for_each_reflog()' '
> +	$RUN for-each-reflog | cut -c 42- >actual &&
> +	cat >expected <<-\EOF &&
> +	refs/heads/master 0x0
> +	refs/heads/new-master 0x0
> +	HEAD 0x1
> +	EOF
> +	test_cmp expected actual
> +'
> +
> +test_expect_success 'for_each_reflog_ent()' '
> +	$RUN for-each-reflog-ent HEAD >actual &&
> +	head -n1 actual | grep one &&
> +	tail -n2 actual | head -n1 | grep recreate-master
> +'
> +
> +test_expect_success 'for_each_reflog_ent_reverse()' '
> +	$RUN for-each-reflog-ent-reverse HEAD >actual &&
> +	head -n1 actual | grep recreate-master &&
> +	tail -n2 actual | head -n1 | grep one
> +'
> +
> +test_expect_success 'reflog_exists(HEAD)' '
> +	$RUN reflog-exists HEAD
> +'
> +
> +test_expect_success 'delete_reflog(HEAD)' '
> +	$RUN delete-reflog HEAD &&
> +	! test -f .git/logs/HEAD

Maybe also test the final state using `reflog-exists` to make sure that
function can also return false?

> +'
> +
> +test_expect_success 'create-reflog(HEAD)' '
> +	$RUN create-reflog HEAD 1 &&
> +	test -f .git/logs/HEAD
> +'
> +
> +test_expect_success 'delete_ref(refs/heads/foo)' '
> +	git checkout -b foo &&
> +	FOO_SHA1=`git rev-parse foo` &&
> +	git checkout --detach &&
> +	test_commit bar-commit &&
> +	git checkout -b bar &&
> +	BAR_SHA1=`git rev-parse bar` &&
> +	$RUN update-ref updating refs/heads/foo $BAR_SHA1 $FOO_SHA1 0 &&
> +	echo $BAR_SHA1 >expected &&
> +	git rev-parse refs/heads/foo >actual &&
> +	test_cmp expected actual
> +'
> +
> +test_expect_success 'delete_ref(refs/heads/foo)' '
> +	SHA1=`git rev-parse foo` &&
> +	git checkout --detach &&
> +	$RUN delete-ref refs/heads/foo $SHA1 0 &&
> +	test_must_fail git rev-parse refs/heads/foo --
> +'

The last two tests have the same name.

You might also want to test these functions when the old oid is
incorrect or when the reference is missing.

> +test_done

Thanks for all the new tests!

Michael




[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]