xref: /freebsd/contrib/libarchive/tar/test/test_option_exclude.c (revision bd66c1b43e33540205dbc1187c2f2a15c58b57ba)
16c95142eSMartin Matuska /*-
2*bd66c1b4SMartin Matuska  * SPDX-License-Identifier: BSD-2-Clause
3*bd66c1b4SMartin Matuska  *
46c95142eSMartin Matuska  * Copyright (c) 2010 Tim Kientzle
56c95142eSMartin Matuska  * All rights reserved.
66c95142eSMartin Matuska  */
76c95142eSMartin Matuska #include "test.h"
86c95142eSMartin Matuska 
DEFINE_TEST(test_option_exclude)96c95142eSMartin Matuska DEFINE_TEST(test_option_exclude)
106c95142eSMartin Matuska {
116c95142eSMartin Matuska 	int r;
126c95142eSMartin Matuska 
136c95142eSMartin Matuska 	assertMakeFile("file1", 0644, "file1");
146c95142eSMartin Matuska 	assertMakeFile("file2", 0644, "file2");
156c95142eSMartin Matuska 	assertEqualInt(0, systemf("%s -cf archive.tar file1 file2", testprog));
166c95142eSMartin Matuska 
176c95142eSMartin Matuska 	/*
186c95142eSMartin Matuska 	 * Now, try extracting from the test archive with various --exclude options.
196c95142eSMartin Matuska 	 */
206c95142eSMartin Matuska 
216c95142eSMartin Matuska 	/* Test 1: Without --exclude */
226c95142eSMartin Matuska 	assertMakeDir("test1", 0755);
236c95142eSMartin Matuska 	assertChdir("test1");
246c95142eSMartin Matuska 	assertEqualInt(0,
256c95142eSMartin Matuska 	    systemf("%s -xf ../archive.tar >test.out 2>test.err", testprog));
266c95142eSMartin Matuska 	assertFileContents("file1", 5, "file1");
276c95142eSMartin Matuska 	assertFileContents("file2", 5, "file2");
286c95142eSMartin Matuska 	assertEmptyFile("test.out");
296c95142eSMartin Matuska 	assertEmptyFile("test.err");
306c95142eSMartin Matuska 	assertChdir("..");
316c95142eSMartin Matuska 
326c95142eSMartin Matuska 	/* Test 2: Selecting just one file */
336c95142eSMartin Matuska 	assertMakeDir("test2", 0755);
346c95142eSMartin Matuska 	assertChdir("test2");
356c95142eSMartin Matuska 	assertEqualInt(0,
366c95142eSMartin Matuska 	    systemf("%s -xf ../archive.tar file1 >test.out 2>test.err", testprog));
376c95142eSMartin Matuska 	assertFileContents("file1", 5, "file1");
386c95142eSMartin Matuska 	assertFileNotExists("file2");
396c95142eSMartin Matuska 	assertEmptyFile("test.out");
406c95142eSMartin Matuska 	assertEmptyFile("test.err");
416c95142eSMartin Matuska 	assertChdir("..");
426c95142eSMartin Matuska 
436c95142eSMartin Matuska 	/* Test 3: Use --exclude to skip one file */
446c95142eSMartin Matuska 	assertMakeDir("test3", 0755);
456c95142eSMartin Matuska 	assertChdir("test3");
466c95142eSMartin Matuska 	assertEqualInt(0,
476c95142eSMartin Matuska 	    systemf("%s -xf ../archive.tar --exclude file1 >test.out 2>test.err", testprog));
486c95142eSMartin Matuska 	assertFileNotExists("file1");
496c95142eSMartin Matuska 	assertFileContents("file2", 5, "file2");
506c95142eSMartin Matuska 	assertEmptyFile("test.out");
516c95142eSMartin Matuska 	assertEmptyFile("test.err");
526c95142eSMartin Matuska 	assertChdir("..");
536c95142eSMartin Matuska 
546c95142eSMartin Matuska 	/* Test 4: Selecting one valid and one invalid file */
556c95142eSMartin Matuska 	assertMakeDir("test4", 0755);
566c95142eSMartin Matuska 	assertChdir("test4");
576c95142eSMartin Matuska 	r = systemf("%s -xf ../archive.tar file1 file3 >test.out 2>test.err", testprog);
586c95142eSMartin Matuska 	assert(r != 0);
596c95142eSMartin Matuska 	assertFileContents("file1", 5, "file1");
606c95142eSMartin Matuska 	assertFileNotExists("file2");
616c95142eSMartin Matuska 	assertFileNotExists("file3");
626c95142eSMartin Matuska 	assertEmptyFile("test.out");
636c95142eSMartin Matuska 	assertNonEmptyFile("test.err");
646c95142eSMartin Matuska 	assertChdir("..");
656c95142eSMartin Matuska 
666c95142eSMartin Matuska 	/* Test 5: Selecting one valid file twice */
676c95142eSMartin Matuska 	assertMakeDir("test5", 0755);
686c95142eSMartin Matuska 	assertChdir("test5");
696c95142eSMartin Matuska 	assertEqualInt(0,
706c95142eSMartin Matuska 	    systemf("%s -xf ../archive.tar file1 file1 >test.out 2>test.err", testprog));
716c95142eSMartin Matuska 	assertFileContents("file1", 5, "file1");
726c95142eSMartin Matuska 	assertFileNotExists("file2");
736c95142eSMartin Matuska 	assertEmptyFile("test.out");
746c95142eSMartin Matuska 	assertEmptyFile("test.err");
756c95142eSMartin Matuska 	assertChdir("..");
766c95142eSMartin Matuska 
776c95142eSMartin Matuska 	/* Test 6: Include and exclude the same file */
786c95142eSMartin Matuska 	assertMakeDir("test6", 0755);
796c95142eSMartin Matuska 	assertChdir("test6");
806c95142eSMartin Matuska 	assertEqualInt(0,
816c95142eSMartin Matuska 	    systemf("%s -xf ../archive.tar --exclude file1 file1 >test.out 2>test.err", testprog));
826c95142eSMartin Matuska 	assertFileNotExists("file1");
836c95142eSMartin Matuska 	assertFileNotExists("file2");
846c95142eSMartin Matuska 	assertEmptyFile("test.out");
856c95142eSMartin Matuska 	assertEmptyFile("test.err");
866c95142eSMartin Matuska 	assertChdir("..");
876c95142eSMartin Matuska 
886c95142eSMartin Matuska 	/* Test 7: Exclude a non-existent file */
896c95142eSMartin Matuska 	assertMakeDir("test7", 0755);
906c95142eSMartin Matuska 	assertChdir("test7");
916c95142eSMartin Matuska 	assertEqualInt(0,
926c95142eSMartin Matuska 	    systemf("%s -xf ../archive.tar --exclude file3 file1 >test.out 2>test.err", testprog));
936c95142eSMartin Matuska 	assertFileContents("file1", 5, "file1");
946c95142eSMartin Matuska 	assertFileNotExists("file2");
956c95142eSMartin Matuska 	assertFileNotExists("file3");
966c95142eSMartin Matuska 	assertEmptyFile("test.out");
976c95142eSMartin Matuska 	assertEmptyFile("test.err");
986c95142eSMartin Matuska 	assertChdir("..");
996c95142eSMartin Matuska 
1006c95142eSMartin Matuska 	/* Test 8: Include a non-existent file */
1016c95142eSMartin Matuska 	assertMakeDir("test8", 0755);
1026c95142eSMartin Matuska 	assertChdir("test8");
1036c95142eSMartin Matuska 	r = systemf("%s -xf ../archive.tar file3 >test.out 2>test.err", testprog);
1046c95142eSMartin Matuska 	assert(r != 0);
1056c95142eSMartin Matuska 	assertFileNotExists("file1");
1066c95142eSMartin Matuska 	assertFileNotExists("file2");
1076c95142eSMartin Matuska 	assertFileNotExists("file3");
1086c95142eSMartin Matuska 	assertEmptyFile("test.out");
1096c95142eSMartin Matuska 	assertNonEmptyFile("test.err");
1106c95142eSMartin Matuska 	assertChdir("..");
1116c95142eSMartin Matuska 
1126c95142eSMartin Matuska 	/* Test 9: Include a non-existent file plus an exclusion */
1136c95142eSMartin Matuska 	assertMakeDir("test9", 0755);
1146c95142eSMartin Matuska 	assertChdir("test9");
1156c95142eSMartin Matuska 	r = systemf("%s -xf ../archive.tar --exclude file1 file3 >test.out 2>test.err", testprog);
1166c95142eSMartin Matuska 	assert(r != 0);
1176c95142eSMartin Matuska 	assertFileNotExists("file1");
1186c95142eSMartin Matuska 	assertFileNotExists("file2");
1196c95142eSMartin Matuska 	assertFileNotExists("file3");
1206c95142eSMartin Matuska 	assertEmptyFile("test.out");
1216c95142eSMartin Matuska 	assertNonEmptyFile("test.err");
1226c95142eSMartin Matuska 	assertChdir("..");
1236c95142eSMartin Matuska }
124