1b9128a37SMartin Matuska /*- 2*bd66c1b4SMartin Matuska * SPDX-License-Identifier: BSD-2-Clause 3*bd66c1b4SMartin Matuska * 4b9128a37SMartin Matuska * Copyright (c) 2003-2010 Tim Kientzle 5b9128a37SMartin Matuska * Copyright (c) 2024 Haelwenn (lanodan) Monnier 6b9128a37SMartin Matuska * All rights reserved. 7b9128a37SMartin Matuska */ 8b9128a37SMartin Matuska #include "test.h" 9b9128a37SMartin Matuska 10b9128a37SMartin Matuska DEFINE_TEST(test_option_group) 11b9128a37SMartin Matuska { 12b9128a37SMartin Matuska char *reference, *data; 13b9128a37SMartin Matuska size_t s; 14b9128a37SMartin Matuska 15b9128a37SMartin Matuska assertUmask(0); 16b9128a37SMartin Matuska assertMakeFile("file", 0644, "1234567890"); 17b9128a37SMartin Matuska 18b9128a37SMartin Matuska /* Create archive with no special options. */ 19b9128a37SMartin Matuska failure("Error invoking %s c", testprog); 20b9128a37SMartin Matuska assertEqualInt(0, 21b9128a37SMartin Matuska systemf("%s cf archive1 --format=ustar file >stdout1.txt 2>stderr1.txt", 22b9128a37SMartin Matuska testprog)); 23b9128a37SMartin Matuska assertEmptyFile("stdout1.txt"); 24b9128a37SMartin Matuska assertEmptyFile("stderr1.txt"); 25b9128a37SMartin Matuska reference = slurpfile(&s, "archive1"); 26b9128a37SMartin Matuska 27b9128a37SMartin Matuska /* Create archive with --group (numeric) */ 28b9128a37SMartin Matuska failure("Error invoking %s c", testprog); 29b9128a37SMartin Matuska assertEqualInt(0, 30b9128a37SMartin Matuska systemf("%s cf archive2 --group=17 --format=ustar file >stdout2.txt 2>stderr2.txt", 31b9128a37SMartin Matuska testprog)); 32b9128a37SMartin Matuska assertEmptyFile("stdout2.txt"); 33b9128a37SMartin Matuska assertEmptyFile("stderr2.txt"); 34b9128a37SMartin Matuska data = slurpfile(&s, "archive2"); 35b9128a37SMartin Matuska assertEqualMem(data + 116, "000021 \0", 8); 36b9128a37SMartin Matuska /* Gname field in ustar header should be empty. */ 37b9128a37SMartin Matuska assertEqualMem(data + 297, "\0", 1); 38b9128a37SMartin Matuska free(data); 39b9128a37SMartin Matuska 40b9128a37SMartin Matuska /* Again with --group (name) */ 41b9128a37SMartin Matuska failure("Error invoking %s c", testprog); 42b9128a37SMartin Matuska assertEqualInt(0, 43b9128a37SMartin Matuska systemf("%s cf archive3 --group=foofoofoo --format=ustar file >stdout3.txt 2>stderr3.txt", 44b9128a37SMartin Matuska testprog)); 45b9128a37SMartin Matuska assertEmptyFile("stdout3.txt"); 46b9128a37SMartin Matuska assertEmptyFile("stderr3.txt"); 47b9128a37SMartin Matuska data = slurpfile(&s, "archive3"); 48b9128a37SMartin Matuska /* Gid should be unchanged from original reference. */ 49b9128a37SMartin Matuska assertEqualMem(data + 116, reference + 116, 8); 50b9128a37SMartin Matuska assertEqualMem(data + 297, "foofoofoo\0", 10); 51b9128a37SMartin Matuska free(data); 52b9128a37SMartin Matuska 53b9128a37SMartin Matuska /* Again with --group (name:id) */ 54b9128a37SMartin Matuska failure("Error invoking %s c", testprog); 55b9128a37SMartin Matuska assertEqualInt(0, 56b9128a37SMartin Matuska systemf("%s cf archive4 --group=foofoofoo:17 --format=ustar file >stdout4.txt 2>stderr4.txt", 57b9128a37SMartin Matuska testprog)); 58b9128a37SMartin Matuska assertEmptyFile("stdout4.txt"); 59b9128a37SMartin Matuska assertEmptyFile("stderr4.txt"); 60b9128a37SMartin Matuska data = slurpfile(&s, "archive4"); 61b9128a37SMartin Matuska assertEqualMem(data + 116, "000021 \0", 8); 62b9128a37SMartin Matuska assertEqualMem(data + 297, "foofoofoo\0", 10); 63b9128a37SMartin Matuska free(data); 64b9128a37SMartin Matuska 65b9128a37SMartin Matuska free(reference); 66b9128a37SMartin Matuska } 67