1 |
/*- |
2 |
* Copyright (c) 2014 Michihiro NAKAJIMA |
3 |
* All rights reserved. |
4 |
* |
5 |
* Redistribution and use in source and binary forms, with or without |
6 |
* modification, are permitted provided that the following conditions |
7 |
* are met: |
8 |
* 1. Redistributions of source code must retain the above copyright |
9 |
* notice, this list of conditions and the following disclaimer. |
10 |
* 2. Redistributions in binary form must reproduce the above copyright |
11 |
* notice, this list of conditions and the following disclaimer in the |
12 |
* documentation and/or other materials provided with the distribution. |
13 |
* |
14 |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR |
15 |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
16 |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
17 |
* IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, |
18 |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
19 |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
20 |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
21 |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
22 |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
23 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
24 |
*/ |
25 |
#include "test.h" |
26 |
__FBSDID("$FreeBSD$"); |
27 |
|
28 |
DEFINE_TEST(test_option_lz4) |
29 |
{ |
30 |
char *p; |
31 |
int r; |
32 |
size_t s; |
33 |
|
34 |
/* Create a file. */ |
35 |
assertMakeFile("f", 0644, "a"); |
36 |
|
37 |
/* Archive it with lz4 compression. */ |
38 |
r = systemf("echo f | %s -o --lz4 >archive.out 2>archive.err", |
39 |
testprog); |
40 |
p = slurpfile(&s, "archive.err"); |
41 |
p[s] = '\0'; |
42 |
if (r != 0) { |
43 |
if (strstr(p, "compression not available") != NULL) { |
44 |
skipping("This version of bsdcpio was compiled " |
45 |
"without lz4 support"); |
46 |
return; |
47 |
} |
48 |
/* POSIX permits different handling of the spawnp |
49 |
* system call used to launch the subsidiary |
50 |
* program: */ |
51 |
/* Some systems fail immediately to spawn the new process. */ |
52 |
if (strstr(p, "Can't launch") != NULL && !canLz4()) { |
53 |
skipping("This version of bsdcpio uses an external lz4 program " |
54 |
"but no such program is available on this system."); |
55 |
return; |
56 |
} |
57 |
/* Some systems successfully spawn the new process, |
58 |
* but fail to exec a program within that process. |
59 |
* This results in failure at the first attempt to |
60 |
* write. */ |
61 |
if (strstr(p, "Can't write") != NULL && !canLz4()) { |
62 |
skipping("This version of bsdcpio uses an external lz4 program " |
63 |
"but no such program is available on this system."); |
64 |
return; |
65 |
} |
66 |
failure("--lz4 option is broken: %s", p); |
67 |
assertEqualInt(r, 0); |
68 |
return; |
69 |
} |
70 |
/* Check that the archive file has an lz4 signature. */ |
71 |
p = slurpfile(&s, "archive.out"); |
72 |
assert(s > 2); |
73 |
assertEqualMem(p, "\x04\x22\x4d\x18", 4); |
74 |
} |