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