Re: [PATCH v2 43/43] refs: tests for db backend
On Mon, 2015-10-05 at 09:56 -0700, Junio C Hamano wrote: > Dennis Kaarsemaker writes: > > > On Mon, Sep 28, 2015 at 06:02:18PM -0400, David Turner wrote: > >> Add tests for the database backend. > >> > >> Signed-off-by: David Turner > >> --- > >> t/t1460-refs-be-db.sh| 1103 > >> ++ > >> t/t1470-refs-be-db-reflog.sh | 353 ++ > >> 2 files changed, 1456 insertions(+) > >> create mode 100755 t/t1460-refs-be-db.sh > >> create mode 100755 t/t1470-refs-be-db-reflog.sh > > > > These break 'make test' on builds without the db backend. Maybe squash > > in something like the following: > > > > diff --git a/t/t1460-refs-be-db.sh b/t/t1460-refs-be-db.sh > > index f13b0f0..c8222ed 100755 > > --- a/t/t1460-refs-be-db.sh > > +++ b/t/t1460-refs-be-db.sh > > @@ -9,6 +9,11 @@ test_description='Test lmdb refs backend' > > TEST_NO_CREATE_REPO=1 > > . ./test-lib.sh > > > > +if ! test -e ../../test-refs-be-lmdb; then > > + skip_all="Skipping lmdb refs backend tests, lmdb backend not built" > > + test_done > > +fi > > The idea is sound, but $TRASH_DIRECTORY (i.e. $(cwd) there) is not > necessarily two subdirectories down from the build repository root > (cf. --root= parameter to the test scripts), so you need to > account for that. will fix these, thanks Dennis and Junio. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 43/43] refs: tests for db backend
Dennis Kaarsemaker writes: > On Mon, Sep 28, 2015 at 06:02:18PM -0400, David Turner wrote: >> Add tests for the database backend. >> >> Signed-off-by: David Turner >> --- >> t/t1460-refs-be-db.sh| 1103 >> ++ >> t/t1470-refs-be-db-reflog.sh | 353 ++ >> 2 files changed, 1456 insertions(+) >> create mode 100755 t/t1460-refs-be-db.sh >> create mode 100755 t/t1470-refs-be-db-reflog.sh > > These break 'make test' on builds without the db backend. Maybe squash > in something like the following: > > diff --git a/t/t1460-refs-be-db.sh b/t/t1460-refs-be-db.sh > index f13b0f0..c8222ed 100755 > --- a/t/t1460-refs-be-db.sh > +++ b/t/t1460-refs-be-db.sh > @@ -9,6 +9,11 @@ test_description='Test lmdb refs backend' > TEST_NO_CREATE_REPO=1 > . ./test-lib.sh > > +if ! test -e ../../test-refs-be-lmdb; then > + skip_all="Skipping lmdb refs backend tests, lmdb backend not built" > + test_done > +fi The idea is sound, but $TRASH_DIRECTORY (i.e. $(cwd) there) is not necessarily two subdirectories down from the build repository root (cf. --root= parameter to the test scripts), so you need to account for that. Thanks. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 43/43] refs: tests for db backend
On Mon, Sep 28, 2015 at 06:02:18PM -0400, David Turner wrote: > Add tests for the database backend. > > Signed-off-by: David Turner > --- > t/t1460-refs-be-db.sh| 1103 > ++ > t/t1470-refs-be-db-reflog.sh | 353 ++ > 2 files changed, 1456 insertions(+) > create mode 100755 t/t1460-refs-be-db.sh > create mode 100755 t/t1470-refs-be-db-reflog.sh These break 'make test' on builds without the db backend. Maybe squash in something like the following: diff --git a/t/t1460-refs-be-db.sh b/t/t1460-refs-be-db.sh index f13b0f0..c8222ed 100755 --- a/t/t1460-refs-be-db.sh +++ b/t/t1460-refs-be-db.sh @@ -9,6 +9,11 @@ test_description='Test lmdb refs backend' TEST_NO_CREATE_REPO=1 . ./test-lib.sh +if ! test -e ../../test-refs-be-lmdb; then + skip_all="Skipping lmdb refs backend tests, lmdb backend not built" + test_done +fi + raw_ref() { test-refs-be-lmdb "$1" } diff --git a/t/t1470-refs-be-db-reflog.sh b/t/t1470-refs-be-db-reflog.sh index 99a705d..2538a58 100755 --- a/t/t1470-refs-be-db-reflog.sh +++ b/t/t1470-refs-be-db-reflog.sh @@ -8,6 +8,11 @@ test_description='Test prune and reflog expiration' TEST_NO_CREATE_REPO=1 . ./test-lib.sh +if ! test -e ../../test-refs-be-lmdb; then + skip_all="Skipping lmdb refs backend tests, lmdb backend not built" + test_done +fi + raw_reflog() { cat .git/logs/$1 2>/dev/null || test-refs-be-lmdb -l "$1" } Also, test 18 in t1460 is broken: expecting success: git symbolic-ref refs/heads/self refs/heads/self && test_when_finished "delete_ref refs/heads/self" && test_must_fail git update-ref -d refs/heads/self test_must_fail: command succeeded: git update-ref -d refs/heads/self not ok 18 - update-ref -d is not confused by self-reference # # git symbolic-ref refs/heads/self refs/heads/self && # test_when_finished "delete_ref refs/heads/self" && # test_must_fail git update-ref -d refs/heads/self # -- Dennis Kaarsemaker http://twitter.com/seveas -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v2 43/43] refs: tests for db backend
Add tests for the database backend. Signed-off-by: David Turner --- t/t1460-refs-be-db.sh| 1103 ++ t/t1470-refs-be-db-reflog.sh | 353 ++ 2 files changed, 1456 insertions(+) create mode 100755 t/t1460-refs-be-db.sh create mode 100755 t/t1470-refs-be-db-reflog.sh diff --git a/t/t1460-refs-be-db.sh b/t/t1460-refs-be-db.sh new file mode 100755 index 000..f13b0f0 --- /dev/null +++ b/t/t1460-refs-be-db.sh @@ -0,0 +1,1103 @@ +#!/bin/sh +# +# Copyright (c) 2015 Twitter, Inc +# Copyright (c) 2006 Shawn Pearce +# This test is based on t1400-update-ref.sh +# + +test_description='Test lmdb refs backend' +TEST_NO_CREATE_REPO=1 +. ./test-lib.sh + +raw_ref() { + test-refs-be-lmdb "$1" +} + +delete_ref() { + test-refs-be-lmdb -d "$1" +} + +write_ref() { + test-refs-be-lmdb "$1" "$2" +} + +raw_reflog() { + test-refs-be-lmdb -l "$1" +} + +delete_all_reflogs() { + test-refs-be-lmdb -c +} + +append_reflog() { + test-refs-be-lmdb -a "$1" +} + +Z=$_z40 + +test_expect_success setup ' + git init --refs-backend-type=lmdb && + for name in A B C D E F + do + test_tick && + T=$(git write-tree) && + sha1=$(echo $name | git commit-tree $T) && + eval $name=$sha1 + done +' + +m=refs/heads/master +n_dir=refs/heads/gu +n=$n_dir/fixes + +test_expect_success \ + "create $m" \ + "git update-ref $m $A && +test $A"' = $(raw_ref '"$m"')' +test_expect_success \ + "create $m" \ + "git update-ref $m $B $A && +test $B"' = $(raw_ref '"$m"')' +test_expect_success "fail to delete $m with stale ref" ' + test_must_fail git update-ref -d $m $A && + test $B = "$(raw_ref $m)" +' +test_expect_success "delete $m" ' + git update-ref -d $m $B && + ! raw_ref $m +' +delete_ref $m + +test_expect_success "delete $m without oldvalue verification" " + git update-ref $m $A && + test $A = \$(raw_ref $m) && + git update-ref -d $m && + ! raw_ref $m +" +delete_ref $m + +test_expect_success \ + "fail to create $n" \ + "git update-ref $n_dir $A && +test_must_fail git update-ref $n $A >out 2>err" + +delete_ref $n_dir +rm -f out err + +test_expect_success \ + "create $m (by HEAD)" \ + "git update-ref HEAD $A && +test $A"' = $(raw_ref '"$m"')' +test_expect_success \ + "create $m (by HEAD)" \ + "git update-ref HEAD $B $A && +test $B"' = $(raw_ref '"$m"')' +test_expect_success "fail to delete $m (by HEAD) with stale ref" ' + test_must_fail git update-ref -d HEAD $A && + test $B = $(raw_ref '"$m"') +' +test_expect_success "delete $m (by HEAD)" ' + git update-ref -d HEAD $B && + ! raw_ref $m +' +delete_ref $m + +test_expect_success \ + "create $m (by HEAD)" \ + "git update-ref HEAD $A && +test $A"' = $(raw_ref '"$m"')' +test_expect_success \ + "pack refs" \ + "git pack-refs --all" +test_expect_success \ + "move $m (by HEAD)" \ + "git update-ref HEAD $B $A && +test $B"' = $(raw_ref '"$m"')' +test_expect_success "delete $m (by HEAD) should remove both packed and loose $m" ' + git update-ref -d HEAD $B && + ! raw_ref $m +' +delete_ref $m + +OLD_HEAD=$(raw_ref HEAD) +test_expect_success "delete symref without dereference" ' + git update-ref --no-deref -d HEAD && + ! raw_ref HEAD +' +write_ref HEAD "$OLD_HEAD" + +test_expect_success "delete symref without dereference when the referred ref is packed" ' + echo foo >foo.c && + git add foo.c && + git commit -m foo && + git pack-refs --all && + git update-ref --no-deref -d HEAD && + ! raw_ref HEAD +' +write_ref HEAD "$OLD_HEAD" +delete_ref $m + +test_expect_success 'update-ref -d is not confused by self-reference' ' + git symbolic-ref refs/heads/self refs/heads/self && + test_when_finished "delete_ref refs/heads/self" && + test_must_fail git update-ref -d refs/heads/self +' + +test_expect_success 'update-ref --no-deref -d can delete self-reference' ' + git symbolic-ref refs/heads/self refs/heads/self && + test_when_finished "delete_ref refs/heads/self" && + git update-ref --no-deref -d refs/heads/self +' + +test_expect_success 'update-ref --no-deref -d can delete reference to bad ref' ' + test-refs-be-lmdb refs/heads/bad "" && + test_when_finished "delete_ref refs/heads/bad" && + git symbolic-ref refs/heads/ref-to-bad refs/heads/bad && + test_when_finished "delete_ref refs/heads/ref-to-bad" && + raw_ref refs/heads/ref-to-bad && + git update-ref --no-deref -d refs/heads/ref-to-bad && + ! raw_ref refs/heads/ref-to-bad +' + +test_expect_success '(not) create HEAD with old sha1' " + test_must_fail git update-ref HEAD $A $B +" +test_expect_success "(not) prior created .git/$m" " + ! raw_ref