1caf54c4fSMartin Matuska /*-
2*bd66c1b4SMartin Matuska * SPDX-License-Identifier: BSD-2-Clause
3*bd66c1b4SMartin Matuska *
4caf54c4fSMartin Matuska * Copyright (c) 2003-2007 Tim Kientzle
5caf54c4fSMartin Matuska * All rights reserved.
6caf54c4fSMartin Matuska */
7caf54c4fSMartin Matuska #include "test.h"
8caf54c4fSMartin Matuska
DEFINE_TEST(test_option_d)9caf54c4fSMartin Matuska DEFINE_TEST(test_option_d)
10caf54c4fSMartin Matuska {
11caf54c4fSMartin Matuska int r;
12caf54c4fSMartin Matuska
13caf54c4fSMartin Matuska /*
14caf54c4fSMartin Matuska * Create a file in a directory.
15caf54c4fSMartin Matuska */
16caf54c4fSMartin Matuska assertMakeDir("dir", 0755);
17caf54c4fSMartin Matuska assertMakeFile("dir/file", 0644, NULL);
18caf54c4fSMartin Matuska
19caf54c4fSMartin Matuska /* Create an archive. */
20caf54c4fSMartin Matuska r = systemf("echo dir/file | %s -o > archive.cpio 2>archive.err", testprog);
21caf54c4fSMartin Matuska assertEqualInt(r, 0);
22caf54c4fSMartin Matuska assertTextFileContents("1 block\n", "archive.err");
23caf54c4fSMartin Matuska assertFileSize("archive.cpio", 512);
24caf54c4fSMartin Matuska
25caf54c4fSMartin Matuska /* Dearchive without -d, this should fail. */
26caf54c4fSMartin Matuska assertMakeDir("without-d", 0755);
27caf54c4fSMartin Matuska assertChdir("without-d");
28caf54c4fSMartin Matuska r = systemf("%s -i < ../archive.cpio >out 2>err", testprog);
29*bd66c1b4SMartin Matuska assert(r != 0);
30caf54c4fSMartin Matuska assertEmptyFile("out");
31caf54c4fSMartin Matuska /* And the file should not be restored. */
32caf54c4fSMartin Matuska assertFileNotExists("dir/file");
33caf54c4fSMartin Matuska
34caf54c4fSMartin Matuska /* Dearchive with -d, this should succeed. */
35caf54c4fSMartin Matuska assertChdir("..");
36caf54c4fSMartin Matuska assertMakeDir("with-d", 0755);
37caf54c4fSMartin Matuska assertChdir("with-d");
38caf54c4fSMartin Matuska r = systemf("%s -id < ../archive.cpio >out 2>err", testprog);
39caf54c4fSMartin Matuska assertEqualInt(r, 0);
40caf54c4fSMartin Matuska assertEmptyFile("out");
41caf54c4fSMartin Matuska assertTextFileContents("1 block\n", "err");
42caf54c4fSMartin Matuska /* And the file should be restored. */
43caf54c4fSMartin Matuska assertFileExists("dir/file");
44caf54c4fSMartin Matuska }
45