2 test_cases_get_node.c -- Execution of specific meshlink black box test cases
3 Copyright (C) 2018 Guus Sliepen <guus@meshlink.io>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24 #include "execute_tests.h"
25 #include "test_cases_get_node.h"
26 #include "../common/containers.h"
27 #include "../common/test_step.h"
28 #include "../common/common_handlers.h"
36 /* Modify this to change the logging level of Meshlink */
37 #define TEST_MESHLINK_LOG_LEVEL MESHLINK_DEBUG
39 static void test_case_mesh_get_node_01(void **state);
40 static bool test_steps_mesh_get_node_01(void);
41 static void test_case_mesh_get_node_02(void **state);
42 static bool test_steps_mesh_get_node_02(void);
43 static void test_case_mesh_get_node_03(void **state);
44 static bool test_steps_mesh_get_node_03(void);
45 static void test_case_mesh_get_node_04(void **state);
46 static bool test_steps_mesh_get_node_04(void);
48 /* State structure for meshlink_get_node Test Case #1 */
49 static black_box_state_t test_mesh_get_node_01_state = {
50 .test_case_name = "test_case_mesh_get_node_01",
53 /* State structure for meshlink_get_node Test Case #2 */
54 static black_box_state_t test_mesh_get_node_02_state = {
55 .test_case_name = "test_case_mesh_get_node_02",
58 /* State structure for meshlink_get_node Test Case #3 */
59 static black_box_state_t test_mesh_get_node_03_state = {
60 .test_case_name = "test_case_mesh_get_node_03",
63 /* State structure for meshlink_get_node Test Case #4 */
64 static black_box_state_t test_mesh_get_node_04_state = {
65 .test_case_name = "test_case_mesh_get_node_04",
68 /* Execute meshlink_get_node Test Case # 1 */
69 static void test_case_mesh_get_node_01(void **state) {
70 execute_test(test_steps_mesh_get_node_01, state);
73 /* Test Steps for meshlink_get_node Test Case # 1
76 1. Open nodes instance
80 node handle of it's own is obtained
82 static bool test_steps_mesh_get_node_01(void) {
83 meshlink_set_log_cb(NULL, TEST_MESHLINK_LOG_LEVEL, meshlink_callback_logger);
84 assert(meshlink_destroy("getnode1"));
85 assert(meshlink_destroy("getnode2"));
87 // Opening NUT and bar nodes
88 meshlink_handle_t *mesh1 = meshlink_open("getnode1", "nut", "test", DEV_CLASS_STATIONARY);
89 assert(mesh1 != NULL);
90 meshlink_set_log_cb(mesh1, TEST_MESHLINK_LOG_LEVEL, meshlink_callback_logger);
91 meshlink_handle_t *mesh2 = meshlink_open("getnode2", "bar", "test", DEV_CLASS_STATIONARY);
92 assert(mesh2 != NULL);
93 meshlink_set_log_cb(mesh2, TEST_MESHLINK_LOG_LEVEL, meshlink_callback_logger);
95 // Exporting and Importing mutually
96 char *exp1 = meshlink_export(mesh1);
98 char *exp2 = meshlink_export(mesh2);
100 bool imp1 = meshlink_import(mesh1, exp2);
102 bool imp2 = meshlink_import(mesh2, exp1);
106 meshlink_node_t *get_node = meshlink_get_node(mesh1, "bar");
107 assert_int_not_equal(get_node, NULL);
108 get_node = meshlink_get_node(mesh1, "nut");
109 assert_int_not_equal(get_node, NULL);
112 meshlink_close(mesh1);
113 meshlink_close(mesh2);
114 assert(meshlink_destroy("getnode1"));
115 assert(meshlink_destroy("getnode2"));
119 /* Execute meshlink_get_node Test Case # 2 */
120 static void test_case_mesh_get_node_02(void **state) {
121 execute_test(test_steps_mesh_get_node_02, state);
124 /* Test Steps for meshlink_get_node Test Case # 2
127 1. Get node handles by passing NULL as mesh handle argument
130 Reports error successfully by returning NULL
132 static bool test_steps_mesh_get_node_02(void) {
133 meshlink_node_t *get_node = meshlink_get_node(NULL, "foo");
134 assert_int_equal(get_node, NULL);
139 /* Execute meshlink_get_node Test Case # 3 */
140 static void test_case_mesh_get_node_03(void **state) {
141 execute_test(test_steps_mesh_get_node_03, state);
144 /* Test Steps for meshlink_get_node Test Case # 3
147 1. Get node handles by passing NULL as node name argument
150 Reports error successfully by returning NULL
152 static bool test_steps_mesh_get_node_03(void) {
153 meshlink_handle_t *mesh = meshlink_open("node_conf.3", "foo", "test", DEV_CLASS_STATIONARY);
155 assert(meshlink_start(mesh));
157 meshlink_node_t *get_node = meshlink_get_node(mesh, NULL);
158 assert_int_equal(get_node, NULL);
160 meshlink_close(mesh);
161 assert(meshlink_destroy("node_conf.3"));
165 /* Execute meshlink_get_node Test Case # 4 */
166 static void test_case_mesh_get_node_04(void **state) {
167 execute_test(test_steps_mesh_get_node_04, state);
170 /* Test Steps for meshlink_get_node Test Case # 4
173 1. Open node instance
174 2. Get node handle with the name of the node
175 that's not in the mesh
178 Reports error successfully by returning NULL
180 static bool test_steps_mesh_get_node_04(void) {
181 meshlink_handle_t *mesh = meshlink_open("node_conf", "foo", "test", DEV_CLASS_STATIONARY);
183 assert(meshlink_start(mesh));
185 const char *nonexisting_node = "bar";
186 meshlink_node_t *get_node = meshlink_get_node(mesh, nonexisting_node);
187 assert_int_equal(get_node, NULL);
189 meshlink_close(mesh);
190 assert(meshlink_destroy("node_conf"));
194 int test_meshlink_get_node(void) {
195 const struct CMUnitTest blackbox_get_node_tests[] = {
196 cmocka_unit_test_prestate_setup_teardown(test_case_mesh_get_node_01, NULL, NULL,
197 (void *)&test_mesh_get_node_01_state),
198 cmocka_unit_test_prestate_setup_teardown(test_case_mesh_get_node_02, NULL, NULL,
199 (void *)&test_mesh_get_node_02_state),
200 cmocka_unit_test_prestate_setup_teardown(test_case_mesh_get_node_03, NULL, NULL,
201 (void *)&test_mesh_get_node_03_state),
202 cmocka_unit_test_prestate_setup_teardown(test_case_mesh_get_node_04, NULL, NULL,
203 (void *)&test_mesh_get_node_04_state)
206 total_tests += sizeof(blackbox_get_node_tests) / sizeof(blackbox_get_node_tests[0]);
208 return cmocka_run_group_tests(blackbox_get_node_tests, NULL, NULL);