1 ///////////////////////////////////////////////////////////////////////////////
3 /// \file test_stream_flags.c
4 /// \brief Tests Stream Header and Stream Footer coders
6 // Copyright (C) 2007 Lasse Collin
8 // This library is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU Lesser General Public
10 // License as published by the Free Software Foundation; either
11 // version 2.1 of the License, or (at your option) any later version.
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 // Lesser General Public License for more details.
18 ///////////////////////////////////////////////////////////////////////////////
23 static lzma_stream_flags known_flags;
24 static lzma_stream_flags decoded_flags;
25 static uint8_t buffer[LZMA_STREAM_HEADER_SIZE];
31 return !lzma_stream_flags_equal(&known_flags, &decoded_flags);
36 test_header_decoder(lzma_ret expected_ret)
38 memcrap(&decoded_flags, sizeof(decoded_flags));
40 if (lzma_stream_header_decode(&decoded_flags, buffer) != expected_ret)
43 if (expected_ret != LZMA_OK)
46 // Header doesn't have Backward Size, so make
47 // lzma_stream_flags_equal() ignore it.
48 decoded_flags.backward_size = LZMA_VLI_VALUE_UNKNOWN;
56 memcrap(buffer, sizeof(buffer));
57 expect(lzma_stream_header_encode(&known_flags, buffer) == LZMA_OK);
58 succeed(test_header_decoder(LZMA_OK));
63 test_footer_decoder(lzma_ret expected_ret)
65 memcrap(&decoded_flags, sizeof(decoded_flags));
67 if (lzma_stream_footer_decode(&decoded_flags, buffer) != expected_ret)
70 if (expected_ret != LZMA_OK)
80 memcrap(buffer, sizeof(buffer));
81 expect(lzma_stream_footer_encode(&known_flags, buffer) == LZMA_OK);
82 succeed(test_footer_decoder(LZMA_OK));
87 test_encode_invalid(void)
89 known_flags.check = LZMA_CHECK_ID_MAX + 1;
90 known_flags.backward_size = 1024;
92 expect(lzma_stream_header_encode(&known_flags, buffer)
95 expect(lzma_stream_footer_encode(&known_flags, buffer)
98 known_flags.check = (lzma_check)(-1);
100 expect(lzma_stream_header_encode(&known_flags, buffer)
103 expect(lzma_stream_footer_encode(&known_flags, buffer)
106 known_flags.check = LZMA_CHECK_NONE;
107 known_flags.backward_size = 0;
109 // Header encoder ignores backward_size.
110 expect(lzma_stream_header_encode(&known_flags, buffer) == LZMA_OK);
112 expect(lzma_stream_footer_encode(&known_flags, buffer)
115 known_flags.backward_size = LZMA_VLI_VALUE_MAX;
117 expect(lzma_stream_header_encode(&known_flags, buffer) == LZMA_OK);
119 expect(lzma_stream_footer_encode(&known_flags, buffer)
125 test_decode_invalid(void)
127 known_flags.check = LZMA_CHECK_NONE;
128 known_flags.backward_size = 1024;
130 expect(lzma_stream_header_encode(&known_flags, buffer) == LZMA_OK);
132 // Test 1 (invalid Magic Bytes)
134 succeed(test_header_decoder(LZMA_FORMAT_ERROR));
137 // Test 2a (valid CRC32)
138 uint32_t crc = lzma_crc32(buffer + 6, 2, 0);
139 integer_write_32(buffer + 8, crc);
140 succeed(test_header_decoder(LZMA_OK));
142 // Test 2b (invalid Stream Flags with valid CRC32)
144 crc = lzma_crc32(buffer + 6, 2, 0);
145 integer_write_32(buffer + 8, crc);
146 succeed(test_header_decoder(LZMA_HEADER_ERROR));
148 // Test 3 (invalid CRC32)
149 expect(lzma_stream_header_encode(&known_flags, buffer) == LZMA_OK);
151 succeed(test_header_decoder(LZMA_DATA_ERROR));
153 // Test 4 (invalid Stream Flags with valid CRC32)
154 expect(lzma_stream_footer_encode(&known_flags, buffer) == LZMA_OK);
156 crc = lzma_crc32(buffer + 4, 6, 0);
157 integer_write_32(buffer, crc);
158 succeed(test_footer_decoder(LZMA_HEADER_ERROR));
160 // Test 5 (invalid Magic Bytes)
161 expect(lzma_stream_footer_encode(&known_flags, buffer) == LZMA_OK);
163 succeed(test_footer_decoder(LZMA_FORMAT_ERROR));
173 known_flags.backward_size = 1024;
174 for (lzma_check check = LZMA_CHECK_NONE;
175 check <= LZMA_CHECK_ID_MAX; ++check) {
181 test_encode_invalid();
182 test_decode_invalid();