1 /*- 2 * SPDX-License-Identifier: BSD-2-Clause 3 * 4 * Copyright (c) 2020 Martin Matuska 5 * All rights reserved. 6 */ 7 #include "test.h" 8 9 DEFINE_TEST(test_option_safe_writes) 10 { 11 /* Create files */ 12 assertMakeDir("in", 0755); 13 assertEqualInt(0, chdir("in")); 14 assertMakeFile("f", 0644, "a"); 15 assertMakeFile("fh", 0644, "b"); 16 assertMakeFile("d", 0644, "c"); 17 assertMakeFile("fs", 0644, "d"); 18 assertMakeFile("ds", 0644, "e"); 19 assertEqualInt(0, chdir("..")); 20 21 /* Tar files up */ 22 assertEqualInt(0, 23 systemf("%s -c -C in -f t.tar f fh d fs ds " 24 ">pack.out 2>pack.err", testprog)); 25 26 /* Verify that nothing went to stdout or stderr. */ 27 assertEmptyFile("pack.err"); 28 assertEmptyFile("pack.out"); 29 30 /* Create various objects */ 31 assertMakeDir("out", 0755); 32 assertEqualInt(0, chdir("out")); 33 assertMakeFile("f", 0644, "a"); 34 assertMakeHardlink("fh", "f"); 35 assertMakeDir("d", 0755); 36 if (canSymlink()) { 37 assertMakeSymlink("fs", "f", 0); 38 assertMakeSymlink("ds", "d", 1); 39 } 40 assertEqualInt(0, chdir("..")); 41 42 /* Extract created archive with safe writes */ 43 assertEqualInt(0, 44 systemf("%s -x -C out --safe-writes -f t.tar " 45 ">unpack.out 2>unpack.err", testprog)); 46 47 /* Verify that nothing went to stdout or stderr. */ 48 assertEmptyFile("unpack.err"); 49 assertEmptyFile("unpack.out"); 50 51 /* Verify that files were overwritten properly */ 52 assertEqualInt(0, chdir("out")); 53 assertTextFileContents("a","f"); 54 assertTextFileContents("b","fh"); 55 assertTextFileContents("c","d"); 56 assertTextFileContents("d","fs"); 57 assertTextFileContents("e","ds"); 58 } 59