From 677b2edc8fd2cf93489b8dc9b3fc4204f83e57e6 Mon Sep 17 00:00:00 2001 From: NADAL Jean-Baptiste Date: Thu, 9 Jan 2020 11:49:51 +0100 Subject: [PATCH] Add test to remove outlet and shutter. --- src/devices/devices_manager.c | 15 ++-- src/devices/devices_manager_internal.c | 101 ++++++++++++++++++++----- src/devices/devices_manager_internal.h | 4 +- src/tests/test_outlet.c | 9 +++ src/tests/test_shutter.c | 9 +++ 5 files changed, 113 insertions(+), 25 deletions(-) diff --git a/src/devices/devices_manager.c b/src/devices/devices_manager.c index 88b41a0..d1772c2 100644 --- a/src/devices/devices_manager.c +++ b/src/devices/devices_manager.c @@ -199,18 +199,21 @@ char *devices_manager_get(devices_manager_t *dm, const char *capability) if (capability == kOutletEntry) { + output_node = devices_manager_outlets_to_json_object(dm); } else if (capability == kShutterEntry) { + output_node = devices_manager_shutters_to_json_object(dm); } else if (capability == kSprinklerEntry) { - output_node = devices_manager_sprinkler_to_json_object(dm); - if (output_node != NULL) - { - output = strdup(json_object_to_json_string(output_node)); - json_object_put(output_node); - } + output_node = devices_manager_sprinklers_to_json_object(dm); + } + + if (output_node != NULL) + { + output = strdup(json_object_to_json_string(output_node)); + json_object_put(output_node); } return output; diff --git a/src/devices/devices_manager_internal.c b/src/devices/devices_manager_internal.c index 03ac66c..7b1c984 100644 --- a/src/devices/devices_manager_internal.c +++ b/src/devices/devices_manager_internal.c @@ -130,9 +130,10 @@ int create_outlet(devices_manager_t *dm, struct json_object *node) int remove_outlet(devices_manager_t *dm, uint16_t id) { + outlet_dio_t *outlet; qlist_obj_t obj; - outlet_dio_t *outlet_dio; - int position = 0; + int remove_id = -1; + int i = 0; // Sanity Checks if (dm == NULL) @@ -140,15 +141,25 @@ int remove_outlet(devices_manager_t *dm, uint16_t id) memset((void *)&obj, 0, sizeof(obj)); - while (qlist_getnext(dm->outlets, &obj, true)) + while (qlist_getnext(dm->outlets, &obj, false) == true) { - outlet_dio = obj.data; - if (outlet_dio->device->id == id) + outlet = obj.data; + if (outlet->device->id == id) { - qlist_removeat(dm->outlets, position); + remove_id = i; + break; + } + i++; + } + + if (remove_id != -1) + { + outlet = qlist_popat(dm->outlets, remove_id, NULL); + if (outlet != NULL) + { + outlet_dio_free(outlet); return 0; } - position++; } return -1; @@ -214,6 +225,31 @@ outlet_dio_t *get_outlet_by_id(devices_manager_t *dm, uint16_t id) /*--------------------------------------------------------------------------*/ +struct json_object *devices_manager_outlets_to_json_object(devices_manager_t *dm) +{ + struct json_object *root_node; + qlist_obj_t obj; + outlet_dio_t *outlet; + + // Sanity Checks + if (dm == NULL) + return NULL; + + root_node = json_object_new_array(); + + memset((void *)&obj, 0, sizeof(obj)); + + while (qlist_getnext(dm->outlets, &obj, false)) + { + outlet = obj.data; + json_object_array_add(root_node, outlet_dio_to_json_object(outlet)); + } + + return root_node; +} + +/*--------------------------------------------------------------------------*/ + int load_shutters(devices_manager_t *dm, struct json_object *node) { DEBUG("devicesManager-load_shutters\n"); @@ -296,10 +332,10 @@ int create_shutter(devices_manager_t *dm, struct json_object *node) int remove_shutter(devices_manager_t *dm, uint16_t id) { - qlist_obj_t obj; shutter_t *shutter; - int position = 0; - int remove_position = -1; + qlist_obj_t obj; + int remove_id = -1; + int i = 0; // Sanity Checks if (dm == NULL) @@ -307,21 +343,25 @@ int remove_shutter(devices_manager_t *dm, uint16_t id) memset((void *)&obj, 0, sizeof(obj)); - while (qlist_getnext(dm->shutters, &obj, true)) + while (qlist_getnext(dm->shutters, &obj, false) == true) { shutter = obj.data; if (shutter->outlet_dio->device->id == id) { - qlist_removeat(dm->shutters, position); - return 0; + remove_id = i; + break; } - position++; + i++; } - if (remove_position != -1) + if (remove_id != -1) { - qlist_removeat(dm->shutters, remove_position); - return 0; + shutter = qlist_popat(dm->shutters, remove_id, NULL); + if (shutter != NULL) + { + shutter_free(shutter); + return 0; + } } return -1; @@ -387,6 +427,31 @@ shutter_t *get_shutter_by_id(devices_manager_t *dm, uint16_t id) /*--------------------------------------------------------------------------*/ +struct json_object *devices_manager_shutters_to_json_object(devices_manager_t *dm) +{ + struct json_object *root_node; + qlist_obj_t obj; + shutter_t *shutter; + + // Sanity Checks + if (dm == NULL) + return NULL; + + root_node = json_object_new_array(); + + memset((void *)&obj, 0, sizeof(obj)); + + while (qlist_getnext(dm->shutters, &obj, false)) + { + shutter = obj.data; + json_object_array_add(root_node, shutter_to_json_object(shutter)); + } + + return root_node; +} + +/*--------------------------------------------------------------------------*/ + int load_sprinklers(devices_manager_t *dm, struct json_object *node) { DEBUG("devicesManager-load_sprinkler\n"); @@ -582,7 +647,7 @@ sprinkler_t *get_sprinkler_by_id(devices_manager_t *dm, uint16_t id) /*--------------------------------------------------------------------------*/ -struct json_object *devices_manager_sprinkler_to_json_object(devices_manager_t *dm) +struct json_object *devices_manager_sprinklers_to_json_object(devices_manager_t *dm) { struct json_object *root_node; qlist_obj_t obj; diff --git a/src/devices/devices_manager_internal.h b/src/devices/devices_manager_internal.h index 48c98c9..18b3c66 100644 --- a/src/devices/devices_manager_internal.h +++ b/src/devices/devices_manager_internal.h @@ -45,6 +45,7 @@ extern int remove_outlet(devices_manager_t *dm, uint16_t id); extern int update_outlet(devices_manager_t *dm, uint16_t id, struct json_object *node); extern int set_outlet_state(devices_manager_t *dm, uint16_t id, bool state); extern outlet_dio_t *get_outlet_by_id(devices_manager_t *dm, uint16_t id); +extern struct json_object *devices_manager_outlets_to_json_object(devices_manager_t *dm); /*-------------------------------- SHUTTERS -----------------------------------*/ extern int load_shutters(devices_manager_t *dm, struct json_object *node); @@ -54,6 +55,7 @@ extern int remove_shutter(devices_manager_t *dm, uint16_t id); extern int update_shutter(devices_manager_t *dm, uint16_t id, struct json_object *node); extern int set_shutter_state(devices_manager_t *dm, uint16_t id, bool state); extern shutter_t *get_shutter_by_id(devices_manager_t *dm, uint16_t id); +extern struct json_object *devices_manager_shutters_to_json_object(devices_manager_t *dm); /*------------------------------- SPRINKLERS ----------------------------------*/ extern int load_sprinklers(devices_manager_t *dm, struct json_object *node); @@ -63,6 +65,6 @@ extern int remove_sprinkler(devices_manager_t *dm, uint16_t id); extern int update_sprinkler(devices_manager_t *dm, uint16_t id, struct json_object *node); extern int set_sprinkler_state(devices_manager_t *dm, uint16_t id, bool state); extern sprinkler_t *get_sprinkler_by_id(devices_manager_t *dm, uint16_t id); -extern struct json_object *devices_manager_sprinkler_to_json_object(devices_manager_t *dm); +extern struct json_object *devices_manager_sprinklers_to_json_object(devices_manager_t *dm); #endif /* _DEVICES_MANAGER_INTERNAL_H */ diff --git a/src/tests/test_outlet.c b/src/tests/test_outlet.c index 8b1dfbf..f5593d8 100644 --- a/src/tests/test_outlet.c +++ b/src/tests/test_outlet.c @@ -29,6 +29,8 @@ #define kOutletTestNameTrue "{ \"id\": 1, \"name\": \"test_name\", \"state\": true, \"zone\": \"\", \"sender\": 0, \"switch\": 0 }" #define kOutletTestNameFalse "{ \"id\": 1, \"name\": \"test_name\", \"state\": false, \"zone\": \"\", \"sender\": 0, \"switch\": 0 }" #define kOutletTestNameFullFalse "{ \"id\": 1, \"name\": \"test_name\", \"speech_name\": \"speech_name\", \"state\": false, \"zone\": \"zone\", \"sender\": 123456, \"switch\": 77 }" +#define kOutletTestNameFull "[ { \"id\": 1, \"name\": \"test1\", \"state\": false, \"zone\": \"\", \"sender\": 0, \"switch\": 0 }, { \"id\": 2, \"name\": \"test2\", \"state\": false, \"zone\": \"\", \"sender\": 0, \"switch\": 0 }, { \"id\": 3, \"name\": \"test3\", \"state\": false, \"zone\": \"\", \"sender\": 0, \"switch\": 0 } ]" +#define kOutletTestRemoved "[ { \"id\": 1, \"name\": \"test1\", \"state\": false, \"zone\": \"\", \"sender\": 0, \"switch\": 0 }, { \"id\": 3, \"name\": \"test3\", \"state\": false, \"zone\": \"\", \"sender\": 0, \"switch\": 0 } ]" /*--------------------------------------------------------------------------*/ @@ -39,6 +41,13 @@ TEST("Outlet - create set_state free\t") /*--------------------------------------------------------------------------*/ +TEST("Outlet - create 3 device remove 2\t") +{ + device_create_three_devices_remove_second(kOutletEntry, kOutletTestNameFull, kOutletTestRemoved); +} + +/*--------------------------------------------------------------------------*/ + TEST("Outlet - create - Error case\t") { device_create_error_case(kOutletEntry); diff --git a/src/tests/test_shutter.c b/src/tests/test_shutter.c index d6c54d2..e2d9d4a 100644 --- a/src/tests/test_shutter.c +++ b/src/tests/test_shutter.c @@ -29,6 +29,8 @@ #define kShutterTestNameTrue "{ \"id\": 1, \"name\": \"test_name\", \"state\": true, \"zone\": \"\", \"sender\": 0, \"switch\": 0, \"speed_up\": 0, \"speed_down\": 0 }" #define kShutterTestNameFalse "{ \"id\": 1, \"name\": \"test_name\", \"state\": false, \"zone\": \"\", \"sender\": 0, \"switch\": 0, \"speed_up\": 0, \"speed_down\": 0 }" #define kShutterTestNameFullFalse "{ \"id\": 1, \"name\": \"test_name\", \"state\": false, \"zone\": \"zone\", \"sender\": 123456, \"switch\": 77, \"speed_up\": 50, \"speed_down\": 60 }" +#define kShutterTestNameFull "[ { \"id\": 1, \"name\": \"test1\", \"state\": false, \"zone\": \"\", \"sender\": 0, \"switch\": 0, \"speed_up\": 0, \"speed_down\": 0 }, { \"id\": 2, \"name\": \"test2\", \"state\": false, \"zone\": \"\", \"sender\": 0, \"switch\": 0, \"speed_up\": 0, \"speed_down\": 0 }, { \"id\": 3, \"name\": \"test3\", \"state\": false, \"zone\": \"\", \"sender\": 0, \"switch\": 0, \"speed_up\": 0, \"speed_down\": 0 } ]" +#define kShutterTestRemoved "[ { \"id\": 1, \"name\": \"test1\", \"state\": false, \"zone\": \"\", \"sender\": 0, \"switch\": 0, \"speed_up\": 0, \"speed_down\": 0 }, { \"id\": 3, \"name\": \"test3\", \"state\": false, \"zone\": \"\", \"sender\": 0, \"switch\": 0, \"speed_up\": 0, \"speed_down\": 0 } ]" /*--------------------------------------------------------------------------*/ @@ -39,6 +41,13 @@ TEST("Shutter - create set_state free\t") /*--------------------------------------------------------------------------*/ +TEST("Shutter - create 3 device remove 2\t") +{ + device_create_three_devices_remove_second(kShutterEntry, kShutterTestNameFull, kShutterTestRemoved); +} + +/*--------------------------------------------------------------------------*/ + TEST("Shutter - create - Error case\t") { device_create_error_case(kShutterEntry);