From c3891cd0c291b303c6c15013ed17642e19a1fe99 Mon Sep 17 00:00:00 2001 From: NADAL Jean-Baptiste Date: Tue, 7 Jan 2020 23:34:04 +0100 Subject: [PATCH] update test device. --- src/CMakeLists.txt | 2 +- src/tests/test_device.c | 244 ------------------------------------- src/tests/test_devices.c | 145 ++++++++++++++++++++++ src/tests/test_main.c | 75 ++++++++++++ src/tests/test_sprinkler.c | 55 +++++++++ 5 files changed, 276 insertions(+), 245 deletions(-) delete mode 100644 src/tests/test_device.c create mode 100644 src/tests/test_devices.c create mode 100644 src/tests/test_main.c create mode 100644 src/tests/test_sprinkler.c diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c5a6d2b..2353e9e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -62,7 +62,7 @@ if(DOMO_BUILD_TEST) add_definitions("-fprofile-arcs -ftest-coverage") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lgcov --coverage") -add_executable (test_device tests/test_device.c ${source_files}) +add_executable (test_device tests/test_main.c ${source_files}) target_link_libraries (test_device LINK_PUBLIC diff --git a/src/tests/test_device.c b/src/tests/test_device.c deleted file mode 100644 index 78efc5d..0000000 --- a/src/tests/test_device.c +++ /dev/null @@ -1,244 +0,0 @@ -/*! - * test_device.c - * - * Copyright (c) 2015-2020, NADAL Jean-Baptiste. All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - * - * @Author: NADAL Jean-Baptiste - * @Date: 26/12/2019 - * - */ - -// This is an independent project of an individual developer. Dear PVS-Studio, please check it. -// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: http://www.viva64.com - -#include -#include - -#include "qunit.h" - -#include "domo.h" -#include "devices/devices_manager.h" - -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; - - dm = devices_manager_new(); - ASSERT_NOT_NULL(dm); - devices_manager_free(dm); -} - -/*--------------------------------------------------------------------------*/ - -TEST("sprinkler - create set_state remove.") -{ - 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); - /* 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); - ASSERT_EQUAL_STR(sprinkler_serialized, kDeviceTestNameFalse); - free(sprinkler_serialized); - - // 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)); - ret = devices_manager_update(dm, kSprinklerEntry, root_node); - ASSERT_EQUAL_INT(ret, 0); - - /* Clean the json object. */ - json_object_put(root_node); - - // Check Objets. - sprinkler_serialized = devices_manager_get_by_id(dm, kSprinklerEntry, 1); - ASSERT_EQUAL_STR(sprinkler_serialized, kDeviceTestNameTrue); - free(sprinkler_serialized); - - // Free the Object. - 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 - -kOutletEntry -kShutterEntry -kSprinklerEntry - - -extern int devices_manager_load(devices_manager_t *dm, char *config_path); -extern int devices_manager_save(devices_manager_t *dm); - -extern char *devices_manager_get(devices_manager_t *dm, const char *capability); -extern char *devices_manager_get_by_id(devices_manager_t *dm, const char *capability, uint32_t id); - -extern int devices_manager_set(devices_manager_t *dm, const char *capability, struct json_object *node); -extern int devices_manager_set_state(devices_manager_t *dm, const char *capability, int id, bool state); - -extern int devices_manager_create(devices_manager_t *dm, const char *capability, struct json_object *node); -extern int devices_manager_update(devices_manager_t *dm, const char *capability, struct json_object *node); -extern int devices_manager_delete(devices_manager_t *dm, const char *capability, struct json_object *node); -#endif - -QUNIT_END(); diff --git a/src/tests/test_devices.c b/src/tests/test_devices.c new file mode 100644 index 0000000..baf473b --- /dev/null +++ b/src/tests/test_devices.c @@ -0,0 +1,145 @@ +/*! + * test_sprinkler.c + * + * Copyright (c) 2015-2020, NADAL Jean-Baptiste. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + * + * @Author: NADAL Jean-Baptiste + * @Date: 26/12/2019 + * + */ + +// This is an independent project of an individual developer. Dear PVS-Studio, please check it. +// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: http://www.viva64.com + +#define kDeviceTestNameFalse "{ \"id\": 1, \"name\": \"test_name\", \"state\": false }" +#define kDeviceTestNameTrue "{ \"id\": 1, \"name\": \"test_name\", \"state\": true }" + +/*--------------------------------------------------------------------------*/ + +void device_create_set_state_remove(const char *capability) +{ + 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, capability, root_node); + /* Clean the json object. */ + json_object_put(root_node); + ASSERT_EQUAL_INT(ret, 0); + + // Check Objets. + sprinkler_serialized = devices_manager_get_by_id(dm, capability, 1); + ASSERT_EQUAL_STR(sprinkler_serialized, kDeviceTestNameFalse); + free(sprinkler_serialized); + + // 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)); + ret = devices_manager_update(dm, capability, root_node); + ASSERT_EQUAL_INT(ret, 0); + + /* Clean the json object. */ + json_object_put(root_node); + + // Check Objets. + sprinkler_serialized = devices_manager_get_by_id(dm, capability, 1); + ASSERT_EQUAL_STR(sprinkler_serialized, kDeviceTestNameTrue); + free(sprinkler_serialized); + + // Free the Object. + devices_manager_free(dm); +} + +/*--------------------------------------------------------------------------*/ + +void device_create_error_case(const char *capability) +{ + 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, capability, 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, capability, NULL); + ASSERT_EQUAL_INT(ret, -1); + + // parameter is missing. + ret = devices_manager_create(dm, capability, root_node); + ASSERT_EQUAL_INT(ret, -1); + + json_object_put(root_node); + + // Free the Object. + devices_manager_free(dm); +} + +/*--------------------------------------------------------------------------*/ + +void device_get_by_id_error_case(const char *capability) +{ + 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, capability, root_node); + ASSERT_EQUAL_INT(ret, 0); + + // dm is NULL + sprinkler_serialized = devices_manager_get_by_id(NULL, capability, 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, capability, 7); + ASSERT_NULL(sprinkler_serialized); + + json_object_put(root_node); + + // Free the Object. + devices_manager_free(dm); +} diff --git a/src/tests/test_main.c b/src/tests/test_main.c new file mode 100644 index 0000000..0eaf77c --- /dev/null +++ b/src/tests/test_main.c @@ -0,0 +1,75 @@ +/*! + * test_device.c + * + * Copyright (c) 2015-2020, NADAL Jean-Baptiste. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + * + * @Author: NADAL Jean-Baptiste + * @Date: 26/12/2019 + * + */ + +// This is an independent project of an individual developer. Dear PVS-Studio, please check it. +// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: http://www.viva64.com + +#include +#include + +#include "qunit.h" + +#include "domo.h" +#include "devices/devices_manager.h" + +QUNIT_START("Test Data Model"); + +/*--------------------------------------------------------------------------*/ + +TEST("devices_manager create and free") +{ + devices_manager_t *dm; + + dm = devices_manager_new(); + ASSERT_NOT_NULL(dm); + devices_manager_free(dm); +} + +#include "test_devices.c" +#include "test_sprinkler.c" + +#if 0 +devices_manager_t + +kOutletEntry +kShutterEntry +kSprinklerEntry + + +extern int devices_manager_load(devices_manager_t *dm, char *config_path); +extern int devices_manager_save(devices_manager_t *dm); + +extern char *devices_manager_get(devices_manager_t *dm, const char *capability); +extern char *devices_manager_get_by_id(devices_manager_t *dm, const char *capability, uint32_t id); + +extern int devices_manager_set(devices_manager_t *dm, const char *capability, struct json_object *node); +extern int devices_manager_set_state(devices_manager_t *dm, const char *capability, int id, bool state); + +extern int devices_manager_create(devices_manager_t *dm, const char *capability, struct json_object *node); +extern int devices_manager_update(devices_manager_t *dm, const char *capability, struct json_object *node); +extern int devices_manager_delete(devices_manager_t *dm, const char *capability, struct json_object *node); +#endif + +QUNIT_END(); diff --git a/src/tests/test_sprinkler.c b/src/tests/test_sprinkler.c new file mode 100644 index 0000000..9fcd220 --- /dev/null +++ b/src/tests/test_sprinkler.c @@ -0,0 +1,55 @@ +/*! + * test_sprinkler.c + * + * Copyright (c) 2015-2020, NADAL Jean-Baptiste. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + * + * @Author: NADAL Jean-Baptiste + * @Date: 26/12/2019 + * + */ + +// This is an independent project of an individual developer. Dear PVS-Studio, please check it. +// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: http://www.viva64.com + +/*--------------------------------------------------------------------------*/ + +TEST("sprinkler - create set_state remove.") +{ + device_create_set_state_remove(kSprinklerEntry); +} + +/*--------------------------------------------------------------------------*/ + +TEST("sprinkler - create - Error case") +{ + device_create_error_case(kSprinklerEntry); +} + +/*--------------------------------------------------------------------------*/ + +TEST("sprinkler - get_by_id - Error case") +{ + device_get_by_id_error_case(kSprinklerEntry); +} + +/*--------------------------------------------------------------------------*/ + +TEST("sprinkler - update - Error case") +{ + device_get_by_id_error_case(kSprinklerEntry); +}