summaryrefslogtreecommitdiff
path: root/tar
diff options
context:
space:
mode:
authorTim Kientzle <kientzle@gmail.com>2010-04-10 17:27:38 -0400
committerTim Kientzle <kientzle@gmail.com>2010-04-10 17:27:38 -0400
commit75725a83858f77827415285a9b15afa7119d855f (patch)
tree92ca96510b0c8feeb5d1b8f360bf11619e291e79 /tar
parent055b725a714af21024387c4bd6d3a5f3e6ce9809 (diff)
downloadlibarchive-75725a83858f77827415285a9b15afa7119d855f.tar.gz
Test -C
* Add a "testworkdir" global for tests that need an absolute path to their work directory * Exercise -C failure and corner cases such as -C nonexistent -C /absolute SVN-Revision: 2222
Diffstat (limited to 'tar')
-rw-r--r--tar/test/CMakeLists.txt1
-rw-r--r--tar/test/main.c11
-rw-r--r--tar/test/test.h2
-rw-r--r--tar/test/test_option_C_upper.c113
4 files changed, 123 insertions, 4 deletions
diff --git a/tar/test/CMakeLists.txt b/tar/test/CMakeLists.txt
index 7e7c1a99..3b28d5ba 100644
--- a/tar/test/CMakeLists.txt
+++ b/tar/test/CMakeLists.txt
@@ -14,6 +14,7 @@ IF(ENABLE_TAR AND ENABLE_TEST)
test_empty_mtree.c
test_getdate.c
test_help.c
+ test_option_C_upper.c
test_option_T_upper.c
test_option_X_upper.c
test_option_exclude.c
diff --git a/tar/test/main.c b/tar/test/main.c
index 6028d778..256f8abc 100644
--- a/tar/test/main.c
+++ b/tar/test/main.c
@@ -1755,6 +1755,7 @@ test_summarize(const char *filename, int failed)
static int
test_run(int i, const char *tmpdir)
{
+ char workdir[1024];
char logfilename[64];
int failures_before = failures;
int oldumask;
@@ -1781,11 +1782,12 @@ test_run(int i, const char *tmpdir)
logfile = fopen(logfilename, "w");
fprintf(logfile, "%s\n\n", tests[i].name);
/* Chdir() to a work dir for this specific test. */
- if (!assertMakeDir(tests[i].name, 0755)
- || !assertChdir(tests[i].name)) {
+ snprintf(workdir, sizeof(workdir), "%s/%s", tmpdir, tests[i].name);
+ testworkdir = workdir;
+ if (!assertMakeDir(testworkdir, 0755)
+ || !assertChdir(testworkdir)) {
fprintf(stderr,
- "ERROR: Can't chdir to work dir %s/%s\n",
- tmpdir, tests[i].name);
+ "ERROR: Can't chdir to work dir %s\n", testworkdir);
exit(1);
}
/* Explicitly reset the locale before each test. */
@@ -1799,6 +1801,7 @@ test_run(int i, const char *tmpdir)
/*
* Clean up and report afterwards.
*/
+ testworkdir = NULL;
/* Restore umask */
umask(oldumask);
/* Reset locale. */
diff --git a/tar/test/test.h b/tar/test/test.h
index 54c8b8b1..8859530f 100644
--- a/tar/test/test.h
+++ b/tar/test/test.h
@@ -287,3 +287,5 @@ const char *testprogfile;
/* Name of exe to use in printf-formatted command strings. */
/* On Windows, this includes leading/trailing quotes. */
const char *testprog;
+/* Path to working directory for current test */
+const char *testworkdir;
diff --git a/tar/test/test_option_C_upper.c b/tar/test/test_option_C_upper.c
new file mode 100644
index 00000000..8b4dfd0f
--- /dev/null
+++ b/tar/test/test_option_C_upper.c
@@ -0,0 +1,113 @@
+/*-
+ * Copyright (c) 2010 Tim Kientzle
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "test.h"
+__FBSDID("$FreeBSD$");
+
+DEFINE_TEST(test_option_C_upper)
+{
+ int r;
+
+ assertMakeDir("d1", 0755);
+ assertMakeDir("d2", 0755);
+ assertMakeFile("d1/file1", 0644, "d1/file1");
+ assertMakeFile("d1/file2", 0644, "d1/file2");
+ assertMakeFile("d2/file1", 0644, "d2/file1");
+ assertMakeFile("d2/file2", 0644, "d2/file2");
+
+ /*
+ * Test 1: Basic use of -C
+ */
+ assertMakeDir("test1", 0755);
+ assertChdir("test1");
+ assertEqualInt(0, systemf("%s -cf archive.tar -C ../d1 file1 -C ../d2 file2", testprog));
+ assertEqualInt(0,
+ systemf("%s -xf archive.tar >test.out 2>test.err", testprog));
+ assertFileContents("d1/file1", 8, "file1");
+ assertFileContents("d2/file2", 8, "file2");
+ assertEmptyFile("test.out");
+ assertEmptyFile("test.err");
+ assertChdir("..");
+
+
+ /*
+ * Test 2: Multiple -C
+ */
+ assertMakeDir("test2", 0755);
+ assertChdir("test2");
+ assertEqualInt(0, systemf("%s -cf archive.tar -C .. -C d1 file1 -C .. -C d2 file2", testprog));
+ assertEqualInt(0,
+ systemf("%s -xf archive.tar >test.out 2>test.err", testprog));
+ assertFileContents("d1/file1", 8, "file1");
+ assertFileContents("d2/file2", 8, "file2");
+ assertEmptyFile("test.out");
+ assertEmptyFile("test.err");
+ assertChdir("..");
+
+ /*
+ * Test 3: -C fail
+ */
+ assertMakeDir("test3", 0755);
+ assertChdir("test3");
+ r = systemf("%s -cf archive.tar -C ../XXX file1 -C ../d2 file2", testprog);
+ assert(r != 0);
+ assertEqualInt(0,
+ systemf("%s -xf archive.tar >test.out 2>test.err", testprog));
+ assertFileNotExists("file1");
+ assertFileNotExists("file2");
+ assertEmptyFile("test.out");
+ assertEmptyFile("test.err");
+ assertChdir("..");
+
+ /*
+ * Test 4: Absolute -C
+ */
+ assertMakeDir("test4", 0755);
+ assertChdir("test4");
+ assertEqualInt(0,
+ systemf("%s -cf archive.tar -C %s/d1 file1",
+ testprog, testworkdir));
+ assertEqualInt(0,
+ systemf("%s -xf archive.tar >test.out 2>test.err", testprog));
+ assertFileContents("d1/file1", 8, "file1");
+ assertEmptyFile("test.out");
+ assertEmptyFile("test.err");
+ assertChdir("..");
+
+
+ /*
+ * Test 5: Unnecessary -C ignored
+ */
+ assertMakeDir("test5", 0755);
+ assertChdir("test5");
+ assertEqualInt(0,
+ systemf("%s -cf archive.tar -C XXX -C %s/d1 file1",
+ testprog, testworkdir));
+ assertEqualInt(0,
+ systemf("%s -xf archive.tar >test.out 2>test.err", testprog));
+ assertFileContents("d1/file1", 8, "file1");
+ assertEmptyFile("test.out");
+ assertEmptyFile("test.err");
+ assertChdir("..");
+}