From 02e343e93e167dd8e8795e8e4f708ae1e07a2400 Mon Sep 17 00:00:00 2001 From: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com> Date: Thu, 1 Aug 2024 00:37:55 +0530 Subject: [PATCH] Fix Jobs_UpdateMsg to generate valid JSON (#109) Jobs_UpdateMsg was putting double quotes around the `statusDetails` value resulting in the following invalid JSON: ``` { "status": "QUEUED", "statusDetails": "{ "key": "value" }" } ``` This change removes the unnecessary double quotes to generate a valid JSON: ``` { "status": "QUEUED", "statusDetails": { "key": "value" } } ``` This was reported here - https://github.com/aws/Jobs-for-AWS-IoT-embedded-sdk/issues/107 Signed-off-by: Gaurav Aggarwal --- README.md | 6 ++++-- source/include/jobs.h | 2 +- source/jobs.c | 33 +++++++++++++++++---------------- test/unit-test/jobs_utest.c | 12 ++++++------ 4 files changed, 28 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index aca2a32..be72eeb 100644 --- a/README.md +++ b/README.md @@ -109,9 +109,11 @@ doxygen docs/doxygen/config.doxyfile ### Steps to build Unit Tests -1. Create build directory: `mkdir build && cd build` +1. Create build directory: `mkdir build` -1. Run _cmake_ while inside build directory: `cmake -S ../test` +1. Run _cmake_ while inside build directory: `cmake -S test/ -B build/` + +1. Change to build directory: `cd build` 1. Run this command to build the library and unit tests: `make all` diff --git a/source/include/jobs.h b/source/include/jobs.h index f996b0e..4717b00 100644 --- a/source/include/jobs.h +++ b/source/include/jobs.h @@ -150,7 +150,7 @@ #define JOBS_API_EXPECTED_VERSION "\",\"expectedVersion\":\"" #define JOBS_API_EXPECTED_VERSION_LENGTH ( sizeof( JOBS_API_EXPECTED_VERSION ) - 1U ) -#define JOBS_API_STATUS_DETAILS "\",\"statusDetails\":\"" +#define JOBS_API_STATUS_DETAILS "\",\"statusDetails\":" #define JOBS_API_STATUS_DETAILS_LENGTH ( sizeof( JOBS_API_STATUS_DETAILS ) - 1U ) #define JOBS_API_COMMON_LENGTH( thingNameLength ) \ diff --git a/source/jobs.c b/source/jobs.c index bd15740..36a06ee 100644 --- a/source/jobs.c +++ b/source/jobs.c @@ -893,25 +893,26 @@ size_t Jobs_UpdateMsg( JobsUpdateRequest_t request, { ( void ) strnAppend( buffer, &start, bufferSize, JOBS_API_STATUS, JOBS_API_STATUS_LENGTH ); ( void ) strnAppend( buffer, &start, bufferSize, jobStatusString[ request.status ], strlen( jobStatusString[ request.status ] ) ); - } - /* This is an optional field so do not fail if expected version is missing.*/ - if( !writeFailed && ( request.expectedVersion != NULL ) && ( request.expectedVersionLength > 0U ) ) - { - ( void ) strnAppend( buffer, &start, bufferSize, JOBS_API_EXPECTED_VERSION, JOBS_API_EXPECTED_VERSION_LENGTH ); - ( void ) strnAppend( buffer, &start, bufferSize, request.expectedVersion, request.expectedVersionLength ); - } + /* This is an optional field so do not fail if expected version is missing.*/ + if( ( request.expectedVersion != NULL ) && ( request.expectedVersionLength > 0U ) ) + { + ( void ) strnAppend( buffer, &start, bufferSize, JOBS_API_EXPECTED_VERSION, JOBS_API_EXPECTED_VERSION_LENGTH ); + ( void ) strnAppend( buffer, &start, bufferSize, request.expectedVersion, request.expectedVersionLength ); + } - /* This is an optional field so do not fail if status details is missing.*/ - if( !writeFailed && ( request.statusDetails != NULL ) && ( request.statusDetailsLength > 0U ) ) - { - ( void ) strnAppend( buffer, &start, bufferSize, JOBS_API_STATUS_DETAILS, JOBS_API_STATUS_DETAILS_LENGTH ); - ( void ) strnAppend( buffer, &start, bufferSize, request.statusDetails, request.statusDetailsLength ); - } + /* This is an optional field so do not fail if status details is missing.*/ + if( ( request.statusDetails != NULL ) && ( request.statusDetailsLength > 0U ) ) + { + ( void ) strnAppend( buffer, &start, bufferSize, JOBS_API_STATUS_DETAILS, JOBS_API_STATUS_DETAILS_LENGTH ); + ( void ) strnAppend( buffer, &start, bufferSize, request.statusDetails, request.statusDetailsLength ); - if( !writeFailed ) - { - ( void ) strnAppend( buffer, &start, bufferSize, "\"}", ( CONST_STRLEN( "\"}" ) ) ); + ( void ) strnAppend( buffer, &start, bufferSize, "}", ( CONST_STRLEN( "}" ) ) ); + } + else + { + ( void ) strnAppend( buffer, &start, bufferSize, "\"}", ( CONST_STRLEN( "\"}" ) ) ); + } } return start; diff --git a/test/unit-test/jobs_utest.c b/test/unit-test/jobs_utest.c index bbfd006..3011141 100644 --- a/test/unit-test/jobs_utest.c +++ b/test/unit-test/jobs_utest.c @@ -891,8 +891,8 @@ void test_getUpdateJobExecutionMsg_hasNullExpectedVersion( void ) size_t result = Jobs_UpdateMsg( request, buffer, TOPIC_BUFFER_SIZE ); - TEST_ASSERT_EQUAL( 54U, result ); - TEST_ASSERT_EQUAL_STRING( "{\"status\":\"QUEUED\",\"statusDetails\":\"{\"key\": \"value\"}\"}", buffer ); + TEST_ASSERT_EQUAL( 52U, result ); + TEST_ASSERT_EQUAL_STRING( "{\"status\":\"QUEUED\",\"statusDetails\":{\"key\": \"value\"}}", buffer ); } void test_getUpdateJobExecutionMsg_hasZeroLengthExpectedVersion( void ) @@ -909,8 +909,8 @@ void test_getUpdateJobExecutionMsg_hasZeroLengthExpectedVersion( void ) size_t result = Jobs_UpdateMsg( request, buffer, TOPIC_BUFFER_SIZE ); - TEST_ASSERT_EQUAL( 54U, result ); - TEST_ASSERT_EQUAL_STRING( "{\"status\":\"QUEUED\",\"statusDetails\":\"{\"key\": \"value\"}\"}", buffer ); + TEST_ASSERT_EQUAL( 52U, result ); + TEST_ASSERT_EQUAL_STRING( "{\"status\":\"QUEUED\",\"statusDetails\":{\"key\": \"value\"}}", buffer ); } void test_getUpdateJobExecutionMsg_hasNullStatusDetails( void ) @@ -1015,8 +1015,8 @@ void test_getUpdateJobExecutionMsg_hasAllValidParameters( void ) size_t result = Jobs_UpdateMsg( request, buffer, TOPIC_BUFFER_SIZE ); - TEST_ASSERT_EQUAL( 80U, result ); - TEST_ASSERT_EQUAL_STRING( "{\"status\":\"QUEUED\",\"expectedVersion\":\"1.0.1\",\"statusDetails\":\"{\"key\": \"value\"}\"}", buffer ); + TEST_ASSERT_EQUAL( 78U, result ); + TEST_ASSERT_EQUAL_STRING( "{\"status\":\"QUEUED\",\"expectedVersion\":\"1.0.1\",\"statusDetails\":{\"key\": \"value\"}}", buffer ); } void test_getUpdateJobExecutionMsg_hasRequiredValidParameters( void )