blob: 92e217c877a7e5d727e92ac8038ec14e44390675 [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 Lundblade2ded3d92018-10-09 21:36:11 +0800164 Thest the date types -- epoch and strings
165 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800166int32_t DateParseTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800167
168
169/*
170 Test optional tags like the CBOR magic number.
171 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800172int32_t OptTagParseTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800173
174
175/*
176 Parse some big numbers, positive and negative
177 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800178int32_t BignumParseTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800179
180
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700181/*
182 Test of mode where only string labels are allowed
183 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800184int32_t StringDecoderModeFailTest(void);
Laurence Lundbladeea567ac2018-12-09 14:03:21 -0800185
186
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800187/*
188 Parse some nested maps
189 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800190int32_t NestedMapTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800191
Laurence Lundbladefab1b522018-10-19 13:40:52 +0530192
193/*
194 Parse maps with indefinite lengths
195 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800196int32_t NestedMapTestIndefLen(void);
Laurence Lundblade742df4a2018-10-13 20:07:17 +0800197
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800198
Laurence Lundbladefab1b522018-10-19 13:40:52 +0530199/*
200 Parse some maps and arrays with indefinite lengths.
201 Includes some error cases.
202 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800203int32_t IndefiniteLengthArrayMapTest(void);
Laurence Lundblade4d1ecba2018-10-12 21:22:30 +0800204
Laurence Lundbladefab1b522018-10-19 13:40:52 +0530205
206/*
207 Parse indefinite length strings. Uses
208 MemPool. Includes error cases.
209 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800210int32_t IndefiniteLengthStringTest(void);
Laurence Lundblade4d1ecba2018-10-12 21:22:30 +0800211
Laurence Lundbladefab1b522018-10-19 13:40:52 +0530212
213/*
214 Test deep nesting of indefinite length
215 maps and arrays including too deep.
216 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800217int32_t IndefiniteLengthNestTest(void);
Laurence Lundbladea44d5062018-10-17 18:45:12 +0530218
Laurence Lundbladefab1b522018-10-19 13:40:52 +0530219
220/*
221 Test parsing strings were all strings, not
222 just indefinite length strings, are
223 allocated. Includes error test cases.
224 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800225int32_t AllocAllStringsTest(void);
Laurence Lundbladea44d5062018-10-17 18:45:12 +0530226
Laurence Lundblade0155b622018-10-12 20:04:37 +0800227
Laurence Lundbladefab1b522018-10-19 13:40:52 +0530228/*
229 Direct test of MemPool string allocator
230 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800231int32_t MemPoolTest(void);
Laurence Lundblade0155b622018-10-12 20:04:37 +0800232
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800233
Laurence Lundblade1d7eb632019-02-17 17:23:38 -0800234/*
235 Test the setting up of an external string allocator.
236 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800237int32_t SetUpAllocatorTest(void);
Laurence Lundblade1d7eb632019-02-17 17:23:38 -0800238
239
Laurence Lundblade59289e52019-12-30 13:44:37 -0800240#ifndef QCBOR_CONFIG_DISABLE_EXP_AND_MANTISSA
241/*
242 Test decoding of decimal fractions and big floats, both of which are
243 made up of an exponent and mantissa.
244 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800245int32_t ExponentAndMantissaDecodeTests(void);
Laurence Lundblade59289e52019-12-30 13:44:37 -0800246
247
248/*
249 Hostile input tests for decimal fractions and big floats.
250 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800251int32_t ExponentAndMantissaDecodeFailTests(void);
Laurence Lundblade59289e52019-12-30 13:44:37 -0800252#endif /* QCBOR_CONFIG_DISABLE_EXP_AND_MANTISSA */
253
254
Laurence Lundbladee3553422020-05-02 11:11:17 -0700255/*
256 Tests decoding of CBOR Sequences defined in RFC 8742
257 */
258int32_t CBORSequenceDecodeTests(void);
259
260
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800261#endif /* defined(__QCBOR__qcbort_decode_tests__) */