This commit is contained in:
@@ -965,8 +965,8 @@ bool manage_hook(restd_hook_t *hook, restd_resp_t *response, const char *request
|
||||
{
|
||||
int list_size;
|
||||
bool result = true;
|
||||
// printf("Avec param... %s\n", request_path);
|
||||
qlist_t *uri_fragments = qstrtokenizer(request_path, "/");
|
||||
// printf("Avec param... %s %p\n", request_path, uri_fragments);
|
||||
list_size = qlist_size(hook->path_fragments);
|
||||
if (list_size == qlist_size(uri_fragments))
|
||||
{
|
||||
@@ -997,12 +997,16 @@ bool manage_hook(restd_hook_t *hook, restd_resp_t *response, const char *request
|
||||
free(obj_hook.data);
|
||||
free(obj_uri.data);
|
||||
if (result == false)
|
||||
{
|
||||
qlist_free(uri_fragments);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
response->has_parameter = true;
|
||||
response->parameter_name = strdup(hook->parameter_name);
|
||||
if (hook->action_name != NULL)
|
||||
response->action = strdup(hook->action_name);
|
||||
|
||||
hook->cb(response, hook->userdata);
|
||||
qlist_free(uri_fragments);
|
||||
return true;
|
||||
|
||||
@@ -41,6 +41,9 @@
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int create_device(restd_resp_t *response, devices_manager_t *dm, const char *capability);
|
||||
int list_device(restd_resp_t *response, devices_manager_t *dm, const char *capability);
|
||||
int get_device(restd_resp_t *response, devices_manager_t *dm, const char *capability);
|
||||
int update_device(restd_resp_t *response, devices_manager_t *dm, const char *capability);
|
||||
int remove_device(restd_resp_t *response, devices_manager_t *dm, const char *capability);
|
||||
|
||||
@@ -73,36 +76,9 @@ int capabilities_handler(restd_resp_t *response, void *arg)
|
||||
|
||||
int outlet_create_handler(restd_resp_t *response, void *arg)
|
||||
{
|
||||
struct json_object *root_node = NULL;
|
||||
char *data;
|
||||
devices_manager_t *dm = (devices_manager_t *)arg;
|
||||
|
||||
data = restd_http_get_body(response);
|
||||
|
||||
if (data == NULL)
|
||||
{
|
||||
restd_http_response(response, 400, "application/json", kerror_body);
|
||||
return RESTD_OK;
|
||||
}
|
||||
|
||||
root_node = json_tokener_parse(data);
|
||||
free(data);
|
||||
|
||||
if (root_node != NULL)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = devices_manager_create(dm, kOutletEntry, root_node);
|
||||
json_object_put(root_node);
|
||||
if (ret == 0)
|
||||
{
|
||||
restd_http_response(response, 204, "application/json", kempty_body);
|
||||
return RESTD_OK;
|
||||
}
|
||||
}
|
||||
|
||||
restd_http_response(response, 400, "application/json", kerror_body);
|
||||
return RESTD_OK;
|
||||
return create_device(response, dm, kOutletEntry);
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
@@ -110,40 +86,17 @@ int outlet_create_handler(restd_resp_t *response, void *arg)
|
||||
int outlet_list_handler(restd_resp_t *response, void *arg)
|
||||
{
|
||||
devices_manager_t *dm = (devices_manager_t *)arg;
|
||||
char *data;
|
||||
|
||||
data = devices_manager_get(dm, kOutletEntry);
|
||||
if (data == NULL)
|
||||
{
|
||||
restd_http_response(response, 500, "application/json", kempty_body);
|
||||
return RESTD_OK;
|
||||
}
|
||||
|
||||
restd_http_response(response, 200, "application/json", data);
|
||||
free(data);
|
||||
|
||||
return RESTD_OK;
|
||||
return list_device(response, dm, kOutletEntry);
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int outlet_get_handler(restd_resp_t *response, void *arg)
|
||||
{
|
||||
struct json_object *root_node = NULL;
|
||||
char *data;
|
||||
devices_manager_t *dm = (devices_manager_t *)arg;
|
||||
|
||||
if (response->has_parameter == false)
|
||||
{
|
||||
restd_http_response(response, 500, "application/json", kerror_body);
|
||||
return RESTD_OK;
|
||||
}
|
||||
|
||||
data = devices_manager_get_by_id(dm, kOutletEntry, response->parameter_value);
|
||||
restd_http_response(response, 200, "application/json", data);
|
||||
free(data);
|
||||
|
||||
return RESTD_OK;
|
||||
return get_device(response, dm, kOutletEntry);
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
@@ -168,24 +121,27 @@ int outlet_remove_handler(restd_resp_t *response, void *arg)
|
||||
|
||||
int sprinkler_create_handler(restd_resp_t *response, void *arg)
|
||||
{
|
||||
#warning TODO
|
||||
return RESTD_OK;
|
||||
devices_manager_t *dm = (devices_manager_t *)arg;
|
||||
|
||||
return create_device(response, dm, kSprinklerEntry);
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int sprinkler_list_handler(restd_resp_t *response, void *arg)
|
||||
{
|
||||
#warning TODO
|
||||
return RESTD_OK;
|
||||
devices_manager_t *dm = (devices_manager_t *)arg;
|
||||
|
||||
return list_device(response, dm, kSprinklerEntry);
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int sprinkler_get_handler(restd_resp_t *response, void *arg)
|
||||
{
|
||||
#warning TODO
|
||||
return RESTD_OK;
|
||||
devices_manager_t *dm = (devices_manager_t *)arg;
|
||||
|
||||
return get_device(response, dm, kSprinklerEntry);
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
@@ -211,24 +167,27 @@ int sprinkler_remove_handler(restd_resp_t *response, void *arg)
|
||||
|
||||
int shutter_create_handler(restd_resp_t *response, void *arg)
|
||||
{
|
||||
#warning TODO
|
||||
return RESTD_OK;
|
||||
devices_manager_t *dm = (devices_manager_t *)arg;
|
||||
|
||||
return create_device(response, dm, kShutterEntry);
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int shutter_list_handler(restd_resp_t *response, void *arg)
|
||||
{
|
||||
#warning TODO
|
||||
return RESTD_OK;
|
||||
devices_manager_t *dm = (devices_manager_t *)arg;
|
||||
|
||||
return list_device(response, dm, kShutterEntry);
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int shutter_get_handler(restd_resp_t *response, void *arg)
|
||||
{
|
||||
#warning TODO
|
||||
return RESTD_OK;
|
||||
devices_manager_t *dm = (devices_manager_t *)arg;
|
||||
|
||||
return get_device(response, dm, kShutterEntry);
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
@@ -250,6 +209,78 @@ int shutter_remove_handler(restd_resp_t *response, void *arg)
|
||||
return remove_device(response, dm, kShutterEntry);
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int create_device(restd_resp_t *response, devices_manager_t *dm, const char *capability)
|
||||
{
|
||||
struct json_object *root_node = NULL;
|
||||
char *data;
|
||||
|
||||
data = restd_http_get_body(response);
|
||||
|
||||
if (data == NULL)
|
||||
{
|
||||
restd_http_response(response, 400, "application/json", kerror_body);
|
||||
return RESTD_OK;
|
||||
}
|
||||
|
||||
root_node = json_tokener_parse(data);
|
||||
free(data);
|
||||
|
||||
if (root_node != NULL)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = devices_manager_create(dm, capability, root_node);
|
||||
json_object_put(root_node);
|
||||
if (ret == 0)
|
||||
{
|
||||
restd_http_response(response, 204, "application/json", kempty_body);
|
||||
return RESTD_OK;
|
||||
}
|
||||
}
|
||||
|
||||
restd_http_response(response, 400, "application/json", kerror_body);
|
||||
return RESTD_OK;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int list_device(restd_resp_t *response, devices_manager_t *dm, const char *capability)
|
||||
{
|
||||
char *data;
|
||||
|
||||
data = devices_manager_get(dm, capability);
|
||||
if (data == NULL)
|
||||
{
|
||||
restd_http_response(response, 500, "application/json", kempty_body);
|
||||
return RESTD_OK;
|
||||
}
|
||||
|
||||
restd_http_response(response, 200, "application/json", data);
|
||||
free(data);
|
||||
|
||||
return RESTD_OK;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int get_device(restd_resp_t *response, devices_manager_t *dm, const char *capability)
|
||||
{
|
||||
char *data;
|
||||
|
||||
if (response->has_parameter == false)
|
||||
{
|
||||
restd_http_response(response, 500, "application/json", kerror_body);
|
||||
return RESTD_OK;
|
||||
}
|
||||
|
||||
data = devices_manager_get_by_id(dm, capability, response->parameter_value);
|
||||
restd_http_response(response, 200, "application/json", data);
|
||||
free(data);
|
||||
|
||||
return RESTD_OK;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
@@ -297,7 +328,6 @@ int update_device(restd_resp_t *response, devices_manager_t *dm, const char *cap
|
||||
|
||||
int remove_device(restd_resp_t *response, devices_manager_t *dm, const char *capability)
|
||||
{
|
||||
struct json_object *root_node = NULL;
|
||||
int ret;
|
||||
|
||||
if (response->has_parameter == false)
|
||||
|
||||
@@ -1,3 +1,33 @@
|
||||
/*!
|
||||
* dump_domo.h
|
||||
*
|
||||
* 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: 21/02/2020
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _DUMP_DOMO_H
|
||||
#define _DUMP_DOMO_H
|
||||
|
||||
/* Outlets */
|
||||
|
||||
#define k_outlet_list_empty "[ ]"
|
||||
|
||||
#define k_create_outlet_1 "{\"name\":\"outlet_1\", \"sender\": 12797322, \"switch\": 4}"
|
||||
@@ -8,3 +38,18 @@
|
||||
#define k_outlet_list_one_elem "[ { \"id\": 1, \"name\": \"outlet_1\", \"state\": false, \"zone\": \"\", \"sender\": 12797322, \"switch\": 4 } ]"
|
||||
#define k_outlet_list_two_elem "[ { \"id\": 1, \"name\": \"outlet_1\", \"state\": false, \"zone\": \"\", \"sender\": 12797322, \"switch\": 4 }, { \"id\": 2, \"name\": \"outlet_2\", \"state\": false, \"zone\": \"pool\", \"sender\": 87654321, \"switch\": 2 } ]"
|
||||
#define k_outlet_list_elem_2 "{ \"id\": 2, \"name\": \"updated_name\", \"state\": true, \"zone\": \"desk\", \"sender\": 12345678, \"switch\": 3 }"
|
||||
|
||||
/* sprinklers */
|
||||
|
||||
#define k_sprinkler_list_empty "[ ]"
|
||||
|
||||
#define k_create_sprinkler_1 "{\"name\":\"sprinkler_1\" }"
|
||||
#define k_create_sprinkler_2 "{\"name\":\"sprinkler_2\" }"
|
||||
|
||||
#define k_update_sprinkler_2 "{\"name\":\"updated_name\", \"state\": true}"
|
||||
|
||||
#define k_sprinkler_list_one_elem "[ { \"id\": 1, \"name\": \"sprinkler_1\", \"state\": false } ]"
|
||||
#define k_sprinkler_list_two_elem "[ { \"id\": 1, \"name\": \"sprinkler_1\", \"state\": false }, { \"id\": 2, \"name\": \"sprinkler_2\", \"state\": false } ]"
|
||||
#define k_sprinkler_list_elem_2 "{ \"id\": 2, \"name\": \"updated_name\", \"state\": true }"
|
||||
|
||||
#endif /*_DUMP_DOMO_H */
|
||||
|
||||
@@ -139,8 +139,6 @@ TEST("Domo - Test API /api/v1/outlets - correct access\t")
|
||||
|
||||
sleep(1);
|
||||
|
||||
// Outlets
|
||||
|
||||
// Get All Devices. Should be empty.
|
||||
ret = exec_request(kget_method, "http://localhost:" kserver_port "/api/v1/outlets", 200, "", k_outlet_list_empty, false);
|
||||
ASSERT_EQUAL_INT(ret, 0);
|
||||
@@ -180,3 +178,59 @@ TEST("Domo - Test API /api/v1/outlets - correct access\t")
|
||||
restd_server_free(rest_server);
|
||||
devices_manager_free(dm);
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
TEST("Domo - Test API /api/v1/sprinklers - correct access\t")
|
||||
{
|
||||
restd_server_t *rest_server;
|
||||
devices_manager_t *dm;
|
||||
int ret;
|
||||
|
||||
dm = devices_manager_new();
|
||||
ASSERT_NOT_NULL(dm);
|
||||
|
||||
rest_server = setup_server(dm);
|
||||
ASSERT_NOT_NULL(rest_server);
|
||||
|
||||
sleep(1);
|
||||
|
||||
// Get All Devices. Should be empty.
|
||||
ret = exec_request(kget_method, "http://localhost:" kserver_port "/api/v1/sprinklers", 200, "", k_sprinkler_list_empty, false);
|
||||
ASSERT_EQUAL_INT(ret, 0);
|
||||
|
||||
// Create An Outlet. Should be empty.
|
||||
ret = exec_request(kpost_method, "http://localhost:" kserver_port "/api/v1/sprinklers", 204, k_create_sprinkler_1, "", false);
|
||||
ASSERT_EQUAL_INT(ret, 0);
|
||||
|
||||
// Get All Devices. Should Contain One Device.
|
||||
ret = exec_request(kget_method, "http://localhost:" kserver_port "/api/v1/sprinklers", 200, "", k_sprinkler_list_one_elem, false);
|
||||
ASSERT_EQUAL_INT(ret, 0);
|
||||
|
||||
// Create A second Outlet. Should Contain two Device.
|
||||
ret = exec_request(kpost_method, "http://localhost:" kserver_port "/api/v1/sprinklers", 204, k_create_sprinkler_2, "", false);
|
||||
ASSERT_EQUAL_INT(ret, 0);
|
||||
|
||||
// Get All Devices. Should Contain two Devices.
|
||||
ret = exec_request(kget_method, "http://localhost:" kserver_port "/api/v1/sprinklers", 200, "", k_sprinkler_list_two_elem, false);
|
||||
ASSERT_EQUAL_INT(ret, 0);
|
||||
|
||||
// Update the second Outlet. Device should contain.
|
||||
ret = exec_request(kput_method, "http://localhost:" kserver_port "/api/v1/sprinklers/2", 204, k_update_outlet_2, "", false);
|
||||
ASSERT_EQUAL_INT(ret, 0);
|
||||
|
||||
// Get Device 2 only. Should Contain Device two updated.
|
||||
ret = exec_request(kget_method, "http://localhost:" kserver_port "/api/v1/sprinklers/2", 200, "", k_sprinkler_list_elem_2, false);
|
||||
ASSERT_EQUAL_INT(ret, 0);
|
||||
|
||||
// Delete Device 2.
|
||||
ret = exec_request(kdelete_method, "http://localhost:" kserver_port "/api/v1/sprinklers/2", 204, "", "", false);
|
||||
ASSERT_EQUAL_INT(ret, 0);
|
||||
|
||||
// Get All Devices. Should Contain One Device.
|
||||
ret = exec_request(kget_method, "http://localhost:" kserver_port "/api/v1/sprinklers", 200, "", k_sprinkler_list_one_elem, false);
|
||||
ASSERT_EQUAL_INT(ret, 0);
|
||||
|
||||
restd_server_free(rest_server);
|
||||
devices_manager_free(dm);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user