diff options
author | Tim Kientzle <kientzle@gmail.com> | 2010-04-10 17:27:38 -0400 |
---|---|---|
committer | Tim Kientzle <kientzle@gmail.com> | 2010-04-10 17:27:38 -0400 |
commit | 75725a83858f77827415285a9b15afa7119d855f (patch) | |
tree | 92ca96510b0c8feeb5d1b8f360bf11619e291e79 /tar | |
parent | 055b725a714af21024387c4bd6d3a5f3e6ce9809 (diff) | |
download | libarchive-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.txt | 1 | ||||
-rw-r--r-- | tar/test/main.c | 11 | ||||
-rw-r--r-- | tar/test/test.h | 2 | ||||
-rw-r--r-- | tar/test/test_option_C_upper.c | 113 |
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(".."); +} |