Home | History | Annotate | Line # | Download | only in test
      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