]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/libarchive/tar/test/test_option_C_upper.c
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / libarchive / tar / test / test_option_C_upper.c
1 /*-
2  * Copyright (c) 2010 Tim Kientzle
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
15  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17  * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
18  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25 #include "test.h"
26 __FBSDID("$FreeBSD$");
27
28 DEFINE_TEST(test_option_C_upper)
29 {
30         int r;
31
32         assertMakeDir("d1", 0755);
33         assertMakeDir("d2", 0755);
34         assertMakeFile("d1/file1", 0644, "d1/file1");
35         assertMakeFile("d1/file2", 0644, "d1/file2");
36         assertMakeFile("d2/file1", 0644, "d2/file1");
37         assertMakeFile("d2/file2", 0644, "d2/file2");
38
39         /*
40          * Test 1: Basic use of -C
41          */
42         assertMakeDir("test1", 0755);
43         assertChdir("test1");
44         assertEqualInt(0, systemf("%s -cf archive.tar -C ../d1 file1 -C ../d2 file2", testprog));
45         assertEqualInt(0,
46             systemf("%s -xf archive.tar >test.out 2>test.err", testprog));
47         assertFileContents("d1/file1", 8, "file1");
48         assertFileContents("d2/file2", 8, "file2");
49         assertEmptyFile("test.out");
50         assertEmptyFile("test.err");
51         assertChdir("..");
52
53
54         /*
55          * Test 2: Multiple -C
56          */
57         assertMakeDir("test2", 0755);
58         assertChdir("test2");
59         assertEqualInt(0, systemf("%s -cf archive.tar -C .. -C d1 file1 -C .. -C d2 file2", testprog));
60         assertEqualInt(0,
61             systemf("%s -xf archive.tar >test.out 2>test.err", testprog));
62         assertFileContents("d1/file1", 8, "file1");
63         assertFileContents("d2/file2", 8, "file2");
64         assertEmptyFile("test.out");
65         assertEmptyFile("test.err");
66         assertChdir("..");
67
68         /*
69          * Test 3: -C fail
70          */
71         assertMakeDir("test3", 0755);
72         assertChdir("test3");
73         r = systemf("%s -cf archive.tar -C ../XXX file1 -C ../d2 file2 2>write.err", testprog);
74         assert(r != 0);
75         assertNonEmptyFile("write.err");
76         assertEqualInt(0,
77             systemf("%s -xf archive.tar >test.out 2>test.err", testprog));
78         assertFileNotExists("file1");
79         assertFileNotExists("file2");
80         assertEmptyFile("test.out");
81         assertEmptyFile("test.err");
82         assertChdir("..");
83
84         /*
85          * Test 4: Absolute -C
86          */
87         assertMakeDir("test4", 0755);
88         assertChdir("test4");
89         assertEqualInt(0,
90             systemf("%s -cf archive.tar -C %s/d1 file1",
91                 testprog, testworkdir));
92         assertEqualInt(0,
93             systemf("%s -xf archive.tar >test.out 2>test.err", testprog));
94         assertFileContents("d1/file1", 8, "file1");
95         assertEmptyFile("test.out");
96         assertEmptyFile("test.err");
97         assertChdir("..");
98
99         /*
100          * Test 5: Unnecessary -C ignored even if directory named doesn't exist
101          */
102         assertMakeDir("test5", 0755);
103         assertChdir("test5");
104         assertEqualInt(0,
105             systemf("%s -cf archive.tar -C XXX -C %s/d1 file1",
106                 testprog, testworkdir));
107         assertEqualInt(0,
108             systemf("%s -xf archive.tar >test.out 2>test.err", testprog));
109         assertFileContents("d1/file1", 8, "file1");
110         assertEmptyFile("test.out");
111         assertEmptyFile("test.err");
112         assertChdir("..");
113
114         /*
115          * Test 6: Necessary -C not ignored if directory doesn't exist
116          */
117         assertMakeDir("test6", 0755);
118         assertChdir("test6");
119         r = systemf("%s -cf archive.tar -C XXX -C ../d1 file1 2>write.err",
120             testprog, testworkdir);
121         assert(r != 0);
122         assertNonEmptyFile("write.err");
123         assertEqualInt(0,
124             systemf("%s -xf archive.tar >test.out 2>test.err", testprog));
125         assertEmptyFile("test.out");
126         assertEmptyFile("test.err");
127         assertChdir("..");
128
129         /*
130          * Test 7: -C used without specifying directory
131          */
132         assertMakeDir("test7", 0755);
133         assertChdir("test7");
134         r = systemf("%s -cf archive.tar ../d1/file1 -C 2>write.err", testprog);
135         assert(r != 0);
136         assertNonEmptyFile("write.err");
137         assertChdir("..");
138
139         /*
140          * Test 8: -C used with meaningless option ''
141          */
142         assertMakeDir("test8", 0755);
143         assertChdir("test8");
144         r = systemf("%s -cf archive.tar ../d1/file1 -C \"\" 2>write.err",
145             testprog);
146         assert(r != 0);
147         assertNonEmptyFile("write.err");
148         assertChdir("..");
149 }