diff options
-rw-r--r-- | check/magma/servers/camel/camel_check.c | 34 | ||||
-rw-r--r-- | check/magma/servers/camel/camel_check.h | 3 | ||||
-rw-r--r-- | check/magma/servers/camel/camel_check_network.c | 56 | ||||
-rw-r--r-- | check/magma/servers/http/http_check.h | 2 | ||||
-rw-r--r-- | check/magma/servers/http/http_check_network.c | 17 |
5 files changed, 88 insertions, 24 deletions
diff --git a/check/magma/servers/camel/camel_check.c b/check/magma/servers/camel/camel_check.c index ded7334f..f7564d55 100644 --- a/check/magma/servers/camel/camel_check.c +++ b/check/magma/servers/camel/camel_check.c @@ -14,11 +14,11 @@ START_TEST (check_camel_login_s) { server_t *server = NULL; stringer_t *errmsg = MANAGEDBUF(1024); - if (status() && !(server = servers_get_by_protocol(HTTP, true))) { + if (status() && !(server = servers_get_by_protocol(HTTP, false))) { st_sprint(errmsg, "No HTTP servers were configured to support TLS connections."); outcome = false; } - else if (!(client = client_connect("localhost", server->network.port)) || (client_secure(client) == -1)) { + else if (!(client = client_connect("localhost", server->network.port))) { st_sprint(errmsg, "Failed to connect client securely to HTTP server."); outcome = false; @@ -35,11 +35,41 @@ START_TEST (check_camel_login_s) { } END_TEST +START_TEST (check_camel_basic_s) { + + log_disable(); + bool_t outcome = true; + client_t *client = NULL; + server_t *server = NULL; + stringer_t *errmsg = MANAGEDBUF(1024); + + if (status() && !(server = servers_get_by_protocol(HTTP, false))) { + st_sprint(errmsg, "No HTTP servers were configured to support TLS connections."); + outcome = false; + } + else if (!(client = client_connect("localhost", server->network.port))) { + + st_sprint(errmsg, "Failed to connect client securely to HTTP server."); + outcome = false; + } + else if (!check_camel_basic_sthread(client, errmsg)){ + outcome = false; + } + else { + errmsg = NULL; + } + + log_test("CAMEL / BASIC / SINGLE THREADED:", errmsg); + ck_assert_msg(outcome, st_char_get(errmsg)); +} +END_TEST + Suite * suite_check_camel(void) { Suite *s = suite_create("\tCAMEL"); suite_check_testcase(s, "CAMEL", "Camel Login/S", check_camel_login_s); + suite_check_testcase(s, "CAMEL", "Camel Basic/S", check_camel_basic_s); return s; } diff --git a/check/magma/servers/camel/camel_check.h b/check/magma/servers/camel/camel_check.h index fa4495dd..e0039098 100644 --- a/check/magma/servers/camel/camel_check.h +++ b/check/magma/servers/camel/camel_check.h @@ -9,9 +9,10 @@ /// camel_check_network.c bool_t check_camel_status(client_t *client); -bool_t check_camel_read_end(client_t *client); +stringer_t* check_camel_read_json(client_t *client, size_t length); bool_t check_camel_login(client_t *client, uint32_t id, chr_t *user, chr_t *pass, stringer_t *cookie); bool_t check_camel_login_sthread(client_t *client, stringer_t *errmsg); +bool_t check_camel_basic_sthread(client_t *client, stringer_t *errmsg); /// pop_check.c Suite * suite_check_camel(void); diff --git a/check/magma/servers/camel/camel_check_network.c b/check/magma/servers/camel/camel_check_network.c index 7e69e7dc..2f12a830 100644 --- a/check/magma/servers/camel/camel_check_network.c +++ b/check/magma/servers/camel/camel_check_network.c @@ -16,12 +16,18 @@ * @return True if the end of the HTTP response was reached, false if client_read_line reads * a 0 length line before the last line is reached. */ -bool_t check_camel_read_end(client_t *client) { +stringer_t* check_camel_read_json(client_t *client, size_t length) { - while (client_read_line(client) >= 0) { - if (st_cmp_cs_starts(&(client->line), NULLER("{\"jsonrpc\":\"2.0\",")) == 0) return true; - } - return false; + stringer_t *json = st_alloc(length); + + while (st_cmp_cs_eq(&(client->line), PLACER("\r\n", 2))) client_read_line(client); + recv(client->sockd, st_char_get(json), length, 0); + + chr_t *foo = st_char_get(json); + (void)foo; + + + return json; } /** @@ -38,7 +44,7 @@ bool_t check_camel_status(client_t *client) { if (client_read_line(client) <= 0) return false; } - return ((*(pl_char_get(client->line)+9) == '2') ? true : false); + return ((*(pl_char_get(client->line) + 9) == '2') ? true : false); } /** @@ -54,8 +60,9 @@ bool_t check_camel_status(client_t *client) { */ bool_t check_camel_login(client_t *client, uint32_t id, chr_t *user, chr_t *pass, stringer_t *cookie) { - uint32_t content_length = 62 + ns_length_get(user) + ns_length_get(pass) + uint32_digits(id); - chr_t *message = "POST /portal/camel HTTP/1.1\r\n" \ + size_t content_length = 0; + uint32_t length = 62 + ns_length_get(user) + ns_length_get(pass) + uint32_digits(id); + stringer_t *json = NULL, *message = "POST /portal/camel HTTP/1.1\r\n" \ "Host: localhost:10000\r\n" \ "Accept: */*\r\n" \ "Content-Length: %u\r\n" \ @@ -64,14 +71,17 @@ bool_t check_camel_login(client_t *client, uint32_t id, chr_t *user, chr_t *pass "{\"id\":%u,\"method\":\"auth\",\"params\":{\"username\":\"%s\",\"password\":\"%s\"}}\r\n" "\r\n"; - if (client_print(client, message, content_length, id, user, pass) != (ns_length_get(message) + uint32_digits(id) + ns_length_get(user) + ns_length_get(pass)) || client_status(client) != 1 || !check_camel_status(client) || - !check_camel_read_end(client)) { + if (client_print(client, message, length, id, user, pass) != ((ns_length_get(message) - 8) + uint32_digits(length) + + uint32_digits(id) + ns_length_get(user) + ns_length_get(pass)) || client_status(client) != 1 || !check_camel_status(client) || + !(content_length = check_http_content_length_get(client)) || !(json = check_camel_read_json(client, content_length))) { return false; } - chr_t *foo = pl_char_get(client->line); + chr_t *foo = st_char_get(json); (void)foo; + st_free(json); + return true; } @@ -87,3 +97,27 @@ bool_t check_camel_login_sthread(client_t *client, stringer_t *errmsg) { return true; } + +bool_t check_camel_basic_sthread(client_t *client, stringer_t *errmsg) { + +// chr_t *commands = { +// "{\"id\":%u,\"method\":\"config.edit\",\"params\":{\"key\":\"value\"}}", +// "{\"id\":%u,\"method\":\"config.load\"}", +// "{\"id\":%u,\"method\":\"config.edit\",\"params\":{\"key\":null}}", +// "{\"id\":%u,\"method\":\"folders.add\",\"params\":{\"context\":\"contacts\",\"name\":\"Flight Crew\"}}", +// "{\"id\":%u,\"method\":\"folders.list\",\"params\":{\"context\":\"contacts\"}}", +// "{\"id\":%u,\"method\":\"cookies\"}", +// "{\"id\":%u,\"method\":\"alert.list\"}", +// "{\"id\":%u,\"method\":\"alert.acknowledge\",\"params\":[1,7,13]}", +// "{\"id\":%u,\"method\":\"folders.rename\",\"params\":{\"context\":\"contacts\",\"folderID\":1,\"name\"Camel\"}}", +// "{\"id\":%u,\"method\":\"folders.remove\",\"params\":{\"context\":\"contacts\",\"folderID\":1}}", +// }; +// +// for (size_t i = 0; i < sizeof(commands)/sizeof(chr_t*); i++) { +// if (client_print(commands[i], i) != ns_length_get(commands[i]) - 2 + uint32_digits(i)) { +// +// } +// } + + return true; +} diff --git a/check/magma/servers/http/http_check.h b/check/magma/servers/http/http_check.h index 261859d3..ee6cd2dd 100644 --- a/check/magma/servers/http/http_check.h +++ b/check/magma/servers/http/http_check.h @@ -9,7 +9,7 @@ /// http_check_network.c bool_t check_http_read_to_empty(client_t *client); -uint32_t check_http_content_length_get(client_t *client, stringer_t *errmsg); +size_t check_http_content_length_get(client_t *client); bool_t check_http_content_length_test(client_t *client, uint32_t content_length, stringer_t *errmsg); bool_t check_http_network_basic_sthread(stringer_t *errmsg, uint32_t port, bool_t secure); bool_t check_http_network_options_sthread(stringer_t *errmsg, uint32_t port, bool_t secure); diff --git a/check/magma/servers/http/http_check_network.c b/check/magma/servers/http/http_check_network.c index 5675d664..2b1e891c 100644 --- a/check/magma/servers/http/http_check_network.c +++ b/check/magma/servers/http/http_check_network.c @@ -30,25 +30,24 @@ bool_t check_http_read_to_empty(client_t *client) { * @param client A client_t containing the response of an HTTP request. * @return The value of Content-Length in the HTTP message header. */ -uint32_t check_http_content_length_get(client_t *client, stringer_t *errmsg) { +size_t check_http_content_length_get(client_t *client) { - size_t location = 0; - uint32_t content_length; + size_t location = 0, content_length; placer_t cl_placer = pl_null(); while (st_cmp_ci_starts(&(client->line), NULLER("Content-Length:")) != 0) client_read_line(client); if (!st_search_chr(&(client->line), ' ', &location)) { - st_sprint(errmsg, "The Content-Length line was improperly formed."); + //st_sprint(errmsg, "The Content-Length line was improperly formed."); } else if (pl_empty(cl_placer = pl_init(pl_data_get(client->line) + location, pl_length_get(client->line) - location))) { - st_sprint(errmsg, "Failed to initialize content length placer."); + //st_sprint(errmsg, "Failed to initialize content length placer."); } else if (!pl_inc(&cl_placer, pl_length_get(client->line) - location) || !(cl_placer.length = pl_length_get(cl_placer)-2)) { - st_sprint(errmsg, "Failed to increment placer to location of content-length value."); + //st_sprint(errmsg, "Failed to increment placer to location of content-length value."); } - else if (!uint32_conv_st(&cl_placer, &content_length)) { - st_sprint(errmsg, "Failed to convert the content-length string to a uint32"); + else if (!size_conv_bl(pl_char_get(cl_placer), pl_length_get(cl_placer), &content_length)) { + //st_sprint(errmsg, "Failed to convert the content-length string to a uint32"); } return content_length; @@ -118,7 +117,7 @@ bool_t check_http_network_basic_sthread(stringer_t *errmsg, uint32_t port, bool_ } // Test submitting a GET request. else if (client_write(client, PLACER("GET / HTTP/1.1\r\nHost: localhost\r\n\r\n", 35)) != 35 || - client_status(client) != 1 || !(content_length = check_http_content_length_get(client, errmsg))) { + client_status(client) != 1 || !(content_length = check_http_content_length_get(client))) { if (st_empty(errmsg)) st_sprint(errmsg, "Failed to return a valid GET response."); client_close(client); return false; |