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 #define USTAR_OPT " --format=ustar"
10
DEFINE_TEST(test_option_b)11 DEFINE_TEST(test_option_b)
12 {
13 char *testprog_ustar;
14 size_t testprog_ustar_len;
15
16 assertMakeFile("file1", 0644, "file1");
17 if (systemf("cat file1 > test_cat.out 2> test_cat.err") != 0) {
18 skipping("This test requires a `cat` program");
19 return;
20 }
21 testprog_ustar_len = strlen(testprog) + sizeof(USTAR_OPT) + 1;
22 testprog_ustar = malloc(testprog_ustar_len);
23 strncpy(testprog_ustar, testprog, testprog_ustar_len);
24 strncat(testprog_ustar, USTAR_OPT, testprog_ustar_len);
25
26 /*
27 * Bsdtar does not pad if the output is going directly to a disk file.
28 */
29 assertEqualInt(0, systemf("%s -cf archive1.tar file1 >test1.out 2>test1.err", testprog_ustar));
30 failure("bsdtar does not pad archives written directly to regular files");
31 assertFileSize("archive1.tar", 2048);
32 assertEmptyFile("test1.out");
33 assertEmptyFile("test1.err");
34
35 /*
36 * Bsdtar does pad to the block size if the output is going to a socket.
37 */
38 /* Default is -b 20 */
39 assertEqualInt(0, systemf("%s -cf - file1 2>test2.err | cat >archive2.tar ", testprog_ustar));
40 failure("bsdtar does pad archives written to pipes");
41 assertFileSize("archive2.tar", 10240);
42 assertEmptyFile("test2.err");
43
44 assertEqualInt(0, systemf("%s -cf - -b 20 file1 2>test3.err | cat >archive3.tar ", testprog_ustar));
45 assertFileSize("archive3.tar", 10240);
46 assertEmptyFile("test3.err");
47
48 assertEqualInt(0, systemf("%s -cf - -b 10 file1 2>test4.err | cat >archive4.tar ", testprog_ustar));
49 assertFileSize("archive4.tar", 5120);
50 assertEmptyFile("test4.err");
51
52 assertEqualInt(0, systemf("%s -cf - -b 1 file1 2>test5.err | cat >archive5.tar ", testprog_ustar));
53 assertFileSize("archive5.tar", 2048);
54 assertEmptyFile("test5.err");
55
56 assertEqualInt(0, systemf("%s -cf - -b 8192 file1 2>test6.err | cat >archive6.tar ", testprog_ustar));
57 assertFileSize("archive6.tar", 4194304);
58 assertEmptyFile("test6.err");
59
60 /*
61 * Note: It's not possible to verify at this level that blocks
62 * are getting written with the
63 */
64
65 free(testprog_ustar);
66 }
67