From c652d288e0503cb591dcd21466aee32939bc2642 Mon Sep 17 00:00:00 2001 From: NADAL Jean-Baptiste Date: Mon, 13 Jan 2020 18:31:48 +0100 Subject: [PATCH] rest test wip. --- src/tests/test_rest.c | 130 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 125 insertions(+), 5 deletions(-) diff --git a/src/tests/test_rest.c b/src/tests/test_rest.c index 4de7a53..42320c6 100644 --- a/src/tests/test_rest.c +++ b/src/tests/test_rest.c @@ -34,6 +34,95 @@ int my_test_handler(short event, restd_conn_t *conn, void *userdata) 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") { @@ -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_free(rest_server); } -TEST("Rest - create free\t") +/*--------------------------------------------------------------------------*/ + +TEST("Rest - create access regular route free\t") { 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_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/:id", my_test_handler, NULL); - 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, "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, "GET", "/api/v1/test", 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); }