diff options
author | jpadkins <jacobpadkins@gmail.com> | 2017-03-23 13:46:51 +0300 |
---|---|---|
committer | jpadkins <jacobpadkins@gmail.com> | 2017-03-23 13:46:51 +0300 |
commit | c0675bbc5e8f1d455c1b5be795f7ec6d92c138ec (patch) | |
tree | d7a6f03657a45f471b72a2183e3807e28f3cae02 | |
parent | 3e545682caa748b2163ed7e57d492eab4e86f27f (diff) |
Fixed POP LIST test and added IMAP fetch and search stubs
-rw-r--r-- | check/magma/servers/http/http_check_network.c | 2 | ||||
-rw-r--r-- | check/magma/servers/imap/imap_check.c | 48 | ||||
-rw-r--r-- | check/magma/servers/imap/imap_check.h | 4 | ||||
-rw-r--r-- | check/magma/servers/imap/imap_check_network.c | 13 | ||||
-rw-r--r-- | check/magma/servers/pop/pop_check.c | 4 | ||||
-rw-r--r-- | check/magma/servers/pop/pop_check.h | 3 | ||||
-rw-r--r-- | check/magma/servers/pop/pop_check_network.c | 70 |
7 files changed, 133 insertions, 11 deletions
diff --git a/check/magma/servers/http/http_check_network.c b/check/magma/servers/http/http_check_network.c index bb996427..496e86c4 100644 --- a/check/magma/servers/http/http_check_network.c +++ b/check/magma/servers/http/http_check_network.c @@ -39,7 +39,7 @@ uint32_t check_http_content_length_get(client_t *client, stringer_t *errmsg) { 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 is 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."); diff --git a/check/magma/servers/imap/imap_check.c b/check/magma/servers/imap/imap_check.c index d0a5e271..23e272d0 100644 --- a/check/magma/servers/imap/imap_check.c +++ b/check/magma/servers/imap/imap_check.c @@ -52,12 +52,60 @@ START_TEST (check_imap_network_basic_tls_s) { } END_TEST +START_TEST (check_imap_network_search_s) { + + log_disable(); + bool_t outcome = true; + server_t *server = NULL; + stringer_t *errmsg = MANAGEDBUF(1024); + + if (!(server = servers_get_by_protocol(IMAP, false))) { + st_sprint(errmsg, "No IMAP servers were configured to support TCP connections."); + outcome = false; + } + else if (status() && !check_imap_network_search_sthread(errmsg, server->network.port)) { + outcome = false; + } + else { + errmsg = NULL; + } + + log_test("IMAP / NETWORK / SEARCH / SINGLE THREADED:", errmsg); + ck_assert_msg(outcome, st_char_get(errmsg)); +} +END_TEST + +START_TEST (check_imap_network_fetch_s) { + + log_disable(); + bool_t outcome = true; + server_t *server = NULL; + stringer_t *errmsg = MANAGEDBUF(1024); + + if (!(server = servers_get_by_protocol(IMAP, false))) { + st_sprint(errmsg, "No IMAP servers were configured to support TCP connections."); + outcome = false; + } + else if (status() && !check_imap_network_fetch_sthread(errmsg, server->network.port)) { + outcome = false; + } + else { + errmsg = NULL; + } + + log_test("IMAP / NETWORK / FETCH / SINGLE THREADED:", errmsg); + ck_assert_msg(outcome, st_char_get(errmsg)); +} +END_TEST + Suite * suite_check_imap(void) { Suite *s = suite_create("\tIMAP"); suite_check_testcase(s, "IMAP", "IMAP Network Basic/ TCP/S", check_imap_network_basic_tcp_s); suite_check_testcase(s, "IMAP", "IMAP Network Basic/ TLS/S", check_imap_network_basic_tls_s); + suite_check_testcase(s, "IMAP", "IMAP Network Search/S", check_imap_network_search_s); + suite_check_testcase(s, "IMAP", "IMAP Network Fetch/S", check_imap_network_fetch_s); return s; } diff --git a/check/magma/servers/imap/imap_check.h b/check/magma/servers/imap/imap_check.h index 21140d39..6e8dcf09 100644 --- a/check/magma/servers/imap/imap_check.h +++ b/check/magma/servers/imap/imap_check.h @@ -8,8 +8,10 @@ #define IMAP_CHECK_H /// imap_check_network.c -bool_t check_imap_client_read_lines_to_end(client_t *client, chr_t *tag); +bool_t check_imap_client_read_end(client_t *client, chr_t *tag); bool_t check_imap_network_basic_sthread(stringer_t *errmsg, uint32_t port, bool_t secure); +bool_t check_imap_network_search_sthread(stringer_t *errmsg, uint32_t port); +bool_t check_imap_network_fetch_sthread(stringer_t *errmsg, uint32_t port); Suite * suite_check_imap(void); diff --git a/check/magma/servers/imap/imap_check_network.c b/check/magma/servers/imap/imap_check_network.c index 3954f7a8..ca690cda 100644 --- a/check/magma/servers/imap/imap_check_network.c +++ b/check/magma/servers/imap/imap_check_network.c @@ -93,3 +93,16 @@ bool_t check_imap_network_basic_sthread(stringer_t *errmsg, uint32_t port, bool_ return true; } + + +bool_t check_imap_network_search_sthread(stringer_t *errmsg, uint32_t port) { + + bool_t outcome = true; + return outcome; +} + +bool_t check_imap_network_fetch_sthread(stringer_t *errmsg, uint32_t port) { + + bool_t outcome = true; + return outcome; +} diff --git a/check/magma/servers/pop/pop_check.c b/check/magma/servers/pop/pop_check.c index 274b063f..ce2b258b 100644 --- a/check/magma/servers/pop/pop_check.c +++ b/check/magma/servers/pop/pop_check.c @@ -9,8 +9,8 @@ START_TEST (check_pop_network_basic_tcp_s) { log_disable(); - bool_t outcome = true; server_t *tcp = NULL; + bool_t outcome = true; stringer_t *errmsg = MANAGEDBUF(1024); if (status() && !(tcp = servers_get_by_protocol(POP, false))) { @@ -30,8 +30,8 @@ END_TEST START_TEST (check_pop_network_basic_tls_s) { log_disable(); - bool_t outcome = true; server_t *tls = NULL; + bool_t outcome = true; stringer_t *errmsg = MANAGEDBUF(1024); if (status() && !(tls = servers_get_by_protocol(POP, true))) { diff --git a/check/magma/servers/pop/pop_check.h b/check/magma/servers/pop/pop_check.h index dbc09d6c..003e13aa 100644 --- a/check/magma/servers/pop/pop_check.h +++ b/check/magma/servers/pop/pop_check.h @@ -8,7 +8,8 @@ #define POP_CHECK_H /// pop_check_network.c -bool_t check_pop_client_read_lines_to_end(client_t *client); +bool_t check_pop_client_read_end(client_t *client); +uint64_t check_pop_client_read_list(client_t *client, stringer_t *errmsg); bool_t check_pop_network_basic_sthread(stringer_t *errmsg, uint32_t port, bool_t secure); /// pop_check.c diff --git a/check/magma/servers/pop/pop_check_network.c b/check/magma/servers/pop/pop_check_network.c index f4d19690..4c07e3d7 100644 --- a/check/magma/servers/pop/pop_check_network.c +++ b/check/magma/servers/pop/pop_check_network.c @@ -9,12 +9,13 @@ #include "magma_check.h" /** - * Calls client_read_line on a client until it reaches a period only line. + * Calls client_read_line on a client until it reaches a period only line, returning the + * number of messages in the inbox. * - * @param client The client to read from (which should be connected to a POP server). + * @param client The client_t* to read from (which should be connected to a POP server). * @return true if a line containing a single period is found, false if not. */ -bool_t check_pop_client_read_lines_to_end(client_t *client) { +bool_t check_pop_client_read_end(client_t *client) { while (client_read_line(client) > 0) { if (!st_cmp_cs_eq(&(client->line), NULLER(".\r\n"))) return true; @@ -22,8 +23,37 @@ bool_t check_pop_client_read_lines_to_end(client_t *client) { return false; } +/** + * Calls client_read_line on a client until it reaches a period only line, returning the + * number of messages in the inbox. + * + * @param client The client_t* to read from (which should be connected to a POP server). + * @param errmsg The stringer_t* to which error messages will be printed in event of an error. + * @return a uint32_t containing the number of messages in the inbox. + */ +uint64_t check_pop_client_read_list(client_t *client, stringer_t *errmsg) { + + placer_t fragment = pl_null(); + uint64_t counter = 0, sequence = 0; + + while (client_read_line(client) > 0) { + + if (pl_starts_with_char(client->line, '.')) { + return counter; + } + else if (tok_get_st(&(client->line), ' ', 0, &fragment) >= 0 && !uint64_conv_pl(fragment, &sequence)) { + if (sequence != counter) return 0; + } + + counter++; + } + + return 0; +} + bool_t check_pop_network_basic_sthread(stringer_t *errmsg, uint32_t port, bool_t secure) { + uint64_t message_num; client_t *client = NULL; // Connect the client. @@ -69,16 +99,16 @@ bool_t check_pop_network_basic_sthread(stringer_t *errmsg, uint32_t port, bool_t } // Test the LIST command. - else if (client_print(client, "LIST\r\n") != 6 || !check_pop_client_read_lines_to_end(client) || + else if (client_print(client, "LIST\r\n") != 6 || !(message_num = check_pop_client_read_list(client, errmsg)) || client_status(client) != 1) { - st_sprint(errmsg, "Failed to return a successful state after LIST."); + if (!errmsg) st_sprint(errmsg, "Failed to return a successful state after LIST."); client_close(client); return false; } // Test the RETR command. - else if (client_print(client, "RETR 1\r\n") != 8 || !check_pop_client_read_lines_to_end(client) || + else if (client_print(client, "RETR 1\r\n") != 8 || !check_pop_client_read_end(client) || client_status(client) != 1) { st_sprint(errmsg, "Failed to return a successful state after RETR."); @@ -95,6 +125,34 @@ bool_t check_pop_network_basic_sthread(stringer_t *errmsg, uint32_t port, bool_t return false; } + // Test the NOOP command. + else if (client_print(client, "NOOP\r\n") != 6 || client_read_line(client) <= 0 || client_status(client) != 1 || + st_cmp_cs_starts(&(client->line), NULLER("+OK"))) { + + st_sprint(errmsg, "Failed to return a successful state after NOOP."); + client_close(client); + return false; + } + + // Test the LAST command. + else if (client_print(client, "LAST 1\r\n") != 8 || client_read_line(client) <= 0 || client_status(client) != 1 || + st_cmp_cs_starts(&(client->line), NULLER("+OK")) || st_cmp_cs_ends(&(client->line), + st_aprint_opts(MANAGED_T | CONTIGUOUS | STACK, "%lu\r\n", message_num))) { + + st_sprint(errmsg, "Failed to return a successful state after LAST."); + client_close(client); + return false; + } + + // Test the RSET command. + else if (client_print(client, "RSET\r\n") != 6 || client_read_line(client) <= 0 || client_status(client) != 1 || + st_cmp_cs_starts(&(client->line), NULLER("+OK")) || st_cmp_cs_ends(&(client->line), NULLER("were reset.\r\n"))) { + + st_sprint(errmsg, "Failed to return a successful state after RSET."); + client_close(client); + return false; + } + // Test the QUIT command. else if (client_print(client, "QUIT 1\r\n") <= 0 || client_read_line(client) <= 0 || client_status(client) != 1 || st_cmp_cs_starts(&(client->line), NULLER("+OK"))) { |