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;
|
int list_size;
|
||||||
bool result = true;
|
bool result = true;
|
||||||
// printf("Avec param... %s\n", request_path);
|
|
||||||
qlist_t *uri_fragments = qstrtokenizer(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);
|
list_size = qlist_size(hook->path_fragments);
|
||||||
if (list_size == qlist_size(uri_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_hook.data);
|
||||||
free(obj_uri.data);
|
free(obj_uri.data);
|
||||||
if (result == false)
|
if (result == false)
|
||||||
|
{
|
||||||
|
qlist_free(uri_fragments);
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
response->has_parameter = true;
|
response->has_parameter = true;
|
||||||
response->parameter_name = strdup(hook->parameter_name);
|
response->parameter_name = strdup(hook->parameter_name);
|
||||||
if (hook->action_name != NULL)
|
if (hook->action_name != NULL)
|
||||||
response->action = strdup(hook->action_name);
|
response->action = strdup(hook->action_name);
|
||||||
|
|
||||||
hook->cb(response, hook->userdata);
|
hook->cb(response, hook->userdata);
|
||||||
qlist_free(uri_fragments);
|
qlist_free(uri_fragments);
|
||||||
return true;
|
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 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);
|
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)
|
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;
|
devices_manager_t *dm = (devices_manager_t *)arg;
|
||||||
|
|
||||||
data = restd_http_get_body(response);
|
return create_device(response, dm, kOutletEntry);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
@@ -110,40 +86,17 @@ int outlet_create_handler(restd_resp_t *response, void *arg)
|
|||||||
int outlet_list_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;
|
devices_manager_t *dm = (devices_manager_t *)arg;
|
||||||
char *data;
|
|
||||||
|
|
||||||
data = devices_manager_get(dm, kOutletEntry);
|
return list_device(response, 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
int outlet_get_handler(restd_resp_t *response, void *arg)
|
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;
|
devices_manager_t *dm = (devices_manager_t *)arg;
|
||||||
|
|
||||||
if (response->has_parameter == false)
|
return get_device(response, dm, kOutletEntry);
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
@@ -168,24 +121,27 @@ int outlet_remove_handler(restd_resp_t *response, void *arg)
|
|||||||
|
|
||||||
int sprinkler_create_handler(restd_resp_t *response, void *arg)
|
int sprinkler_create_handler(restd_resp_t *response, void *arg)
|
||||||
{
|
{
|
||||||
#warning TODO
|
devices_manager_t *dm = (devices_manager_t *)arg;
|
||||||
return RESTD_OK;
|
|
||||||
|
return create_device(response, dm, kSprinklerEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
int sprinkler_list_handler(restd_resp_t *response, void *arg)
|
int sprinkler_list_handler(restd_resp_t *response, void *arg)
|
||||||
{
|
{
|
||||||
#warning TODO
|
devices_manager_t *dm = (devices_manager_t *)arg;
|
||||||
return RESTD_OK;
|
|
||||||
|
return list_device(response, dm, kSprinklerEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
int sprinkler_get_handler(restd_resp_t *response, void *arg)
|
int sprinkler_get_handler(restd_resp_t *response, void *arg)
|
||||||
{
|
{
|
||||||
#warning TODO
|
devices_manager_t *dm = (devices_manager_t *)arg;
|
||||||
return RESTD_OK;
|
|
||||||
|
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)
|
int shutter_create_handler(restd_resp_t *response, void *arg)
|
||||||
{
|
{
|
||||||
#warning TODO
|
devices_manager_t *dm = (devices_manager_t *)arg;
|
||||||
return RESTD_OK;
|
|
||||||
|
return create_device(response, dm, kShutterEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
int shutter_list_handler(restd_resp_t *response, void *arg)
|
int shutter_list_handler(restd_resp_t *response, void *arg)
|
||||||
{
|
{
|
||||||
#warning TODO
|
devices_manager_t *dm = (devices_manager_t *)arg;
|
||||||
return RESTD_OK;
|
|
||||||
|
return list_device(response, dm, kShutterEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
int shutter_get_handler(restd_resp_t *response, void *arg)
|
int shutter_get_handler(restd_resp_t *response, void *arg)
|
||||||
{
|
{
|
||||||
#warning TODO
|
devices_manager_t *dm = (devices_manager_t *)arg;
|
||||||
return RESTD_OK;
|
|
||||||
|
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);
|
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)
|
int remove_device(restd_resp_t *response, devices_manager_t *dm, const char *capability)
|
||||||
{
|
{
|
||||||
struct json_object *root_node = NULL;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (response->has_parameter == false)
|
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_outlet_list_empty "[ ]"
|
||||||
|
|
||||||
#define k_create_outlet_1 "{\"name\":\"outlet_1\", \"sender\": 12797322, \"switch\": 4}"
|
#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_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_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 }"
|
#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);
|
sleep(1);
|
||||||
|
|
||||||
// Outlets
|
|
||||||
|
|
||||||
// Get All Devices. Should be empty.
|
// Get All Devices. Should be empty.
|
||||||
ret = exec_request(kget_method, "http://localhost:" kserver_port "/api/v1/outlets", 200, "", k_outlet_list_empty, false);
|
ret = exec_request(kget_method, "http://localhost:" kserver_port "/api/v1/outlets", 200, "", k_outlet_list_empty, false);
|
||||||
ASSERT_EQUAL_INT(ret, 0);
|
ASSERT_EQUAL_INT(ret, 0);
|
||||||
@@ -180,3 +178,59 @@ TEST("Domo - Test API /api/v1/outlets - correct access\t")
|
|||||||
restd_server_free(rest_server);
|
restd_server_free(rest_server);
|
||||||
devices_manager_free(dm);
|
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