blob: 5e2f97837760d529e6f077eb50d4023aaaf43f57 [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 Lundbladeeb3cdef2024-02-17 20:38:55 -08003 Copyright (c) 2018-2024, 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 */
45
46
47/*
Laurence Lundblade4d1ecba2018-10-12 21:22:30 +080048 Most basic test.
49 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080050int32_t BasicEncodeTest(void);
Laurence Lundblade4d1ecba2018-10-12 21:22:30 +080051
52
53/*
Laurence Lundbladeee851742020-01-08 08:37:05 -080054 Encode lots of integer values, particularly around the boundary and
55 make sure they Match the expected binary output. Primarily an
56 encoding test.
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080057 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080058int32_t IntegerValuesTest1(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080059
60
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080061/*
Laurence Lundbladeee851742020-01-08 08:37:05 -080062 Create nested arrays to the max depth allowed and make sure it
63 succeeds. This is an encoding test.
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080064 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080065int32_t ArrayNestingTest1(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080066
67
68/*
Laurence Lundbladeee851742020-01-08 08:37:05 -080069 Create nested arrays to one more than the meax depth and make sure it
70 fails. This is an encoding test.
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080071 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080072int32_t ArrayNestingTest2(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080073
74
75/*
Laurence Lundbladeee851742020-01-08 08:37:05 -080076 Encoding test. Create arrays to max depth and close one extra time
77 and look for correct error code
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080078 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080079int32_t ArrayNestingTest3(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080080
81
82/*
Laurence Lundbladecbd7d132024-05-19 11:11:22 -070083 This tests the QCBOREncode_AddRaw() function by adding two chunks of
84 raw CBOR to an array and comparing with expected values.
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080085 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080086int32_t EncodeRawTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080087
88
89/*
Laurence Lundbladeee851742020-01-08 08:37:05 -080090 This creates a somewhat complicated CBOR MAP and verifies it against
91 expected data. This is an encoding test.
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080092 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080093int32_t MapEncodeTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080094
95
Laurence Lundblade2ded3d92018-10-09 21:36:11 +080096/*
97 Encodes a goodly number of floats and doubles and checks encoding is right
98 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -080099int32_t FloatValuesTest1(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800100
101
102/*
103 Encodes true, false and the like
104 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800105int32_t SimpleValuesTest1(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800106
107
108/*
Jan Jongboom47d86c52019-07-25 08:54:16 +0200109 Encodes basic maps and arrays with indefinite length
110 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800111int32_t SimpleValuesIndefiniteLengthTest1(void);
Jan Jongboom47d86c52019-07-25 08:54:16 +0200112
Laurence Lundbladeee851742020-01-08 08:37:05 -0800113
Jan Jongboom5d827882019-08-07 12:51:15 +0200114/*
Laurence Lundbladeee851742020-01-08 08:37:05 -0800115 Indefinite length arrays and maps use the 'magic' number 31, verify
116 that everything with length 31 still works properly
Jan Jongboom5d827882019-08-07 12:51:15 +0200117 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800118int32_t EncodeLengthThirtyoneTest(void);
Jan Jongboom5d827882019-08-07 12:51:15 +0200119
Jan Jongboom47d86c52019-07-25 08:54:16 +0200120
121/*
Laurence Lundblade46d63e92021-05-13 11:37:10 -0700122 * Tests Encoding most data formats that are supported.
123 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800124int32_t EncodeDateTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800125
126
127/*
128 Encodes particular data structure that a particular app will need...
129 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800130int32_t RTICResultsTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800131
132
133/*
Laurence Lundblade844bb5c2020-03-01 17:27:25 -0800134 Calls all public encode methods in qcbor_encode.h once.
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800135 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800136int32_t AllAddMethodsTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800137
Laurence Lundbladeb24faef2022-04-26 11:03:08 -0600138
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800139/*
140 The binary string wrapping of maps and arrays used by COSE
141 */
Laurence Lundbladeb24faef2022-04-26 11:03:08 -0600142int32_t BstrWrapTest(void);
Laurence Lundblade684aec22018-10-12 19:33:53 +0800143
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700144
145/*
146 Test error cases for bstr wrapping encoding such as closing an open
147 array with CloseBstrWrap
148 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800149int32_t BstrWrapErrorTest(void);
Laurence Lundblade684aec22018-10-12 19:33:53 +0800150
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700151
152/*
153 Test complicated nested bstr wrapping
154 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800155int32_t BstrWrapNestTest(void);
Laurence Lundblade684aec22018-10-12 19:33:53 +0800156
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700157
158/*
159 Test encoding a COSE_Sign1 with bstr wrapping
160 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800161int32_t CoseSign1TBSTest(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800162
Laurence Lundblade1ef8b2d2018-12-14 23:13:34 -0800163
Laurence Lundbladedd6e76e2021-03-10 01:54:01 -0700164#ifndef QCBOR_DISABLE_EXP_AND_MANTISSA
Laurence Lundblade59289e52019-12-30 13:44:37 -0800165/*
166 Test encoding of decimal fractions and big floats, both of which are
167 made up of an exponent and mantissa
168 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800169int32_t ExponentAndMantissaEncodeTests(void);
Laurence Lundbladedd6e76e2021-03-10 01:54:01 -0700170#endif /* QCBOR_DISABLE_EXP_AND_MANTISSA */
Laurence Lundblade59289e52019-12-30 13:44:37 -0800171
Laurence Lundbladec9f0fbc2020-02-07 10:48:33 +0000172
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700173/*
174 Test the error cases when encoding CBOR such as buffer too large,
175 buffer too small, array nesting too deep. Aims to cover the error
176 codes returned when encoding CBOR
177 */
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800178int32_t EncodeErrorTests(void);
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800179
180
Laurence Lundbladec9f0fbc2020-02-07 10:48:33 +0000181/*
182 Test QCBOREncode_EncodeHead(). This is a minimal test because every other
183 test here exercises it in some way.
184 */
185int32_t QCBORHeadTest(void);
186
187
Laurence Lundbladeb24faef2022-04-26 11:03:08 -0600188/* Fully test QCBOREncode_OpenBytes(), QCBOREncode_CloseBytes()
189 * and friends.
190 */
191int32_t OpenCloseBytesTest(void);
192
193
Laurence Lundbladed6e13022023-11-26 10:14:02 -0700194/* Test map sorting */
195int32_t SortMapTest(void);
196
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -0800197#if !defined(USEFULBUF_DISABLE_ALL_FLOAT) && !defined(QCBOR_DISABLE_PREFERRED_FLOAT)
198
199/* Test CBOR Deterministic Encoding */
200int32_t CDETest(void);
201
202/* Test "dCBOR" mode */
203int32_t DCBORTest(void);
204
205#endif /* ! USEFULBUF_DISABLE_ALL_FLOAT && ! QCBOR_DISABLE_PREFERRED_FLOAT */
Laurence Lundbladec9f0fbc2020-02-07 10:48:33 +0000206
Laurence Lundblade2ded3d92018-10-09 21:36:11 +0800207#endif /* defined(__QCBOR__qcbor_encode_tests__) */