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 DEFINE_TEST(test_option_k) 10 { 11 /* 12 * Create an archive with a couple of different versions of the 13 * same file. 14 */ 15 16 assertMakeFile("foo", 0644, "foo1"); 17 18 assertEqualInt(0, systemf("%s -cf archive.tar foo", testprog)); 19 20 assertMakeFile("foo", 0644, "foo2"); 21 22 assertEqualInt(0, systemf("%s -rf archive.tar foo", testprog)); 23 24 assertMakeFile("bar", 0644, "bar1"); 25 26 assertEqualInt(0, systemf("%s -rf archive.tar bar", testprog)); 27 28 assertMakeFile("foo", 0644, "foo3"); 29 30 assertEqualInt(0, systemf("%s -rf archive.tar foo", testprog)); 31 32 assertMakeFile("bar", 0644, "bar2"); 33 34 assertEqualInt(0, systemf("%s -rf archive.tar bar", testprog)); 35 36 /* 37 * Now, try extracting from the test archive with various 38 * combinations of -k 39 */ 40 41 /* Test 1: No option */ 42 assertMakeDir("test1", 0755); 43 assertChdir("test1"); 44 assertEqualInt(0, 45 systemf("%s -xf ../archive.tar >test.out 2>test.err", testprog)); 46 assertFileContents("foo3", 4, "foo"); 47 assertFileContents("bar2", 4, "bar"); 48 assertEmptyFile("test.out"); 49 assertEmptyFile("test.err"); 50 assertChdir(".."); 51 52 /* Test 2: With -k, we should just get the first versions. */ 53 assertMakeDir("test2", 0755); 54 assertChdir("test2"); 55 assertEqualInt(0, 56 systemf("%s -xf ../archive.tar -k >test.out 2>test.err", testprog)); 57 assertFileContents("foo1", 4, "foo"); 58 assertFileContents("bar1", 4, "bar"); 59 assertEmptyFile("test.out"); 60 assertEmptyFile("test.err"); 61 assertChdir(".."); 62 63 /* Test 3: Without -k, existing files should get overwritten */ 64 assertMakeDir("test3", 0755); 65 assertChdir("test3"); 66 assertMakeFile("bar", 0644, "bar0"); 67 assertMakeFile("foo", 0644, "foo0"); 68 assertEqualInt(0, 69 systemf("%s -xf ../archive.tar >test.out 2>test.err", testprog)); 70 assertFileContents("foo3", 4, "foo"); 71 assertFileContents("bar2", 4, "bar"); 72 assertEmptyFile("test.out"); 73 assertEmptyFile("test.err"); 74 assertChdir(".."); 75 76 /* Test 4: With -k, existing files should not get overwritten */ 77 assertMakeDir("test4", 0755); 78 assertChdir("test4"); 79 assertMakeFile("bar", 0644, "bar0"); 80 assertMakeFile("foo", 0644, "foo0"); 81 assertEqualInt(0, 82 systemf("%s -xf ../archive.tar -k >test.out 2>test.err", testprog)); 83 assertFileContents("foo0", 4, "foo"); 84 assertFileContents("bar0", 4, "bar"); 85 assertEmptyFile("test.out"); 86 assertEmptyFile("test.err"); 87 assertChdir(".."); 88 } 89