blob: 6159c8bcf6d07a44c107ab3cf8bce804b92071cd [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 Lundbladef0ea5f32019-01-11 20:10:26 -08003 Copyright (c) 2018-2019, 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 Lundbladed92a6162018-11-01 11:38:35 +070031 ==============================================================================*/
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080032
33#ifndef __QCBOR__qcbort_decode_tests__
34#define __QCBOR__qcbort_decode_tests__
35
36#include "qcbor.h"
37
38
Laurence Lundblade3aee3a32018-12-17 16:17:45 -080039/*
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080040 Notes:
Laurence Lundblade3aee3a32018-12-17 16:17:45 -080041
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080042 - All the functions in qcbor.h are called once in the aggregation 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
52
53
54/*
55 Parse a well-known set of integers including those around the boundaries and
56 make sure the expected values come out
57 */
Laurence Lundblade9e3651c2018-10-10 11:49:55 +080058int IntegerValuesParseTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080059
60
61
62
63
64/*
65 Decode a simple CBOR encoded array and make sure it returns all the correct values.
66 This is a decode test.
67 */
Laurence Lundblade9e3651c2018-10-10 11:49:55 +080068int SimpleArrayTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080069
70
71/*
72 Make sure a maximally deep array can be parsed and that the
73 reported nesting level is correct. This uses test vector
74 of CBOR encoded data with a depth of 10. This a parse test.
75 */
Laurence Lundblade9e3651c2018-10-10 11:49:55 +080076int ParseDeepArrayTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080077
78
79/*
80 See that the correct error is reported when parsing
81 an array of depth 11, one too large.
82 */
Laurence Lundblade9e3651c2018-10-10 11:49:55 +080083int ParseTooDeepArrayTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080084
85
86/*
87 Try to parse some legit CBOR types that this parsers
88 doesn't support.
89 */
Laurence Lundblade9e3651c2018-10-10 11:49:55 +080090int UnsupportedCBORDecodeTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080091
92
Laurence Lundblade3aee3a32018-12-17 16:17:45 -080093/*
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080094 This takes the encoded CBOR integers used in the above test and parses
95 it over and over with one more byte less each time. It should fail
96 every time on incorrect CBOR input. This is a hostile input decode test.
97 */
Laurence Lundblade9e3651c2018-10-10 11:49:55 +080098int ShortBufferParseTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080099
100
Laurence Lundblade3aee3a32018-12-17 16:17:45 -0800101/*
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800102 Same as ShortBufferParseTest, but with a different encoded CBOR input.
103 It is another hostile input test
104 */
Laurence Lundblade9e3651c2018-10-10 11:49:55 +0800105int ShortBufferParseTest2(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800106
107
108/*
109 Parses the somewhat complicated CBOR MAP and makes sure all the correct
110 values parse out. About 15 values are tested. This is a decode test.
111 */
Laurence Lundblade9e3651c2018-10-10 11:49:55 +0800112int ParseMapTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800113
114
115
Laurence Lundblade9e3651c2018-10-10 11:49:55 +0800116int FloatValuesTest1(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800117
118
119
Laurence Lundblade9e3651c2018-10-10 11:49:55 +0800120int SimpleValuesTest1(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800121
122
Laurence Lundbladeccfb8cd2018-12-07 21:11:30 +0900123/*
Laurence Lundblade3aee3a32018-12-17 16:17:45 -0800124
Laurence Lundbladeccfb8cd2018-12-07 21:11:30 +0900125 */
126int ParseMapAsArrayTest(void);
127
128
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800129
Laurence Lundblade9e3651c2018-10-10 11:49:55 +0800130int ParseSimpleTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800131
132
Laurence Lundbladebb1062e2019-08-12 23:28:54 -0700133/*
134 This tests all the not-well-formed CBOR from the CBOR RFC.
135 (This is the CBORbis RFC which is not yet published at the
136 time this test was added).
137 */
138int NotWellFormedTests(void);
139
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800140
141/*
142 Tests a number of failure cases on bad CBOR to get the right error code
143 */
Laurence Lundblade3a6042e2019-06-28 19:58:04 -0700144int DecodeFailureTests(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800145
146
147/*
Laurence Lundbladea2e29072018-12-30 09:20:06 -0800148 Parses all possible inputs that are two bytes long. Main point
149 is that the test doesn't crash as it doesn't evaluate the
150 input for correctness in any way.
Laurence Lundbladedf1c1cf2019-01-17 11:55:05 -0800151
Laurence Lundbladea2e29072018-12-30 09:20:06 -0800152 (Parsing all possible 3 byte strings takes too long on all but
Laurence Lundbladedf1c1cf2019-01-17 11:55:05 -0800153 very fast machines).
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800154 */
Laurence Lundblade9e3651c2018-10-10 11:49:55 +0800155int ComprehensiveInputTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800156
157
158/*
Laurence Lundbladea2e29072018-12-30 09:20:06 -0800159 Parses all possible inputs that are four bytes long. Main point
160 is that the test doesn't crash as it doesn't evaluate the
161 input for correctness in any way. This runs very slow, so it
162 is only practical as a once-in-a-while regression test on
163 fast machines.
164 */
165int BigComprehensiveInputTest(void);
166
167
168/*
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800169 Thest the date types -- epoch and strings
170 */
Laurence Lundblade9e3651c2018-10-10 11:49:55 +0800171int DateParseTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800172
173
174/*
175 Test optional tags like the CBOR magic number.
176 */
Laurence Lundblade9e3651c2018-10-10 11:49:55 +0800177int OptTagParseTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800178
179
180/*
181 Parse some big numbers, positive and negative
182 */
Laurence Lundblade9e3651c2018-10-10 11:49:55 +0800183int BignumParseTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800184
185
Laurence Lundbladeea567ac2018-12-09 14:03:21 -0800186int StringDecoderModeFailTest(void);
187
188
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800189/*
190 Parse some nested maps
191 */
Laurence Lundblade9e3651c2018-10-10 11:49:55 +0800192int NestedMapTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800193
Laurence Lundbladefab1b522018-10-19 13:40:52 +0530194
195/*
196 Parse maps with indefinite lengths
197 */
Laurence Lundblade742df4a2018-10-13 20:07:17 +0800198int NestedMapTestIndefLen(void);
199
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800200
Laurence Lundbladefab1b522018-10-19 13:40:52 +0530201/*
202 Parse some maps and arrays with indefinite lengths.
203 Includes some error cases.
204 */
Laurence Lundbladea44d5062018-10-17 18:45:12 +0530205int IndefiniteLengthArrayMapTest(void);
Laurence Lundblade4d1ecba2018-10-12 21:22:30 +0800206
Laurence Lundbladefab1b522018-10-19 13:40:52 +0530207
208/*
209 Parse indefinite length strings. Uses
210 MemPool. Includes error cases.
211 */
Laurence Lundbladea44d5062018-10-17 18:45:12 +0530212int IndefiniteLengthStringTest(void);
Laurence Lundblade4d1ecba2018-10-12 21:22:30 +0800213
Laurence Lundbladefab1b522018-10-19 13:40:52 +0530214
215/*
216 Test deep nesting of indefinite length
217 maps and arrays including too deep.
218 */
Laurence Lundbladea44d5062018-10-17 18:45:12 +0530219int IndefiniteLengthNestTest(void);
220
Laurence Lundbladefab1b522018-10-19 13:40:52 +0530221
222/*
223 Test parsing strings were all strings, not
224 just indefinite length strings, are
225 allocated. Includes error test cases.
226 */
Laurence Lundbladea44d5062018-10-17 18:45:12 +0530227int AllocAllStringsTest(void);
228
Laurence Lundblade0155b622018-10-12 20:04:37 +0800229
Laurence Lundbladefab1b522018-10-19 13:40:52 +0530230/*
231 Direct test of MemPool string allocator
232 */
233int MemPoolTest(void);
Laurence Lundblade0155b622018-10-12 20:04:37 +0800234
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800235
Laurence Lundblade1d7eb632019-02-17 17:23:38 -0800236/*
237 Test the setting up of an external string allocator.
238 */
239int SetUpAllocatorTest(void);
240
241
242
243
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800244#endif /* defined(__QCBOR__qcbort_decode_tests__) */