blob: e54168a39b73c6a794eac1177a30cdff7deabb55 [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__qcbor_encode_tests__
34#define __QCBOR__qcbor_encode_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_encode.h are called once in the aggregation of all
Laurence Lundbladeee851742020-01-08 08:37:05 -080042 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/*
Laurence Lundblade4d1ecba2018-10-12 21:22:30 +080053 Most basic test.
54 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080055int32_t BasicEncodeTest(void);
Laurence Lundblade4d1ecba2018-10-12 21:22:30 +080056
57
58/*
Laurence Lundbladeee851742020-01-08 08:37:05 -080059 Encode lots of integer values, particularly around the boundary and
60 make sure they Match the expected binary output. Primarily an
61 encoding test.
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080062 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080063int32_t IntegerValuesTest1(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080064
65
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080066/*
Laurence Lundbladeee851742020-01-08 08:37:05 -080067 Create nested arrays to the max depth allowed and make sure it
68 succeeds. This is an encoding test.
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080069 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080070int32_t ArrayNestingTest1(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080071
72
73/*
Laurence Lundbladeee851742020-01-08 08:37:05 -080074 Create nested arrays to one more than the meax depth and make sure it
75 fails. This is an encoding test.
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080076 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080077int32_t ArrayNestingTest2(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080078
79
80/*
Laurence Lundbladeee851742020-01-08 08:37:05 -080081 Encoding test. Create arrays to max depth and close one extra time
82 and look for correct error code
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080083 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080084int32_t ArrayNestingTest3(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080085
86
87/*
Laurence Lundbladeee851742020-01-08 08:37:05 -080088 This tests the QCBOREncode_AddRaw() function by adding two chunks or
89 RAWCBOR to an array and comparing with expected values. This is an
90 encoding test.
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080091 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080092int32_t EncodeRawTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080093
94
95/*
Laurence Lundbladeee851742020-01-08 08:37:05 -080096 This creates a somewhat complicated CBOR MAP and verifies it against
97 expected data. This is an encoding test.
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080098 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080099int32_t MapEncodeTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800100
101
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800102/*
103 Encodes a goodly number of floats and doubles and checks encoding is right
104 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800105int32_t FloatValuesTest1(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800106
107
108/*
109 Encodes true, false and the like
110 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800111int32_t SimpleValuesTest1(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800112
113
114/*
Jan Jongboom47d86c52019-07-25 08:54:16 +0200115 Encodes basic maps and arrays with indefinite length
116 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800117int32_t SimpleValuesIndefiniteLengthTest1(void);
Jan Jongboom47d86c52019-07-25 08:54:16 +0200118
Laurence Lundbladeee851742020-01-08 08:37:05 -0800119
Jan Jongboom5d827882019-08-07 12:51:15 +0200120/*
Laurence Lundbladeee851742020-01-08 08:37:05 -0800121 Indefinite length arrays and maps use the 'magic' number 31, verify
122 that everything with length 31 still works properly
Jan Jongboom5d827882019-08-07 12:51:15 +0200123 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800124int32_t EncodeLengthThirtyoneTest(void);
Jan Jongboom5d827882019-08-07 12:51:15 +0200125
Jan Jongboom47d86c52019-07-25 08:54:16 +0200126
127/*
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800128 Encodes most data formats that are supported */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800129int32_t EncodeDateTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800130
131
132/*
133 Encodes particular data structure that a particular app will need...
134 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800135int32_t RTICResultsTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800136
137
138/*
Laurence Lundblade844bb5c2020-03-01 17:27:25 -0800139 Calls all public encode methods in qcbor_encode.h once.
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800140 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800141int32_t AllAddMethodsTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800142
143/*
144 The binary string wrapping of maps and arrays used by COSE
145 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800146int32_t BstrWrapTest(void);
Laurence Lundblade684aec22018-10-12 19:33:53 +0800147
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700148
149/*
150 Test error cases for bstr wrapping encoding such as closing an open
151 array with CloseBstrWrap
152 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800153int32_t BstrWrapErrorTest(void);
Laurence Lundblade684aec22018-10-12 19:33:53 +0800154
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700155
156/*
157 Test complicated nested bstr wrapping
158 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800159int32_t BstrWrapNestTest(void);
Laurence Lundblade684aec22018-10-12 19:33:53 +0800160
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700161
162/*
163 Test encoding a COSE_Sign1 with bstr wrapping
164 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800165int32_t CoseSign1TBSTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800166
Laurence Lundblade1ef8b2d2018-12-14 23:13:34 -0800167
Laurence Lundblade59289e52019-12-30 13:44:37 -0800168#ifndef QCBOR_CONFIG_DISABLE_EXP_AND_MANTISSA
169/*
170 Test encoding of decimal fractions and big floats, both of which are
171 made up of an exponent and mantissa
172 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800173int32_t ExponentAndMantissaEncodeTests(void);
Laurence Lundblade59289e52019-12-30 13:44:37 -0800174#endif /* QCBOR_CONFIG_DISABLE_EXP_AND_MANTISSA */
175
Laurence Lundbladec9f0fbc2020-02-07 10:48:33 +0000176
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700177/*
178 Test the error cases when encoding CBOR such as buffer too large,
179 buffer too small, array nesting too deep. Aims to cover the error
180 codes returned when encoding CBOR
181 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800182int32_t EncodeErrorTests(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800183
184
Laurence Lundbladec9f0fbc2020-02-07 10:48:33 +0000185/*
186 Test QCBOREncode_EncodeHead(). This is a minimal test because every other
187 test here exercises it in some way.
188 */
189int32_t QCBORHeadTest(void);
190
191
192
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800193#endif /* defined(__QCBOR__qcbor_encode_tests__) */