3 * Copyright (c) 2020 Project CHIP Authors
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 #include "TestHelpers.h"
19 #include <nlbyteorder.h>
20 #include <nlunit-test.h>
22 #include <support/UnitTestRegistration.h>
29 void TestOptionalDataAddRemove(nlTestSuite * inSuite, void * inContext)
31 SetupPayload payload = GetDefaultPayload();
32 vector<OptionalQRCodeInfo> optionalData;
35 optionalData = payload.getAllOptionalVendorData();
36 NL_TEST_ASSERT(inSuite, optionalData.empty());
38 err = payload.addOptionalVendorData(kOptionalDefaultStringTag, kOptionalDefaultStringValue);
39 NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
41 optionalData = payload.getAllOptionalVendorData();
42 NL_TEST_ASSERT(inSuite, optionalData.size() == 1);
44 err = payload.addOptionalVendorData(kOptionalDefaultIntTag, kOptionalDefaultIntValue);
45 NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
47 optionalData = payload.getAllOptionalVendorData();
48 NL_TEST_ASSERT(inSuite, optionalData.size() == 2);
50 err = payload.removeOptionalVendorData(kOptionalDefaultStringTag);
51 NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
53 optionalData = payload.getAllOptionalVendorData();
54 NL_TEST_ASSERT(inSuite, optionalData.size() == 1);
56 payload.removeOptionalVendorData(kOptionalDefaultIntTag);
57 NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
59 optionalData = payload.getAllOptionalVendorData();
60 NL_TEST_ASSERT(inSuite, optionalData.empty());
62 err = payload.removeOptionalVendorData(kOptionalDefaultStringTag);
63 NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_KEY_NOT_FOUND);
65 optionalData = payload.getAllOptionalVendorData();
66 NL_TEST_ASSERT(inSuite, optionalData.empty());
68 err = payload.removeOptionalVendorData(kOptionalDefaultIntTag);
69 NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_KEY_NOT_FOUND);
71 optionalData = payload.getAllOptionalVendorData();
72 NL_TEST_ASSERT(inSuite, optionalData.empty());
75 void TestSimpleWrite(nlTestSuite * inSuite, void * inContext)
77 SetupPayload inPayload = GetDefaultPayload();
79 QRCodeSetupPayloadGenerator generator(inPayload);
81 CHIP_ERROR err = generator.payloadBase41Representation(result);
82 NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
85 void TestSimpleRead(nlTestSuite * inSuite, void * inContext)
87 SetupPayload inPayload = GetDefaultPayload();
88 SetupPayload outPayload;
90 QRCodeSetupPayloadGenerator generator(inPayload);
92 CHIP_ERROR err = generator.payloadBase41Representation(result);
93 NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
95 QRCodeSetupPayloadParser parser = QRCodeSetupPayloadParser(result);
96 err = parser.populatePayload(outPayload);
97 NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
99 NL_TEST_ASSERT(inSuite, inPayload == outPayload);
102 void TestOptionalTagValues(nlTestSuite * inSuite, void * inContext)
104 SetupPayload payload = GetDefaultPayload();
107 err = payload.addOptionalVendorData(kOptionalDefaultStringTag, kOptionalDefaultStringValue);
108 NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
110 err = payload.addOptionalVendorData(0, kOptionalDefaultStringValue);
111 NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
113 err = payload.addOptionalVendorData(127, kOptionalDefaultStringValue);
114 NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
116 err = payload.addOptionalVendorData(128, kOptionalDefaultStringValue);
117 NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INVALID_ARGUMENT);
119 err = payload.addOptionalVendorData(255, kOptionalDefaultStringValue);
120 NL_TEST_ASSERT(inSuite, err == CHIP_ERROR_INVALID_ARGUMENT);
123 void TestSerialNumberAddRemove(nlTestSuite * inSuite, void * inContext)
125 SetupPayload inPayload = GetDefaultPayload();
128 NL_TEST_ASSERT(inSuite, inPayload.getSerialNumber(sn) == CHIP_ERROR_KEY_NOT_FOUND);
129 NL_TEST_ASSERT(inSuite, inPayload.removeSerialNumber() == CHIP_ERROR_KEY_NOT_FOUND);
131 NL_TEST_ASSERT(inSuite, inPayload.addSerialNumber(kSerialNumberDefaultStringValue) == CHIP_NO_ERROR);
132 NL_TEST_ASSERT(inSuite, inPayload.getSerialNumber(sn) == CHIP_NO_ERROR);
133 NL_TEST_ASSERT(inSuite, sn == kSerialNumberDefaultStringValue);
135 NL_TEST_ASSERT(inSuite, inPayload.addSerialNumber(kSerialNumberDefaultUInt32Value) == CHIP_NO_ERROR);
136 NL_TEST_ASSERT(inSuite, inPayload.getSerialNumber(sn) == CHIP_NO_ERROR);
137 NL_TEST_ASSERT(inSuite, sn == to_string(kSerialNumberDefaultUInt32Value));
139 NL_TEST_ASSERT(inSuite, inPayload.removeSerialNumber() == CHIP_NO_ERROR);
140 NL_TEST_ASSERT(inSuite, inPayload.getSerialNumber(sn) == CHIP_ERROR_KEY_NOT_FOUND);
141 NL_TEST_ASSERT(inSuite, inPayload.removeSerialNumber() == CHIP_ERROR_KEY_NOT_FOUND);
144 void TestOptionalDataWriteSerial(nlTestSuite * inSuite, void * inContext)
146 CHIP_ERROR err = CHIP_NO_ERROR;
147 SetupPayload inPayload = GetDefaultPayload();
148 err = inPayload.addSerialNumber("1");
149 NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
151 QRCodeSetupPayloadGenerator generator(inPayload);
153 err = generator.payloadBase41Representation(result);
154 NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
156 uint8_t optionalInfo[kDefaultBufferSizeInBytes];
157 err = generator.payloadBase41Representation(result, optionalInfo, sizeof(optionalInfo));
158 NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
161 void TestOptionalDataWrite(nlTestSuite * inSuite, void * inContext)
163 SetupPayload inPayload = GetDefaultPayloadWithOptionalDefaults();
165 QRCodeSetupPayloadGenerator generator(inPayload);
167 uint8_t optionalInfo[kDefaultBufferSizeInBytes];
168 CHIP_ERROR err = generator.payloadBase41Representation(result, optionalInfo, sizeof(optionalInfo));
169 NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
172 void TestOptionalDataReadSerial(nlTestSuite * inSuite, void * inContext)
174 SetupPayload inPayload = GetDefaultPayload();
176 inPayload.addSerialNumber(kSerialNumberDefaultStringValue);
177 NL_TEST_ASSERT(inSuite, CheckWriteRead(inPayload));
179 inPayload.addSerialNumber(kSerialNumberDefaultUInt32Value);
180 NL_TEST_ASSERT(inSuite, CheckWriteRead(inPayload));
183 void TestOptionalDataReadVendorInt(nlTestSuite * inSuite, void * inContext)
185 SetupPayload inPayload = GetDefaultPayload();
186 inPayload.addOptionalVendorData(kOptionalDefaultIntTag, kOptionalDefaultIntValue);
188 NL_TEST_ASSERT(inSuite, CheckWriteRead(inPayload));
191 void TestOptionalDataReadVendorString(nlTestSuite * inSuite, void * inContext)
193 SetupPayload inPayload = GetDefaultPayload();
194 inPayload.addOptionalVendorData(kOptionalDefaultStringTag, kOptionalDefaultStringValue);
196 NL_TEST_ASSERT(inSuite, CheckWriteRead(inPayload));
199 void TestOptionalDataRead(nlTestSuite * inSuite, void * inContext)
201 SetupPayload inPayload = GetDefaultPayloadWithOptionalDefaults();
203 NL_TEST_ASSERT(inSuite, CheckWriteRead(inPayload));
206 void TestOptionalDataWriteNoBuffer(nlTestSuite * inSuite, void * inContext)
208 SetupPayload inPayload = GetDefaultPayloadWithOptionalDefaults();
210 QRCodeSetupPayloadGenerator generator(inPayload);
212 CHIP_ERROR err = generator.payloadBase41Representation(result);
213 NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
216 void TestOptionalDataWriteSmallBuffer(nlTestSuite * inSuite, void * inContext)
218 SetupPayload inPayload = GetDefaultPayloadWithOptionalDefaults();
220 QRCodeSetupPayloadGenerator generator(inPayload);
222 uint8_t optionalInfo[kSmallBufferSizeInBytes];
223 CHIP_ERROR err = generator.payloadBase41Representation(result, optionalInfo, sizeof(optionalInfo));
224 NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR);
230 * Test Suite that lists all the test functions.
233 const nlTest sTests[] =
235 NL_TEST_DEF("Test Simple Write", TestSimpleWrite),
236 NL_TEST_DEF("Test Simple Read", TestSimpleRead),
237 NL_TEST_DEF("Test Optional Add Remove", TestOptionalDataAddRemove),
238 NL_TEST_DEF("Test Serial Number Add Remove", TestSerialNumberAddRemove),
239 NL_TEST_DEF("Test Optional Write", TestOptionalDataWrite),
240 NL_TEST_DEF("Test Optional Write Serial", TestOptionalDataWriteSerial),
241 NL_TEST_DEF("Test Optional Write No Buffer", TestOptionalDataWriteNoBuffer),
242 NL_TEST_DEF("Test Optional Write Small Buffer", TestOptionalDataWriteSmallBuffer),
243 NL_TEST_DEF("Test Optional Read Serial", TestOptionalDataReadSerial),
244 NL_TEST_DEF("Test Optional Read Vendor String", TestOptionalDataReadVendorString),
245 NL_TEST_DEF("Test Optional Read Vendor Int", TestOptionalDataReadVendorInt),
246 NL_TEST_DEF("Test Optional Read", TestOptionalDataRead),
247 NL_TEST_DEF("Test Optional Tag Values", TestOptionalTagValues),
255 nlTestSuite * mSuite;
259 * Set up the test suite.
261 int TestQRCodeTLV_Setup(void * inContext)
263 CHIP_ERROR error = chip::Platform::MemoryInit();
264 if (error != CHIP_NO_ERROR)
270 * Tear down the test suite.
272 int TestQRCodeTLV_Teardown(void * inContext)
274 chip::Platform::MemoryShutdown();
286 nlTestSuite theSuite =
288 "chip-qrcode-optional-info-tests",
291 TestQRCodeTLV_Teardown
296 context.mSuite = &theSuite;
298 // Generate machine-readable, comma-separated value (CSV) output.
299 nl_test_set_output_style(OUTPUT_CSV);
301 // Run test suit against one context
302 nlTestRunner(&theSuite, &context);
304 return nlTestRunnerStats(&theSuite);
307 CHIP_REGISTER_TEST_SUITE(TestQRCodeTLV);