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