]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Test -C
authorTim Kientzle <kientzle@gmail.com>
Sat, 10 Apr 2010 21:27:38 +0000 (17:27 -0400)
committerTim Kientzle <kientzle@gmail.com>
Sat, 10 Apr 2010 21:27:38 +0000 (17:27 -0400)
  * 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

Makefile.am
tar/test/CMakeLists.txt
tar/test/main.c
tar/test/test.h
tar/test/test_option_C_upper.c [new file with mode: 0644]

index 8ab16d2834b94273b97059b9b3a41c526669092e..48be996a2ac4b0c58f97ebcb9b86a9f2b0b28ecf 100644 (file)
@@ -483,6 +483,7 @@ bsdtar_test_SOURCES=                                                \
        tar/test/test_empty_mtree.c                             \
        tar/test/test_getdate.c                                 \
        tar/test/test_help.c                                    \
+       tar/test/test_option_C_upper.c                          \
        tar/test/test_option_T_upper.c                          \
        tar/test/test_option_X_upper.c                          \
        tar/test/test_option_b.c                                \
index 7e7c1a997d799854d3f5e2bd3b16cf68f12292a4..3b28d5ba2d3acbfb243ec934133d52451b98ae69 100644 (file)
@@ -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
index 6028d7789a4a7e33652daa8afca5856ad67289ba..256f8abcc7cb1465599e6d283e9988b138b75d10 100644 (file)
@@ -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. */
index 54c8b8b10c9223acbef832c77d8afce5596e6d56..8859530fbd8bb09e607df4ae8b1ccf5b3fd2cb3e 100644 (file)
@@ -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 (file)
index 0000000..8b4dfd0
--- /dev/null
@@ -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("..");
+}