1 /*- 2 * SPDX-License-Identifier: BSD-2-Clause 3 * 4 * Copyright (c) 2010 Tim Kientzle 5 * All rights reserved. 6 */ 7 #include "test.h" 8 9 #ifdef HAVE_SYS_WAIT_H 10 #include <sys/wait.h> 11 #endif 12 13 DEFINE_TEST(test_option_n) 14 { 15 int status; 16 17 assertMakeDir("d1", 0755); 18 assertMakeFile("d1/file1", 0644, "d1/file1"); 19 20 /* Test 1: -c without -n */ 21 assertMakeDir("test1", 0755); 22 assertChdir("test1"); 23 assertEqualInt(0, 24 systemf("%s -cf archive.tar -C .. d1 >c.out 2>c.err", testprog)); 25 assertEmptyFile("c.out"); 26 assertEmptyFile("c.err"); 27 assertEqualInt(0, 28 systemf("%s -xf archive.tar >x.out 2>x.err", testprog)); 29 assertEmptyFile("x.out"); 30 assertEmptyFile("x.err"); 31 assertFileContents("d1/file1", 8, "d1/file1"); 32 assertChdir(".."); 33 34 /* Test 2: -c with -n */ 35 assertMakeDir("test2", 0755); 36 assertChdir("test2"); 37 assertEqualInt(0, 38 systemf("%s -cnf archive.tar -C .. d1 >c.out 2>c.err", testprog)); 39 assertEmptyFile("c.out"); 40 assertEmptyFile("c.err"); 41 assertEqualInt(0, 42 systemf("%s -xf archive.tar >x.out 2>x.err", testprog)); 43 assertEmptyFile("x.out"); 44 assertEmptyFile("x.err"); 45 assertIsDir("d1", umasked(0755)); 46 assertFileNotExists("d1/file1"); 47 assertChdir(".."); 48 49 /* 50 * Create a test archive with the following content: 51 * d1/ 52 * d1/file1 53 * d1/file2 54 * file3 55 * d2/file4 56 * 57 * Extracting uses the same code as listing and thus does not 58 * get tested separately. This also covers the 59 * archive_match_set_inclusion_recursion() 60 * API. 61 */ 62 assertMakeFile("d1/file2", 0644, "d1/file2"); 63 assertMakeFile("file3", 0644, "file3"); 64 assertMakeDir("d2", 0755); 65 assertMakeFile("d2/file4", 0644, "d2/file4"); 66 assertEqualInt(0, 67 systemf("%s -cnf partial-archive.tar d1 d1/file1 d1/file2 file3 " 68 "d2/file4 >c.out 2>c.err", testprog)); 69 70 /* Test 3: -t without other options */ 71 assertEqualInt(0, 72 systemf("%s -tf partial-archive.tar >test3.out 2>test3.err", 73 testprog)); 74 assertEmptyFile("test3.err"); 75 assertTextFileContents("d1/\n" 76 "d1/file1\n" 77 "d1/file2\n" 78 "file3\n" 79 "d2/file4\n", 80 "test3.out"); 81 82 /* Test 4: -t without -n and some entries selected */ 83 assertEqualInt(0, 84 systemf("%s -tf partial-archive.tar d1 file3 d2/file4 " 85 ">test4.out 2>test4.err", testprog)); 86 assertEmptyFile("test4.err"); 87 assertTextFileContents("d1/\n" 88 "d1/file1\n" 89 "d1/file2\n" 90 "file3\n" 91 "d2/file4\n", 92 "test4.out"); 93 94 /* Test 5: -t with -n and some entries selected */ 95 assertEqualInt(0, 96 systemf("%s -tnf partial-archive.tar d1 file3 d2/file4 " 97 ">test5.out 2>test5.err", testprog)); 98 assertEmptyFile("test5.err"); 99 assertTextFileContents("d1/\n" 100 "file3\n" 101 "d2/file4\n", 102 "test5.out"); 103 104 /* Test 6: -t without -n and non-existent directory selected */ 105 assertEqualInt(0, 106 systemf("%s -tf partial-archive.tar d2 >test6.out 2>test6.err", 107 testprog)); 108 assertEmptyFile("test6.err"); 109 assertTextFileContents("d2/file4\n", 110 "test6.out"); 111 112 /* Test 7: -t with -n and non-existent directory selected */ 113 status = systemf("%s -tnf partial-archive.tar d2 " 114 ">test7.out 2>test7.err", testprog); 115 assert(status); 116 assert(status != -1); 117 #if !defined(_WIN32) || defined(__CYGWIN__) 118 assert(WIFEXITED(status)); 119 assertEqualInt(1, WEXITSTATUS(status)); 120 #endif 121 assertNonEmptyFile("test7.err"); 122 assertEmptyFile("test7.out"); 123 } 124