1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
3 *
4 * Copyright (c) 2010 Tim Kientzle
5 * Copyright (c) 2012 Michihiro NAKAJIMA
6 * All rights reserved.
7 */
8 #include "test.h"
9
DEFINE_TEST(test_option_older_than)10 DEFINE_TEST(test_option_older_than)
11 {
12 struct stat st;
13
14 /*
15 * Basic test of --older-than.
16 * First, create three files with different mtimes.
17 * Create test1.tar with --older-than, test2.tar without.
18 */
19 assertMakeDir("test1in", 0755);
20 assertChdir("test1in");
21 assertMakeDir("a", 0755);
22 assertMakeDir("a/b", 0755);
23 assertMakeFile("old.txt", 0644, "old.txt");
24 assertMakeFile("a/b/old.txt", 0644, "old file in old directory");
25 assertEqualInt(0, stat("old.txt", &st));
26 sleepUntilAfter(st.st_mtime);
27 assertMakeFile("middle.txt", 0644, "middle.txt");
28 assertEqualInt(0, stat("middle.txt", &st));
29 sleepUntilAfter(st.st_mtime);
30 assertMakeFile("new.txt", 0644, "new");
31 assertMakeFile("a/b/new.txt", 0644, "new file in old directory");
32
33 /* Test --older-than on create */
34 assertEqualInt(0,
35 systemf("%s --format pax -cf ../test1.tar "
36 "--older-than middle.txt *.txt a",
37 testprog));
38 assertEqualInt(0,
39 systemf("%s --format pax -cf ../test2.tar *.txt a",
40 testprog));
41 assertChdir("..");
42
43 /* Extract test1.tar to a clean dir and verify what got archived. */
44 assertMakeDir("test1out", 0755);
45 assertChdir("test1out");
46 assertEqualInt(0, systemf("%s xf ../test1.tar", testprog));
47 assertFileNotExists("new.txt");
48 assertFileNotExists("a/b/new.txt");
49 assertFileNotExists("middle.txt");
50 assertFileExists("old.txt");
51 assertFileExists("a/b/old.txt");
52 assertChdir("..");
53
54 /* Extract test2.tar to a clean dir with --older-than and verify. */
55 assertMakeDir("test2out", 0755);
56 assertChdir("test2out");
57 assertEqualInt(0,
58 systemf("%s xf ../test2.tar --older-than ../test1in/middle.txt",
59 testprog));
60 assertFileNotExists("new.txt");
61 assertFileNotExists("a/b/new.txt");
62 assertFileNotExists("middle.txt");
63 assertFileExists("old.txt");
64 assertFileExists("a/b/old.txt");
65 assertChdir("..");
66 }
67