@@ -15,6 +15,23 @@ round_trip_body() {
1515 atf_check -s exit:0 -o empty -e empty cmp -s tiny.iso tiny.out.iso
1616}
1717
18+ atf_test_case multi_block_round_trip
19+ multi_block_round_trip_head () {
20+ atf_set " descr" " Compressing and extracting a multi-block ISO round-trips cleanly"
21+ }
22+ multi_block_round_trip_body () {
23+ srcdir=" $( atf_get_srcdir) "
24+ prog=" ${srcdir} /../ciso-maker"
25+
26+ dd if=/dev/zero of=multi.iso bs=2048 count=3 > /dev/null 2>&1
27+ printf ' block-two-marker' | dd of=multi.iso bs=1 seek=2304 conv=notrunc > /dev/null 2>&1
28+ printf ' block-three-marker' | dd of=multi.iso bs=1 seek=4352 conv=notrunc > /dev/null 2>&1
29+
30+ atf_check -s exit:0 -o ignore -e ignore " ${prog} " multi.iso multi.cso
31+ atf_check -s exit:0 -o ignore -e ignore " ${prog} " -x multi.cso multi.out.iso
32+ atf_check -s exit:0 -o empty -e empty cmp -s multi.iso multi.out.iso
33+ }
34+
1835atf_test_case reject_same_input_output
1936reject_same_input_output_head () {
2037 atf_set " descr" " The tool rejects in-place conversion to avoid truncating the input"
@@ -32,6 +49,26 @@ reject_same_input_output_body() {
3249 " ${prog} " same.iso same.iso
3350}
3451
52+ atf_test_case reject_truncated_cso
53+ reject_truncated_cso_head () {
54+ atf_set " descr" " Truncated CSO input is rejected cleanly"
55+ }
56+ reject_truncated_cso_body () {
57+ srcdir=" $( atf_get_srcdir) "
58+ prog=" ${srcdir} /../ciso-maker"
59+
60+ truncate -s 2048 tiny.iso
61+ atf_check -s exit:0 -o ignore -e ignore " ${prog} " tiny.iso tiny.cso
62+ size=" $( wc -c < tiny.cso) "
63+ dd if=tiny.cso of=tiny.truncated.cso bs=1 count=$(( size - 1 )) > /dev/null 2>&1
64+
65+ atf_check \
66+ -s exit:1 \
67+ -o ignore \
68+ -e match:" read error|file read error" \
69+ " ${prog} " -x tiny.truncated.cso tiny.out.iso
70+ }
71+
3572atf_test_case reject_invalid_cso
3673reject_invalid_cso_head () {
3774 atf_set " descr" " Malformed CSO input is rejected cleanly"
@@ -49,8 +86,29 @@ reject_invalid_cso_body() {
4986 " ${prog} " -x bad.cso bad.iso
5087}
5188
89+ atf_test_case plain_block_cso
90+ plain_block_cso_head () {
91+ atf_set " descr" " Incompressible input is stored as a plain CSO block"
92+ }
93+ plain_block_cso_body () {
94+ srcdir=" $( atf_get_srcdir) "
95+ prog=" ${srcdir} /../ciso-maker"
96+
97+ dd if=/dev/urandom of=plain.iso bs=2048 count=1 > /dev/null 2>&1
98+
99+ atf_check -s exit:0 -o ignore -e ignore " ${prog} " plain.iso plain.cso
100+ atf_check -s exit:0 -o ignore -e ignore " ${prog} " -x plain.cso plain.out.iso
101+ atf_check -s exit:0 -o empty -e empty cmp -s plain.iso plain.out.iso
102+
103+ msb=" $( od -An -t u1 -j 27 -N 1 plain.cso | awk ' {print $1}' ) "
104+ atf_check_equal " 128" " ${msb} "
105+ }
106+
52107atf_init_test_cases () {
53108 atf_add_test_case round_trip
109+ atf_add_test_case multi_block_round_trip
54110 atf_add_test_case reject_same_input_output
111+ atf_add_test_case reject_truncated_cso
55112 atf_add_test_case reject_invalid_cso
113+ atf_add_test_case plain_block_cso
56114}
0 commit comments