blob: 3cbb82daab38976f4cce7c2c4f7ece91c7e575e5 [file] [log] [blame]
Laurence Lundblade2ded3d92018-10-09 21:36:11 +08001/*==============================================================================
Laurence Lundbladed92a6162018-11-01 11:38:35 +07002 Copyright (c) 2016-2018, The Linux Foundation.
Laurence Lundbladeee851742020-01-08 08:37:05 -08003 Copyright (c) 2018-2020, Laurence Lundblade.
Laurence Lundbladed92a6162018-11-01 11:38:35 +07004 All rights reserved.
Laurence Lundblade3aee3a32018-12-17 16:17:45 -08005
Laurence Lundblade0dbc9172018-11-01 14:17:21 +07006Redistribution and use in source and binary forms, with or without
7modification, are permitted provided that the following conditions are
8met:
9 * Redistributions of source code must retain the above copyright
10 notice, this list of conditions and the following disclaimer.
11 * Redistributions in binary form must reproduce the above
12 copyright notice, this list of conditions and the following
13 disclaimer in the documentation and/or other materials provided
14 with the distribution.
15 * Neither the name of The Linux Foundation nor the names of its
16 contributors, nor the name "Laurence Lundblade" may be used to
17 endorse or promote products derived from this software without
18 specific prior written permission.
Laurence Lundblade3aee3a32018-12-17 16:17:45 -080019
Laurence Lundblade0dbc9172018-11-01 14:17:21 +070020THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
21WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
22MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
23ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
24BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
27BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
29OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
30IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Laurence Lundbladeee851742020-01-08 08:37:05 -080031 ============================================================================*/
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080032
33#ifndef __QCBOR__qcbort_decode_tests__
34#define __QCBOR__qcbort_decode_tests__
35
Laurence Lundbladec5fef682020-01-25 11:38:45 -080036#include <stdint.h>
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080037
Laurence Lundblade3aee3a32018-12-17 16:17:45 -080038/*
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080039 Notes:
Laurence Lundblade3aee3a32018-12-17 16:17:45 -080040
Laurence Lundblade844bb5c2020-03-01 17:27:25 -080041 - All the functions in qcbor_decode.h are called once in the aggregation
42 of all the tests below.
Laurence Lundblade3aee3a32018-12-17 16:17:45 -080043
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080044 - All the types that are supported are given as input and parsed by these tests
Laurence Lundblade3aee3a32018-12-17 16:17:45 -080045
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080046 - There is some hostile input such as invalid lengths and CBOR too complex
47 and types this parser doesn't handle
Laurence Lundblade3aee3a32018-12-17 16:17:45 -080048
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080049 */
50
51
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080052/*
53 Parse a well-known set of integers including those around the boundaries and
54 make sure the expected values come out
55 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080056int32_t IntegerValuesParseTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080057
58
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080059/*
60 Decode a simple CBOR encoded array and make sure it returns all the correct values.
61 This is a decode test.
62 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080063int32_t SimpleArrayTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080064
Laurence Lundbladea65b4822019-09-08 12:17:03 -070065
Laurence Lundblade9916b1b2019-09-07 22:33:25 -070066/*
67 Tests with empty maps and arrays
68 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080069int32_t EmptyMapsAndArraysTest(void);
Laurence Lundblade9916b1b2019-09-07 22:33:25 -070070
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080071
72/*
73 Make sure a maximally deep array can be parsed and that the
74 reported nesting level is correct. This uses test vector
75 of CBOR encoded data with a depth of 10. This a parse test.
76 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080077int32_t ParseDeepArrayTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080078
79
80/*
81 See that the correct error is reported when parsing
82 an array of depth 11, one too large.
83 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080084int32_t ParseTooDeepArrayTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080085
86
87/*
88 Try to parse some legit CBOR types that this parsers
89 doesn't support.
90 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080091int32_t UnsupportedCBORDecodeTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080092
93
Laurence Lundblade3aee3a32018-12-17 16:17:45 -080094/*
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080095 This takes the encoded CBOR integers used in the above test and parses
96 it over and over with one more byte less each time. It should fail
97 every time on incorrect CBOR input. This is a hostile input decode test.
98 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080099int32_t ShortBufferParseTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800100
101
Laurence Lundblade3aee3a32018-12-17 16:17:45 -0800102/*
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800103 Same as ShortBufferParseTest, but with a different encoded CBOR input.
104 It is another hostile input test
105 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800106int32_t ShortBufferParseTest2(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800107
108
109/*
110 Parses the somewhat complicated CBOR MAP and makes sure all the correct
111 values parse out. About 15 values are tested. This is a decode test.
112 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800113int32_t ParseMapTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800114
115
Laurence Lundbladeccfb8cd2018-12-07 21:11:30 +0900116/*
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700117Test the decoder mode where maps are treated as arrays.
Laurence Lundbladeccfb8cd2018-12-07 21:11:30 +0900118 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800119int32_t ParseMapAsArrayTest(void);
Laurence Lundbladeccfb8cd2018-12-07 21:11:30 +0900120
121
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700122/*
123 Test parsing of some simple values like true, false, null...
124 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800125int32_t ParseSimpleTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800126
127
Laurence Lundbladebb1062e2019-08-12 23:28:54 -0700128/*
129 This tests all the not-well-formed CBOR from the CBOR RFC.
130 (This is the CBORbis RFC which is not yet published at the
131 time this test was added).
132 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800133int32_t NotWellFormedTests(void);
Laurence Lundbladebb1062e2019-08-12 23:28:54 -0700134
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800135
136/*
137 Tests a number of failure cases on bad CBOR to get the right error code
138 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800139int32_t DecodeFailureTests(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800140
141
142/*
Laurence Lundbladea2e29072018-12-30 09:20:06 -0800143 Parses all possible inputs that are two bytes long. Main point
144 is that the test doesn't crash as it doesn't evaluate the
145 input for correctness in any way.
Laurence Lundbladedf1c1cf2019-01-17 11:55:05 -0800146
Laurence Lundbladea2e29072018-12-30 09:20:06 -0800147 (Parsing all possible 3 byte strings takes too long on all but
Laurence Lundbladedf1c1cf2019-01-17 11:55:05 -0800148 very fast machines).
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800149 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800150int32_t ComprehensiveInputTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800151
152
153/*
Laurence Lundbladea2e29072018-12-30 09:20:06 -0800154 Parses all possible inputs that are four bytes long. Main point
155 is that the test doesn't crash as it doesn't evaluate the
156 input for correctness in any way. This runs very slow, so it
157 is only practical as a once-in-a-while regression test on
158 fast machines.
159 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800160int32_t BigComprehensiveInputTest(void);
Laurence Lundbladea2e29072018-12-30 09:20:06 -0800161
162
163/*
Laurence Lundbladec7114722020-08-13 05:11:40 -0700164 Test the date types -- epoch and strings
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800165 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800166int32_t DateParseTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800167
168
169/*
Laurence Lundbladec7114722020-08-13 05:11:40 -0700170 Test spiffy date decoding functions
171 */
172int32_t SpiffyDateDecodeTest(void);
173
174
175/*
Laurence Lundblade9b334962020-08-27 10:55:53 -0700176 Test decode of CBOR tagging like the CBOR magic number and many others.
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800177 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800178int32_t OptTagParseTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800179
180
181/*
182 Parse some big numbers, positive and negative
183 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800184int32_t BignumParseTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800185
186
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700187/*
188 Test of mode where only string labels are allowed
189 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800190int32_t StringDecoderModeFailTest(void);
Laurence Lundbladeea567ac2018-12-09 14:03:21 -0800191
192
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800193/*
194 Parse some nested maps
195 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800196int32_t NestedMapTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800197
Laurence Lundbladefab1b522018-10-19 13:40:52 +0530198
199/*
200 Parse maps with indefinite lengths
201 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800202int32_t NestedMapTestIndefLen(void);
Laurence Lundblade742df4a2018-10-13 20:07:17 +0800203
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800204
Laurence Lundbladefab1b522018-10-19 13:40:52 +0530205/*
206 Parse some maps and arrays with indefinite lengths.
207 Includes some error cases.
208 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800209int32_t IndefiniteLengthArrayMapTest(void);
Laurence Lundblade4d1ecba2018-10-12 21:22:30 +0800210
Laurence Lundbladefab1b522018-10-19 13:40:52 +0530211
212/*
213 Parse indefinite length strings. Uses
214 MemPool. Includes error cases.
215 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800216int32_t IndefiniteLengthStringTest(void);
Laurence Lundblade4d1ecba2018-10-12 21:22:30 +0800217
Laurence Lundbladefab1b522018-10-19 13:40:52 +0530218
219/*
220 Test deep nesting of indefinite length
221 maps and arrays including too deep.
222 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800223int32_t IndefiniteLengthNestTest(void);
Laurence Lundbladea44d5062018-10-17 18:45:12 +0530224
Laurence Lundbladefab1b522018-10-19 13:40:52 +0530225
226/*
227 Test parsing strings were all strings, not
228 just indefinite length strings, are
229 allocated. Includes error test cases.
230 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800231int32_t AllocAllStringsTest(void);
Laurence Lundbladea44d5062018-10-17 18:45:12 +0530232
Laurence Lundblade0155b622018-10-12 20:04:37 +0800233
Laurence Lundbladefab1b522018-10-19 13:40:52 +0530234/*
235 Direct test of MemPool string allocator
236 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800237int32_t MemPoolTest(void);
Laurence Lundblade0155b622018-10-12 20:04:37 +0800238
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800239
Laurence Lundblade1d7eb632019-02-17 17:23:38 -0800240/*
241 Test the setting up of an external string allocator.
242 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800243int32_t SetUpAllocatorTest(void);
Laurence Lundblade1d7eb632019-02-17 17:23:38 -0800244
245
Laurence Lundblade59289e52019-12-30 13:44:37 -0800246#ifndef QCBOR_CONFIG_DISABLE_EXP_AND_MANTISSA
247/*
248 Test decoding of decimal fractions and big floats, both of which are
249 made up of an exponent and mantissa.
250 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800251int32_t ExponentAndMantissaDecodeTests(void);
Laurence Lundblade59289e52019-12-30 13:44:37 -0800252
253
254/*
255 Hostile input tests for decimal fractions and big floats.
256 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800257int32_t ExponentAndMantissaDecodeFailTests(void);
Laurence Lundblade59289e52019-12-30 13:44:37 -0800258#endif /* QCBOR_CONFIG_DISABLE_EXP_AND_MANTISSA */
259
260
Laurence Lundbladebb87be22020-04-09 19:15:32 -0700261int32_t EnterMapTest(void);
262
Laurence Lundblade9c905e82020-04-25 11:31:38 -0700263int32_t IntegerConvertTest(void);
Laurence Lundbladee3553422020-05-02 11:11:17 -0700264/*
265 Tests decoding of CBOR Sequences defined in RFC 8742
266 */
267int32_t CBORSequenceDecodeTests(void);
268
Laurence Lundbladebb87be22020-04-09 19:15:32 -0700269
Laurence Lundbladee15326f2020-06-15 15:50:23 -0700270/*
271Tests for functions to safely convert integer types.
272*/
273int32_t IntToTests(void);
274
Laurence Lundblade0750fc42020-06-20 21:02:34 -0700275
276/*
277 Test the decoding of bstr-wrapped CBOR.
278 */
279int32_t EnterBstrTest(void);
280
281
Laurence Lundblade37f46e52020-08-04 03:32:14 -0700282/*
283 Test decoding of tagged types like UUID
284 */
285int32_t DecodeTaggedTypeTests(void);
286
Laurence Lundbladea4308a82020-10-03 18:08:57 -0700287
288/*
289 Test the detection of input that is too large. Requires
290 a special build that makes QCBOR_MAX_DECODE_INPUT_SIZE small.
291 */
292int32_t TooLargeInputTest(void);
293
Laurence Lundbladeb6d1c692020-10-07 18:37:48 -0700294
295/*
296 Test spiffy decoding of indefinite length strings.
297 */
298int32_t SpiffyIndefiniteLengthStringsTests(void);
299
300
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800301#endif /* defined(__QCBOR__qcbort_decode_tests__) */