static void parseResponseJsonExpectedCalls() { STRICT_EXPECTED_CALL(BUFFER_u_char(IGNORED_PTR_ARG)); STRICT_EXPECTED_CALL(BUFFER_length(IGNORED_PTR_ARG)).CallCannotFail(); //cannot fail (returns length 0) STRICT_EXPECTED_CALL(STRING_from_byte_array(IGNORED_PTR_ARG, IGNORED_NUM_ARG)); STRICT_EXPECTED_CALL(STRING_c_str(IGNORED_PTR_ARG)); STRICT_EXPECTED_CALL(json_parse_string(IGNORED_PTR_ARG)); STRICT_EXPECTED_CALL(json_value_get_object(IGNORED_PTR_ARG)); STRICT_EXPECTED_CALL(json_object_get_value(IGNORED_PTR_ARG, IGNORED_PTR_ARG)); STRICT_EXPECTED_CALL(json_object_get_value(IGNORED_PTR_ARG, IGNORED_PTR_ARG)); STRICT_EXPECTED_CALL(json_serialize_to_string(IGNORED_PTR_ARG)); STRICT_EXPECTED_CALL(json_value_get_number(IGNORED_PTR_ARG)).CallCannotFail(); //cannot fail (returns -1, which isn't strictly failure) STRICT_EXPECTED_CALL(STRING_delete(IGNORED_PTR_ARG)); //cannot fail STRICT_EXPECTED_CALL(json_value_free(IGNORED_PTR_ARG)); //cannot fail }
static IOTHUB_DEVICE_METHOD_RESULT parseResponseJson(BUFFER_HANDLE responseJson, int* responseStatus, unsigned char** responsePayload, size_t* responsePayloadSize) { IOTHUB_DEVICE_METHOD_RESULT result; JSON_Value* root_value; JSON_Object* json_object; JSON_Value* statusJsonValue; JSON_Value* payloadJsonValue; char* payload; STRING_HANDLE jsonStringHandle; const char* jsonStr; unsigned char* bufferStr; if ((bufferStr = BUFFER_u_char(responseJson)) == NULL) { LogError("BUFFER_u_char failed"); result = IOTHUB_DEVICE_METHOD_ERROR; } else if ((jsonStringHandle = STRING_from_byte_array(bufferStr, BUFFER_length(responseJson))) == NULL) { LogError("STRING_construct_n failed"); result = IOTHUB_DEVICE_METHOD_ERROR; } else if ((jsonStr = STRING_c_str(jsonStringHandle)) == NULL) { LogError("STRING_c_str failed"); STRING_delete(jsonStringHandle); result = IOTHUB_DEVICE_METHOD_ERROR; } else if ((root_value = json_parse_string(jsonStr)) == NULL) { LogError("json_parse_string failed"); STRING_delete(jsonStringHandle); result = IOTHUB_DEVICE_METHOD_ERROR; } else if ((json_object = json_value_get_object(root_value)) == NULL) { LogError("json_value_get_object failed"); STRING_delete(jsonStringHandle); json_value_free(root_value); result = IOTHUB_DEVICE_METHOD_ERROR; } else if ((statusJsonValue = json_object_get_value(json_object, "status")) == NULL) { LogError("json_object_get_value failed for status"); STRING_delete(jsonStringHandle); json_value_free(root_value); result = IOTHUB_DEVICE_METHOD_ERROR; } else if ((payloadJsonValue = json_object_get_value(json_object, "payload")) == NULL) { LogError("json_object_get_value failed for payload"); STRING_delete(jsonStringHandle); json_value_free(root_value); result = IOTHUB_DEVICE_METHOD_ERROR; } else if ((payload = json_serialize_to_string(payloadJsonValue)) == NULL) { LogError("json_serialize_to_string failed for payload"); STRING_delete(jsonStringHandle); json_value_free(root_value); result = IOTHUB_DEVICE_METHOD_ERROR; } else { *responseStatus = (int)json_value_get_number(statusJsonValue); *responsePayload = (unsigned char *)payload; *responsePayloadSize = strlen(payload); STRING_delete(jsonStringHandle); json_value_free(root_value); result = IOTHUB_DEVICE_METHOD_OK; } return result; }