From 4759246744f5a8079eafc4481e67386413aea288 Mon Sep 17 00:00:00 2001 From: NADAL Jean-Baptiste Date: Tue, 7 Jan 2020 18:13:19 +0100 Subject: [PATCH] sprinkler: Add error test case. --- src/devices/devices_manager.c | 18 ++++- src/tests/test_device.c | 140 ++++++++++++++++++++++++++++++++-- 2 files changed, 152 insertions(+), 6 deletions(-) diff --git a/src/devices/devices_manager.c b/src/devices/devices_manager.c index 712732a..e6b2b68 100644 --- a/src/devices/devices_manager.c +++ b/src/devices/devices_manager.c @@ -198,7 +198,11 @@ char *devices_manager_get(devices_manager_t *dm, const char *capability) char *devices_manager_get_by_id(devices_manager_t *dm, const char *capability, uint32_t id) { - const char *output = NULL; + char *output = NULL; + + // Sanity Checks + if (dm == NULL) + return NULL; if (capability == kOutletEntry) { @@ -265,6 +269,10 @@ int devices_manager_set_state(devices_manager_t *dm, const char *capability, int int devices_manager_create(devices_manager_t *dm, const char *capability, struct json_object *node) { + // Sanity checks + if ((dm == NULL) || (node ==NULL)) + return -1; + if (capability == kOutletEntry) { return create_outlet(dm, node); @@ -288,11 +296,19 @@ int devices_manager_update(devices_manager_t *dm, const char *capability, struct int32_t id = -1; struct json_object *value_node; + if ((dm == NULL) || (node == NULL)) + return -1; + // id if (json_object_object_get_ex(node, k_entry_id, &value_node)) { id = json_object_get_int(value_node); } + // state + if (!json_object_object_get_ex(node, k_entry_state, &value_node)) + { + return -1; + } // Sanity checks. if (id == -1) diff --git a/src/tests/test_device.c b/src/tests/test_device.c index 859daf5..78efc5d 100644 --- a/src/tests/test_device.c +++ b/src/tests/test_device.c @@ -39,6 +39,8 @@ QUNIT_START("Test Data Model"); #define kDeviceTestNameFalse "{ \"id\": 1, \"name\": \"test_name\", \"state\": false }" #define kDeviceTestNameTrue "{ \"id\": 1, \"name\": \"test_name\", \"state\": true }" +/*--------------------------------------------------------------------------*/ + TEST("devices_manager create and free") { devices_manager_t *dm; @@ -48,6 +50,8 @@ TEST("devices_manager create and free") devices_manager_free(dm); } +/*--------------------------------------------------------------------------*/ + TEST("sprinkler - create set_state remove.") { struct json_object *root_node; @@ -59,7 +63,7 @@ TEST("sprinkler - create set_state remove.") // Create a New Entry. root_node = json_object_new_object(); - json_object_object_add(root_node, k_entry_name, json_object_new_string("test_name")); + json_object_object_add(root_node, k_entry_name, json_object_new_string("test_name")); ret = devices_manager_create(dm, kSprinklerEntry, root_node); /* Clean the json object. */ @@ -73,12 +77,13 @@ TEST("sprinkler - create set_state remove.") // Change the State. root_node = json_object_new_object(); - json_object_object_add(root_node, k_entry_state, json_object_new_boolean(true)); - json_object_object_add(root_node, k_entry_id, json_object_new_int(1)); - devices_manager_update(dm, kSprinklerEntry, root_node); + json_object_object_add(root_node, k_entry_state, json_object_new_boolean(true)); + json_object_object_add(root_node, k_entry_id, json_object_new_int(1)); + ret = devices_manager_update(dm, kSprinklerEntry, root_node); + ASSERT_EQUAL_INT(ret, 0); + /* Clean the json object. */ json_object_put(root_node); - ASSERT_EQUAL_INT(ret, 0); // Check Objets. sprinkler_serialized = devices_manager_get_by_id(dm, kSprinklerEntry, 1); @@ -89,6 +94,131 @@ TEST("sprinkler - create set_state remove.") devices_manager_free(dm); } +/*--------------------------------------------------------------------------*/ + +TEST("sprinkler - create - Error case") +{ + struct json_object *root_node; + devices_manager_t *dm; + int ret; + dm = devices_manager_new(); + ASSERT_NOT_NULL(dm); + + // Create a New Entry. + root_node = json_object_new_object(); + + // dm is NULL + ret = devices_manager_create(NULL, kSprinklerEntry, root_node); + ASSERT_EQUAL_INT(ret, -1); + + // unknown capability + ret = devices_manager_create(dm, "", root_node); + ASSERT_EQUAL_INT(ret, -1); + + // json node is null + ret = devices_manager_create(dm, kSprinklerEntry, NULL); + ASSERT_EQUAL_INT(ret, -1); + + // parameter is missing. + ret = devices_manager_create(dm, kSprinklerEntry, root_node); + ASSERT_EQUAL_INT(ret, -1); + + json_object_put(root_node); + + // Free the Object. + devices_manager_free(dm); +} + +/*--------------------------------------------------------------------------*/ + +TEST("sprinkler - get_by_id - Error case") +{ + struct json_object *root_node; + devices_manager_t *dm; + int ret; + char *sprinkler_serialized; + dm = devices_manager_new(); + ASSERT_NOT_NULL(dm); + + // Create a New Entry. + root_node = json_object_new_object(); + json_object_object_add(root_node, k_entry_name, json_object_new_string("test_name")); + + ret = devices_manager_create(dm, kSprinklerEntry, root_node); + ASSERT_EQUAL_INT(ret, 0); + + // dm is NULL + sprinkler_serialized = devices_manager_get_by_id(NULL, kSprinklerEntry, 1); + ASSERT_NULL(sprinkler_serialized); + + // unknown capability + sprinkler_serialized = devices_manager_get_by_id(dm, "", 1); + ASSERT_NULL(sprinkler_serialized); + + // unknown id + sprinkler_serialized = devices_manager_get_by_id(dm, kSprinklerEntry, 7); + ASSERT_NULL(sprinkler_serialized); + + json_object_put(root_node); + + // Free the Object. + devices_manager_free(dm); +} + +/*--------------------------------------------------------------------------*/ + +TEST("sprinkler - update - Error case") +{ + struct json_object *root_node; + devices_manager_t *dm; + int ret; + char *sprinkler_serialized; + dm = devices_manager_new(); + ASSERT_NOT_NULL(dm); + + // Create a New Entry. + root_node = json_object_new_object(); + json_object_object_add(root_node, k_entry_name, json_object_new_string("test_name")); + ret = devices_manager_create(dm, kSprinklerEntry, root_node); + ASSERT_EQUAL_INT(ret, 0); + json_object_put(root_node); + + // Create an update Entry. + root_node = json_object_new_object(); + + // dm is NULL + ret = devices_manager_update(NULL, kSprinklerEntry, root_node); + ASSERT_EQUAL_INT(ret, -1); + + // unknown capability + ret = devices_manager_update(dm, "", root_node); + ASSERT_EQUAL_INT(ret, -1); + + // json is NULL + ret = devices_manager_update(dm, kSprinklerEntry, NULL); + ASSERT_EQUAL_INT(ret, -1); + + // id is missing + ret = devices_manager_update(dm, kSprinklerEntry, root_node); + ASSERT_EQUAL_INT(ret, -1); + + // Id is not valid. + json_object_object_add(root_node, k_entry_id, json_object_new_int(7)); + ret = devices_manager_update(dm, kSprinklerEntry, root_node); + ASSERT_EQUAL_INT(ret, -1); + json_object_put(root_node); + + // id valid and state is missing + root_node = json_object_new_object(); + json_object_object_add(root_node, k_entry_id, json_object_new_int(1)); + ret = devices_manager_update(dm, kSprinklerEntry, root_node); + ASSERT_EQUAL_INT(ret, -1); + json_object_put(root_node); + + // Free the Object. + devices_manager_free(dm); +} + #if 0 devices_manager_t