OpenBytes() is mostly working and somewhat tested
diff --git a/test/UsefulBuf_Tests.c b/test/UsefulBuf_Tests.c
index b36c976..ccd07b8 100644
--- a/test/UsefulBuf_Tests.c
+++ b/test/UsefulBuf_Tests.c
@@ -1,6 +1,6 @@
/*==============================================================================
Copyright (c) 2016-2018, The Linux Foundation.
- Copyright (c) 2018-2021, Laurence Lundblade.
+ Copyright (c) 2018-2022, Laurence Lundblade.
Copyright (c) 2021, Arm Limited.
All rights reserved.
@@ -817,11 +817,12 @@
const char *UBAdvanceTest()
{
- UsefulOutBuf_MakeOnStack(UOB, 10);
+ #define ADVANCE_TEST_SIZE 10
+ UsefulOutBuf_MakeOnStack(UOB, ADVANCE_TEST_SIZE);
UsefulBuf Place = UsefulOutBuf_GetOutPlace(&UOB);
if(Place.len != 10) {
- return "Wrong Place";
+ return "GetOutPlace wrong size";
}
memset(Place.ptr, 'x', Place.len/2);
@@ -831,8 +832,8 @@
UsefulOutBuf_AppendByte(&UOB, 'y');
Place = UsefulOutBuf_GetOutPlace(&UOB);
- if(Place.len != 10/2 -1 ) {
- return "shit";
+ if(Place.len != ADVANCE_TEST_SIZE/2 -1 ) {
+ return "GetOutPlace wrong size 2";
}
memset(Place.ptr, 'z', Place.len);
@@ -843,7 +844,19 @@
UsefulBuf_Compare(O, UsefulBuf_FROM_SZ_LITERAL("xxxxxyzzzz"));
- // TODO: check for advancing too far, full buffer, ....
+ Place = UsefulOutBuf_GetOutPlace(&UOB);
+ if(Place.len != 0 || Place.ptr != NULL) {
+ return "GetOutPlace not null";
+ }
+
+ if(UsefulOutBuf_GetError(&UOB)) {
+ return "GetOutPlace error set";
+ }
+
+ UsefulOutBuf_Advance(&UOB, 1);
+ if(!UsefulOutBuf_GetError(&UOB)) {
+ return "Advance off end didn't set error";
+ }
return NULL;
}
diff --git a/test/qcbor_encode_tests.c b/test/qcbor_encode_tests.c
index d3ada13..196733f 100644
--- a/test/qcbor_encode_tests.c
+++ b/test/qcbor_encode_tests.c
@@ -2875,3 +2875,72 @@
return 0;
}
+
+
+
+
+static const uint8_t spExpectedBytes[] = {
+ 0x50, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
+ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
+ 0x78
+};
+
+int32_t OpenCloseBytesTest(void)
+{
+ UsefulBuf_MAKE_STACK_UB( TestBuf, 20);
+ QCBOREncodeContext EC;
+ UsefulBuf Place;
+ UsefulBufC Encoded;
+ QCBORError uErr;
+
+ QCBOREncode_Init(&EC, TestBuf);
+
+ QCBOREncode_OpenBytes(&EC, &Place);
+ if(Place.ptr != TestBuf.ptr ||
+ Place.len != TestBuf.len) {
+ return 1;
+ }
+
+ Place.len -= 4;
+ UsefulBuf_Set(Place, 'x');
+
+ QCBOREncode_CloseBytes(&EC, Place.len);
+
+ QCBOREncode_Finish(&EC, &Encoded);
+
+ if(UsefulBuf_Compare(Encoded,
+ UsefulBuf_FROM_BYTE_ARRAY_LITERAL(spExpectedBytes))) {
+ return 2;
+ }
+
+
+ QCBOREncode_Init(&EC, TestBuf);
+ QCBOREncode_AddSZString(&EC, "0123456789012345678");
+ QCBOREncode_OpenBytes(&EC, &Place);
+ if(Place.ptr != NULL ||
+ Place.len != 0) {
+ return 3;
+ }
+
+ QCBOREncode_Init(&EC, TestBuf);
+ QCBOREncode_AddSZString(&EC, "012345678");
+ QCBOREncode_CloseBytes(&EC, 1);
+ uErr = QCBOREncode_GetErrorState(&EC);
+ if(uErr != QCBOR_ERR_TOO_MANY_CLOSES) {
+ return 4;
+ }
+
+ QCBOREncode_Init(&EC, TestBuf);
+ QCBOREncode_AddSZString(&EC, "012345678901234567");
+ QCBOREncode_OpenBytes(&EC, &Place);
+ /* Don't bother to write any bytes*/
+ QCBOREncode_CloseBytes(&EC, Place.len+1);
+ uErr = QCBOREncode_GetErrorState(&EC);
+ // TODO: sort out this error -- issues with UOB internal error state
+ if(uErr != QCBOR_ERR_BUFFER_TOO_SMALL) {
+ return 5;
+ }
+
+
+ return 0;
+}
diff --git a/test/qcbor_encode_tests.h b/test/qcbor_encode_tests.h
index 69f694a..bac1085 100644
--- a/test/qcbor_encode_tests.h
+++ b/test/qcbor_encode_tests.h
@@ -1,6 +1,6 @@
/*==============================================================================
Copyright (c) 2016-2018, The Linux Foundation.
- Copyright (c) 2018-2021, Laurence Lundblade.
+ Copyright (c) 2018-2022, Laurence Lundblade.
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -41,11 +41,6 @@
- All the functions in qcbor_encode.h are called once in the aggregation of all
the tests below.
- - All the types that are supported are given as input and parsed by these tests
-
- - There is some hostile input such as invalid lengths and CBOR too complex
- and types this parser doesn't handle
-
*/
@@ -141,10 +136,11 @@
*/
int32_t AllAddMethodsTest(void);
+
/*
The binary string wrapping of maps and arrays used by COSE
*/
-int32_t BstrWrapTest(void);
+int32_t BstrWrapTest(void);
/*
@@ -190,5 +186,11 @@
int32_t QCBORHeadTest(void);
+/* Fully test QCBOREncode_OpenBytes(), QCBOREncode_CloseBytes()
+ * and friends.
+ */
+int32_t OpenCloseBytesTest(void);
+
+
#endif /* defined(__QCBOR__qcbor_encode_tests__) */
diff --git a/test/run_tests.c b/test/run_tests.c
index 27da619..cb784a8 100644
--- a/test/run_tests.c
+++ b/test/run_tests.c
@@ -66,6 +66,7 @@
static test_entry s_tests[] = {
+ TEST_ENTRY(OpenCloseBytesTest),
TEST_ENTRY(EnterBstrTest),
TEST_ENTRY(IntegerConvertTest),
TEST_ENTRY(EnterMapTest),