From 0291ee9c4d9d77e6a61ca6ed07efa43337189985 Mon Sep 17 00:00:00 2001 From: NADAL Jean-Baptiste Date: Thu, 9 Jan 2020 10:58:37 +0100 Subject: [PATCH] Add function test and feature to remove sprinkler --- src/devices/devices_manager_internal.c | 31 ++++++++++++++++++++------ src/tests/test_devices.c | 11 ++++++--- src/tests/test_sprinkler.c | 5 +++-- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/devices/devices_manager_internal.c b/src/devices/devices_manager_internal.c index 7c87592..03ac66c 100644 --- a/src/devices/devices_manager_internal.c +++ b/src/devices/devices_manager_internal.c @@ -469,21 +469,38 @@ int create_sprinkler(devices_manager_t *dm, struct json_object *node) int remove_sprinkler(devices_manager_t *dm, uint16_t id) { - qlist_obj_t *remove_obj; sprinkler_t *sprinkler; + qlist_obj_t obj; + int remove_id = -1; + int i = 0; // Sanity Checks if (dm == NULL) return -1; - remove_obj = qlist_popat(dm->sprinklers, id, NULL); - if (remove_obj != NULL) + memset((void *)&obj, 0, sizeof(obj)); + + while (qlist_getnext(dm->sprinklers, &obj, false) == true) { - sprinkler = remove_obj->data; - sprinkler_free(sprinkler); - return 0; + sprinkler = obj.data; + if (sprinkler->device->id == id) + { + remove_id = i; + break; + } + i++; } - + + if (remove_id != -1) + { + sprinkler = qlist_popat(dm->sprinklers, remove_id, NULL); + if (sprinkler != NULL) + { + sprinkler_free(sprinkler); + return 0; + } + } + return -1; } diff --git a/src/tests/test_devices.c b/src/tests/test_devices.c index b6a4f90..9f7a575 100644 --- a/src/tests/test_devices.c +++ b/src/tests/test_devices.c @@ -74,7 +74,7 @@ void device_create_set_state_free(const char *capability, const char *test_name_ /*--------------------------------------------------------------------------*/ -void device_create_three_devices_remove_second(const char *capability, const char *test_array) +void device_create_three_devices_remove_second(const char *capability, const char *test_array_full, const char *test_array_removed) { struct json_object *root_node; devices_manager_t *dm; @@ -111,7 +111,12 @@ void device_create_three_devices_remove_second(const char *capability, const cha json_object_put(root_node); ASSERT_EQUAL_INT(ret, 0); - // Remove ID 1. + device_serialized = devices_manager_get(dm, capability); + // printf ("device: %s\n", device_serialized); + ASSERT_EQUAL_STR(device_serialized, test_array_full); + free(device_serialized); + + // Remove ID 2. root_node = json_object_new_object(); json_object_object_add(root_node, k_entry_id, json_object_new_int(2)); ret = devices_manager_delete(dm, capability, root_node); @@ -120,7 +125,7 @@ void device_create_three_devices_remove_second(const char *capability, const cha device_serialized = devices_manager_get(dm, capability); // printf ("device: %s\n", device_serialized); - ASSERT_EQUAL_STR(device_serialized, test_array); + ASSERT_EQUAL_STR(device_serialized, test_array_removed); free(device_serialized); // Free the Object. diff --git a/src/tests/test_sprinkler.c b/src/tests/test_sprinkler.c index 0a95be3..7b2be6b 100644 --- a/src/tests/test_sprinkler.c +++ b/src/tests/test_sprinkler.c @@ -29,7 +29,8 @@ #define kSprinklerTestNameTrue "{ \"id\": 1, \"name\": \"test_name\", \"state\": true }" #define kSprinklerTestNameFalse "{ \"id\": 1, \"name\": \"test_name\", \"state\": false }" -#define kSprinklerTestRemove "[ { \"id\": 1, \"name\": \"test1\", \"state\": false }, { \"id\": 3, \"name\": \"test3\", \"state\": false } ]" +#define kSprinklerTestNameFull "[ { \"id\": 1, \"name\": \"test1\", \"state\": false }, { \"id\": 2, \"name\": \"test2\", \"state\": false }, { \"id\": 3, \"name\": \"test3\", \"state\": false } ]" +#define kSprinklerTestRemoved "[ { \"id\": 1, \"name\": \"test1\", \"state\": false }, { \"id\": 3, \"name\": \"test3\", \"state\": false } ]" /*--------------------------------------------------------------------------*/ @@ -42,7 +43,7 @@ TEST("Sprinkler - create set_state free\t") TEST("Sprinkler - create 3 device remove 2\t") { - device_create_three_devices_remove_second(kSprinklerEntry, kSprinklerTestRemove); + device_create_three_devices_remove_second(kSprinklerEntry, kSprinklerTestNameFull, kSprinklerTestRemoved); } /*--------------------------------------------------------------------------*/