xref: /freebsd/contrib/libarchive/cpio/test/test_option_d.c (revision bd66c1b43e33540205dbc1187c2f2a15c58b57ba)
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