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
DEFINE_TEST(test_option_safe_writes)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 assertMakeDir("fd", 0755);
20 assertEqualInt(0, chdir(".."));
21
22 /* Tar files up */
23 assertEqualInt(0,
24 systemf("%s -c -C in -f t.tar f fh d fs ds fd "
25 ">pack.out 2>pack.err", testprog));
26
27 /* Verify that nothing went to stdout or stderr. */
28 assertEmptyFile("pack.err");
29 assertEmptyFile("pack.out");
30
31 /* Create various objects */
32 assertMakeDir("out", 0755);
33 assertEqualInt(0, chdir("out"));
34 assertMakeFile("f", 0644, "a");
35 assertMakeHardlink("fh", "f");
36 assertMakeFile("fd", 0644, "b");
37 assertMakeDir("d", 0755);
38 if (canSymlink()) {
39 assertMakeSymlink("fs", "f", 0);
40 assertMakeSymlink("ds", "d", 1);
41 }
42 assertEqualInt(0, chdir(".."));
43
44 /* Extract created archive with safe writes */
45 assertEqualInt(0,
46 systemf("%s -x -C out --safe-writes -f t.tar "
47 ">unpack.out 2>unpack.err", testprog));
48
49 /* Verify that nothing went to stdout or stderr. */
50 assertEmptyFile("unpack.err");
51 assertEmptyFile("unpack.out");
52
53 /* Verify that files were overwritten properly */
54 assertEqualInt(0, chdir("out"));
55 assertTextFileContents("a","f");
56 assertTextFileContents("b","fh");
57 assertTextFileContents("c","d");
58 assertTextFileContents("d","fs");
59 assertTextFileContents("e","ds");
60 assertIsDir("fd", 0755);
61 }
62