This commit is contained in:
@@ -34,6 +34,95 @@ int my_test_handler(short event, restd_conn_t *conn, void *userdata)
|
|||||||
return RESTD_CLOSE; // Close connection.
|
return RESTD_CLOSE; // Close connection.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
bool found_route(restd_server_t *server, const char *method, const char *path)
|
||||||
|
{
|
||||||
|
qlist_t *hooks = server->hooks;
|
||||||
|
|
||||||
|
qlist_obj_t obj;
|
||||||
|
bzero((void *)&obj, sizeof(qlist_obj_t));
|
||||||
|
while (hooks->getnext(hooks, &obj, false) == true)
|
||||||
|
{
|
||||||
|
restd_hook_t *hook = (restd_hook_t *)obj.data;
|
||||||
|
if (hook->method && method && strcmp(hook->method, method)==0)
|
||||||
|
{
|
||||||
|
if (hook->path && path && strcmp(hook->path, path)==0)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
bool contain (const char *src, const char *dest, int len)
|
||||||
|
{
|
||||||
|
int len_src, len_dest;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
len_src = strlen(src);
|
||||||
|
if (len_src < len)
|
||||||
|
return false;
|
||||||
|
len_dest = strlen(dest);
|
||||||
|
if (len_dest < len)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
while (i < len)
|
||||||
|
{
|
||||||
|
if (src[i] != dest[i])
|
||||||
|
return false;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
bool found_special_route(restd_server_t *server, const char *method, const char *path, int *id)
|
||||||
|
{
|
||||||
|
qlist_t *hooks = server->hooks;
|
||||||
|
|
||||||
|
qlist_obj_t obj;
|
||||||
|
bzero((void *)&obj, sizeof(qlist_obj_t));
|
||||||
|
while (hooks->getnext(hooks, &obj, false) == true)
|
||||||
|
{
|
||||||
|
restd_hook_t *hook = (restd_hook_t *)obj.data;
|
||||||
|
if (hook->method && method && strcmp(hook->method, method)==0)
|
||||||
|
{
|
||||||
|
if (hook->path && path)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
int pos = -1;
|
||||||
|
while (hook->path[i])
|
||||||
|
{
|
||||||
|
if (hook->path[i] == ':')
|
||||||
|
pos = i;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
printf("pos: %d\n", pos);
|
||||||
|
printf("contain: %s\n", contain(hook->path, path, pos)?"TRUE":"FALSE");
|
||||||
|
if ( pos != -1 && contain(hook->path, path, pos))
|
||||||
|
{
|
||||||
|
const char *buffer = &path[i];
|
||||||
|
printf("buffer: %s\n", buffer);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (strcmp(hook->path, path)==0)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
TEST("Rest - create free\t")
|
TEST("Rest - create free\t")
|
||||||
{
|
{
|
||||||
@@ -46,11 +135,12 @@ TEST("Rest - create free\t")
|
|||||||
|
|
||||||
restd_server_register_hook_on_path(rest_server, "POST", "/api/v1/test", my_test_handler, NULL);
|
restd_server_register_hook_on_path(rest_server, "POST", "/api/v1/test", my_test_handler, NULL);
|
||||||
|
|
||||||
|
|
||||||
restd_server_free(rest_server);
|
restd_server_free(rest_server);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST("Rest - create free\t")
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
TEST("Rest - create access regular route free\t")
|
||||||
{
|
{
|
||||||
restd_server_t *rest_server;
|
restd_server_t *rest_server;
|
||||||
|
|
||||||
@@ -60,11 +150,41 @@ TEST("Rest - create free\t")
|
|||||||
restd_server_set_option(rest_server, "server.port", "7777");
|
restd_server_set_option(rest_server, "server.port", "7777");
|
||||||
|
|
||||||
restd_server_register_hook_on_path(rest_server, "POST", "/api/v1/test", my_test_handler, NULL);
|
restd_server_register_hook_on_path(rest_server, "POST", "/api/v1/test", my_test_handler, NULL);
|
||||||
|
|
||||||
|
ASSERT_TRUE(found_route(rest_server, "POST", "/api/v1/test"));
|
||||||
|
ASSERT_FALSE(found_route(rest_server, "POST", "/api/v1/notfound"));
|
||||||
|
|
||||||
restd_server_register_hook_on_path(rest_server, "GET", "/api/v1/test", my_test_handler, NULL);
|
restd_server_register_hook_on_path(rest_server, "GET", "/api/v1/test", my_test_handler, NULL);
|
||||||
restd_server_register_hook_on_path(rest_server, "GET", "/api/v1/test/:id", my_test_handler, NULL);
|
ASSERT_TRUE(found_route(rest_server, "GET", "/api/v1/test"));
|
||||||
restd_server_register_hook_on_path(rest_server, "PUT", "/api/v1/test/:id", my_test_handler, NULL);
|
restd_server_register_hook_on_path(rest_server, "GET", "/api/v1/test", my_test_handler, NULL);
|
||||||
restd_server_register_hook_on_path(rest_server, "DELETE", "/api/v1/test/:id", my_test_handler, NULL);
|
ASSERT_TRUE(found_route(rest_server, "GET", "/api/v1/test"));
|
||||||
|
|
||||||
|
restd_server_register_hook_on_path(rest_server, "PUT", "/api/v1/test", my_test_handler, NULL);
|
||||||
|
ASSERT_TRUE(found_route(rest_server, "PUT", "/api/v1/test"));
|
||||||
|
|
||||||
|
restd_server_register_hook_on_path(rest_server, "DELETE", "/api/v1/test", my_test_handler, NULL);
|
||||||
|
ASSERT_TRUE(found_route(rest_server, "DELETE", "/api/v1/test"));
|
||||||
|
|
||||||
|
restd_server_free(rest_server);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
TEST("Rest - create access regex route free\t")
|
||||||
|
{
|
||||||
|
restd_server_t *rest_server;
|
||||||
|
int id = 0;
|
||||||
|
rest_server = restd_server_new();
|
||||||
|
ASSERT_NOT_NULL(rest_server);
|
||||||
|
|
||||||
|
restd_server_register_hook_on_path(rest_server, "GET", "/api/v1/klong/:id", my_test_handler, NULL);
|
||||||
|
restd_server_register_hook_on_path(rest_server, "GET", "/api/v1/donkey", my_test_handler, NULL);
|
||||||
|
restd_server_register_hook_on_path(rest_server, "GET", "/api/v1/test/:id", my_test_handler, NULL);
|
||||||
|
|
||||||
|
ASSERT_FALSE(found_special_route(rest_server, "GET", "/api/v1/notfound/77", &id));
|
||||||
|
|
||||||
|
ASSERT_TRUE(found_special_route(rest_server, "GET", "/api/v1/test/77", &id));
|
||||||
|
ASSERT_EQUAL_INT(id, 77);
|
||||||
|
|
||||||
restd_server_free(rest_server);
|
restd_server_free(rest_server);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user