From: Ramkumar Ramachandra <artagnon@gmail.com>
To: Git List <git@vger.kernel.org>
Cc: Jonathan Nieder <jrnieder@gmail.com>,
David Barr <david.barr@cordelta.com>,
Sverre Rabbelier <srabbelier@gmail.com>,
Junio C Hamano <gitster@pobox.com>
Subject: [PATCH 2/3] t9010-svn-fi: Add tests for svn-fi
Date: Tue, 1 Feb 2011 19:56:42 +0530 [thread overview]
Message-ID: <1296570403-9082-3-git-send-email-artagnon@gmail.com> (raw)
In-Reply-To: <1296570403-9082-1-git-send-email-artagnon@gmail.com>
Create a test-svn-fi in toplevel directory, add rules to build it, and
add some basic tests.
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
---
.gitignore | 1 +
Makefile | 5 +-
t/t9010-svn-fi.sh | 303 +++++++++++++++++++++++++++++++++++++++++++++++++++++
test-svn-fi.c | 20 ++++
4 files changed, 328 insertions(+), 1 deletions(-)
create mode 100644 t/t9010-svn-fi.sh
create mode 100644 test-svn-fi.c
diff --git a/.gitignore b/.gitignore
index b48d1ee..c8c8a17 100644
--- a/.gitignore
+++ b/.gitignore
@@ -177,6 +177,7 @@
/test-sigchain
/test-subprocess
/test-svn-fe
+/test-svn-fi
/common-cmds.h
*.tar.gz
*.dsc
diff --git a/Makefile b/Makefile
index d9c2442..cb21b78 100644
--- a/Makefile
+++ b/Makefile
@@ -431,6 +431,7 @@ TEST_PROGRAMS_NEED_X += test-sha1
TEST_PROGRAMS_NEED_X += test-sigchain
TEST_PROGRAMS_NEED_X += test-subprocess
TEST_PROGRAMS_NEED_X += test-svn-fe
+TEST_PROGRAMS_NEED_X += test-svn-fi
TEST_PROGRAMS_NEED_X += test-index-version
TEST_PROGRAMS = $(patsubst %,%$X,$(TEST_PROGRAMS_NEED_X))
@@ -1838,7 +1839,7 @@ VCSSVN_OBJS = vcs-svn/line_buffer.o vcs-svn/svnload.o vcs-svn/dump_export.o \
vcs-svn/repo_tree.o vcs-svn/fast_export.o vcs-svn/sliding_window.o \
vcs-svn/svndiff.o vcs-svn/svndump.o vcs-svn/dir_cache.o
VCSSVN_TEST_OBJS = test-obj-pool.o \
- test-line-buffer.o test-treap.o test-svn-fe.o
+ test-line-buffer.o test-treap.o test-svn-fe.o test-svn-fi.o
OBJECTS := $(GIT_OBJS) $(XDIFF_OBJS) $(VCSSVN_OBJS)
dep_files := $(foreach f,$(OBJECTS),$(dir $f).depend/$(notdir $f).d)
@@ -2129,6 +2130,8 @@ test-parse-options$X: parse-options.o
test-svn-fe$X: vcs-svn/lib.a
+test-svn-fi$X: vcs-svn/lib.a
+
.PRECIOUS: $(TEST_OBJS)
test-%$X: test-%.o $(GITLIBS)
diff --git a/t/t9010-svn-fi.sh b/t/t9010-svn-fi.sh
new file mode 100644
index 0000000..676c7fc
--- /dev/null
+++ b/t/t9010-svn-fi.sh
@@ -0,0 +1,303 @@
+#!/bin/sh
+
+test_description='check svn dumpfile exporter'
+
+. ./test-lib.sh
+
+if ! svnadmin -h >/dev/null 2>&1
+then
+ skip_all='skipping svn-fi tests, svn not available'
+ test_done
+fi
+
+svnrepo="testsvn"
+
+reinit_svn () {
+ rm -rf "$svnrepo" &&
+ rm -f stream &&
+ svnadmin create "$svnrepo" &&
+ printf "#!/bin/sh" > "$svnrepo"/hooks/pre-revprop-change &&
+ chmod +x "$svnrepo"/hooks/pre-revprop-change &&
+ mkfifo stream
+}
+
+svn_look () {
+ subcommand=$1 &&
+ shift &&
+ svnlook "$subcommand" "$svnrepo" "$@"
+}
+
+try_load () {
+ input=$1 &&
+ maybe_fail=${2:+test_$2} &&
+
+ {
+ $maybe_fail test-svn-fi "$input" >stream &
+ } &&
+ svnadmin load "$svnrepo" <stream &&
+ wait $!
+}
+
+test_expect_success 'normal empty files' '
+ reinit_svn &&
+ cat >expect.tree <<-\EOF &&
+ /
+ foo
+ bar
+ EOF
+ cat >input <<-\EOF &&
+ reset refs/heads/master
+ commit refs/heads/master
+ mark :1
+ author nobody <nobody@localhost> 1170199019 +0100
+ committer nobody <nobody@localhost> 1170199019 +0100
+ data 0
+ M 100644 inline foo
+ data 0
+ M 644 inline bar
+ data 0
+
+ EOF
+ try_load input &&
+ svn_look tree >actual.tree &&
+ test_cmp expect.tree actual.tree
+'
+
+# TODO: How to test date? Need to convert from local timestamp
+test_expect_success 'svn:author and svn:log' '
+ reinit_svn &&
+ echo "nothing" >expect.log &&
+ echo "nobody" >expect.author &&
+ cat >input <<-\EOF &&
+ reset refs/heads/master
+ commit refs/heads/master
+ mark :1
+ author nobody <nobody@localhost> 1170199019 +0100
+ committer nobody <nobody@localhost> 1170199019 +0100
+ data 7
+ nothing
+ M 100644 inline foo
+ data 0
+
+ EOF
+ try_load input &&
+ svn_look log >actual.log &&
+ svn_look author >actual.author &&
+ test_cmp expect.log actual.log &&
+ test_cmp expect.author actual.author
+'
+
+test_expect_success 'missing author line' '
+ reinit_svn &&
+ cat >expect.tree <<-\EOF &&
+ /
+ foo
+ EOF
+ cat >input <<-\EOF &&
+ reset refs/heads/master
+ commit refs/heads/master
+ mark :1
+ committer nobody <nobody@localhost> 1170199019 +0100
+ data 0
+ M 100644 inline foo
+ data 0
+
+ EOF
+ try_load input &&
+ svn_look tree >actual.tree &&
+ test_cmp expect.tree actual.tree
+'
+
+test_expect_success 'blob marks unsupported' '
+ reinit_svn &&
+ cat >input <<-\EOF &&
+ blob
+ mark :1
+ data 0
+
+ reset refs/heads/master
+ commit refs/heads/master
+ mark :2
+ author nobody <nobody@localhost> 1170199019 +0100
+ committer nobody <nobody@localhost> 1170199019 +0100
+ data 0
+ M 100644 :1 foo
+
+ EOF
+ try_load input must_fail
+'
+
+test_expect_success 'malformed fast-import stream: filemodify' '
+ reinit_svn &&
+ cat >input <<-\EOF &&
+ reset refs/heads/master
+ commit refs/heads/master
+ mark :1
+ author nobody <nobody@localhost> 1170199019 +0100
+ committer nobody <nobody@localhost> 1170199019 +0100
+ data 0
+ M 100644 inline
+
+ EOF
+ try_load input must_fail
+'
+
+test_expect_success 'malformed fast-import stream: author' '
+ reinit_svn &&
+ cat >input <<-\EOF &&
+ reset refs/heads/master
+ commit refs/heads/master
+ mark :1
+ author 2d3%*s&f#k|
+ committer nobody <nobody@localhost> 1170199019 +0100
+ data 0
+ M 100644 inline foo
+ data 0
+
+ EOF
+ try_load input must_fail
+'
+
+test_expect_success 'malformed fast-import stream: author 2' '
+ reinit_svn &&
+ cat >input <<-\EOF &&
+ reset refs/heads/master
+ commit refs/heads/master
+ mark :1
+ author nobody <localhost> 1170199019 +0100
+ committer nobody <nobody@localhost> 1170199019 +0100
+ data 0
+ M 100644 inline foo
+ data 0
+
+ EOF
+ try_load input must_fail
+'
+
+test_expect_success 'malformed fast-import stream: data length' '
+ reinit_svn &&
+ cat >input <<-\EOF &&
+ reset refs/heads/master
+ commit refs/heads/master
+ mark :1
+ author nobody <nobody@localhost> 1170199019 +0100
+ committer nobody <nobody@localhost> 1170199019 +0100
+ data 0
+ M 100644 inline foo
+ data 14238
+
+ EOF
+ test_must_fail try_load input
+'
+
+test_expect_success 'recursive directory creation' '
+ reinit_svn &&
+ cat >expect.tree <<-\EOF &&
+ /
+ alpha/
+ beta/
+ gamma
+ EOF
+ cat >input <<-\EOF &&
+ reset refs/heads/master
+ commit refs/heads/master
+ mark :1
+ author nobody <nobody@localhost> 1170199019 +0100
+ committer nobody <nobody@localhost> 1170199019 +0100
+ data 7
+ nothing
+ M 100644 inline alpha/beta/gamma
+ data 12
+ some content
+
+ EOF
+ try_load input &&
+ svn_look tree >actual.tree &&
+ test_cmp expect.tree actual.tree
+'
+
+test_expect_success 'svn:special and svn:executable' '
+ reinit_svn &&
+ cat >input <<-\EOF &&
+ reset refs/heads/master
+ commit refs/heads/master
+ mark :1
+ author nobody <nobody@localhost> 1170199019 +0100
+ committer nobody <nobody@localhost> 1170199019 +0100
+ data 7
+ nothing
+ M 100755 inline foo
+ data 0
+ M 755 inline moo
+ data 0
+ M 120000 inline bar
+ data 0
+
+ EOF
+ try_load input &&
+ svn_look propget svn:executable foo &&
+ svn_look propget svn:executable moo &&
+ svn_look propget svn:special bar
+'
+
+test_expect_success 'replace symlink with normal file' '
+ reinit_svn &&
+ cat >expect.tree <<-\EOF &&
+ /
+ alpha/
+ beta/
+ gamma
+ EOF
+ cat >input <<-\EOF &&
+ reset refs/heads/master
+ commit refs/heads/master
+ mark :1
+ author nobody <nobody@localhost> 1170199019 +0100
+ committer nobody <nobody@localhost> 1170199019 +0100
+ data 7
+ nothing
+ M 120000 inline alpha/beta/gamma
+ data 0
+ commit refs/heads/master
+ mark :1
+ author nobody <nobody@localhost> 1170199019 +0100
+ committer nobody <nobody@localhost> 1170199019 +0100
+ data 7
+ nothing
+ M 100644 inline alpha/beta/gamma
+ data 0
+
+ EOF
+ try_load input &&
+ svn_look tree -r1 >actual.tree1 &&
+ svn_look tree -r2 >actual.tree2 &&
+ test_cmp expect.tree actual.tree1 &&
+ test_cmp expect.tree actual.tree2
+'
+
+test_expect_success 'path includes symlink' '
+ reinit_svn &&
+ cat >input <<-\EOF &&
+ reset refs/heads/master
+ commit refs/heads/master
+ mark :1
+ author nobody <nobody@localhost> 1170199019 +0100
+ committer nobody <nobody@localhost> 1170199019 +0100
+ data 7
+ nothing
+ M 120000 inline alpha/beta/gamma
+ data 0
+ commit refs/heads/master
+ mark :1
+ author nobody <nobody@localhost> 1170199019 +0100
+ committer nobody <nobody@localhost> 1170199019 +0100
+ data 7
+ nothing
+ M 100644 inline alpha/beta/gamma/bar
+ data 0
+
+ EOF
+ test_must_fail try_load input
+'
+
+test_done
diff --git a/test-svn-fi.c b/test-svn-fi.c
new file mode 100644
index 0000000..b0605fe
--- /dev/null
+++ b/test-svn-fi.c
@@ -0,0 +1,20 @@
+/*
+ * test-svn-fe: Code to exercise the svn import lib
+ */
+
+#include "git-compat-util.h"
+#include "vcs-svn/svnload.h"
+
+int main(int argc, char *argv[])
+{
+ static const char test_svnfe_usage[] =
+ "test-svn-fe (<dumpfile>";
+ if (argc == 2) {
+ if (svnload_init(argv[1]))
+ return 1;
+ svnload_read();
+ svnload_deinit();
+ return 0;
+ }
+ usage(test_svnfe_usage);
+}
--
1.7.4.rc1.7.g2cf08.dirty
next prev parent reply other threads:[~2011-02-01 14:26 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-01 14:26 [PATCH v3 0/3] Towards a Git-to-SVN bridge Ramkumar Ramachandra
2011-02-01 14:26 ` [PATCH 1/3] vcs-svn: Introduce svnload, a dumpfile producer Ramkumar Ramachandra
2011-02-01 14:46 ` Erik Faye-Lund
2011-02-02 2:53 ` Ramkumar Ramachandra
2011-02-02 12:43 ` Erik Faye-Lund
2011-02-01 14:26 ` Ramkumar Ramachandra [this message]
2011-02-01 18:58 ` [PATCH 2/3] t9010-svn-fi: Add tests for svn-fi Jonathan Nieder
2011-02-02 2:49 ` Ramkumar Ramachandra
2011-02-02 3:18 ` Jonathan Nieder
2011-02-01 14:26 ` [PATCH 3/3] vcs-svn: Refactor dump_export code into dispatch table Ramkumar Ramachandra
2011-02-01 17:42 ` Jonathan Nieder
2011-02-01 21:29 ` Junio C Hamano
2011-02-02 2:56 ` Ramkumar Ramachandra
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1296570403-9082-3-git-send-email-artagnon@gmail.com \
--to=artagnon@gmail.com \
--cc=david.barr@cordelta.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jrnieder@gmail.com \
--cc=srabbelier@gmail.com \
/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.
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 NNTP newsgroup(s).