Re: [PATCH v2 43/43] refs: tests for db backend

2015-10-05 Thread David Turner
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

2015-10-05 Thread Junio C Hamano
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

2015-10-03 Thread Dennis Kaarsemaker
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

2015-09-28 Thread David Turner
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