summaryrefslogtreecommitdiff
path: root/test/query.c
diff options
context:
space:
mode:
authorJesper Jensen <jesper@slashwin.dk>2021-09-03 22:32:42 +0200
committerJesper Jensen <jesper@slashwin.dk>2021-09-03 22:32:42 +0200
commit9b4973e7d96a3605583c3f9a80567945c8d4be71 (patch)
tree3f17876a557a15ffe2a90591e157d1065a444a11 /test/query.c
parent5471d80c5350f764ec53733bae9d32c0a1a339e0 (diff)
Add ping support
Diffstat (limited to 'test/query.c')
-rw-r--r--test/query.c133
1 files changed, 133 insertions, 0 deletions
diff --git a/test/query.c b/test/query.c
new file mode 100644
index 0000000..cccb639
--- /dev/null
+++ b/test/query.c
@@ -0,0 +1,133 @@
+#include <unity.h>
+
+#include "query.h"
+
+#include <string.h>
+
+void test_malformed_empty() {
+ struct nodeid self = {.inner={0x0034048f, 0x08000020, 0x00888880, 0x02008460, 0x0ab00521}};
+ char* packet = "";
+ size_t packet_len = 0;
+
+ char response[1024];
+ char* response_cursor = response;
+ char* response_end = response + sizeof(response);
+
+ int rc = handle_request(&self, "ping", packet, packet_len, &response_cursor, response_end-response_cursor);
+
+ TEST_ASSERT_EQUAL(QUERY_EBADQ, rc);
+}
+
+void test_malformed_only_dict_start() {
+ struct nodeid self = {.inner={0x0034048f, 0x08000020, 0x00888880, 0x02008460, 0x0ab00521}};
+ char* packet = "d";
+ size_t packet_len = 1;
+
+ char response[1024];
+ char* response_cursor = response;
+ char* response_end = response + sizeof(response);
+
+ int rc = handle_request(&self, "ping", packet, packet_len, &response_cursor, response_end-response_cursor);
+
+ TEST_ASSERT_EQUAL(QUERY_EBADQ, rc);
+}
+
+void test_malformed_empty_args_key() {
+ struct nodeid self = {.inner={0x0034048f, 0x08000020, 0x00888880, 0x02008460, 0x0ab00521}};
+ char* packet = "d1:ae";
+ size_t packet_len = strlen(packet);
+
+ char response[1024];
+ char* response_cursor = response;
+ char* response_end = response + sizeof(response);
+
+ int rc = handle_request(&self, "ping", packet, packet_len, &response_cursor, response_end-response_cursor);
+
+ TEST_ASSERT_EQUAL(QUERY_EBADQ, rc);
+}
+
+void test_malformed_wrong_args_type() {
+ struct nodeid self = {.inner={0x0034048f, 0x08000020, 0x00888880, 0x02008460, 0x0ab00521}};
+ char* packet = "d1:a1:re";
+ size_t packet_len = strlen(packet);
+
+ char response[1024];
+ char* response_cursor = response;
+ char* response_end = response + sizeof(response);
+
+ int rc = handle_request(&self, "ping", packet, packet_len, &response_cursor, response_end-response_cursor);
+
+ TEST_ASSERT_EQUAL(QUERY_EBADQ, rc);
+}
+
+void test_malformed_empty_args() {
+ struct nodeid self = {.inner={0x0034048f, 0x08000020, 0x00888880, 0x02008460, 0x0ab00521}};
+ char* packet = "d1:adee";
+ size_t packet_len = strlen(packet);
+
+ char response[1024];
+ char* response_cursor = response;
+ char* response_end = response + sizeof(response);
+
+ int rc = handle_request(&self, "ping", packet, packet_len, &response_cursor, response_end-response_cursor);
+
+ TEST_ASSERT_EQUAL(QUERY_EBADQ, rc);
+}
+
+void test_malformed_wrong_id_arg_type() {
+ struct nodeid self = {.inner={0x0034048f, 0x08000020, 0x00888880, 0x02008460, 0x0ab00521}};
+ char* packet = "d1:ad2:idi1eee";
+ size_t packet_len = strlen(packet);
+
+ char response[1024];
+ char* response_cursor = response;
+ char* response_end = response + sizeof(response);
+
+ int rc = handle_request(&self, "ping", packet, packet_len, &response_cursor, response_end-response_cursor);
+
+ TEST_ASSERT_EQUAL(QUERY_EBADQ, rc);
+}
+
+void test_malformed_wrong_id_length() {
+ struct nodeid self = {.inner={0x0034048f, 0x08000020, 0x00888880, 0x02008460, 0x0ab00521}};
+ char* packet = "d1:ad2:id19:aaaaaaaaaaaaaaaaaaaee";
+ size_t packet_len = strlen(packet);
+
+ char response[1024];
+ char* response_cursor = response;
+ char* response_end = response + sizeof(response);
+
+ int rc = handle_request(&self, "ping", packet, packet_len, &response_cursor, response_end-response_cursor);
+
+ TEST_ASSERT_EQUAL(QUERY_EBADQ, rc);
+}
+
+void test_ping() {
+ struct nodeid self = {.inner_b={"aaaaaaaaaaaaaaaaaaab"}};
+ char* packet = "d1:ad2:id20:aaaaaaaaaaaaaaaaaaaaee";
+ size_t packet_len = strlen(packet);
+
+ char response[1024];
+ char* response_cursor = response;
+ char* response_end = response + sizeof(response);
+
+ int rc = handle_request(&self, "ping", packet, packet_len, &response_cursor, response_end-response_cursor);
+
+ TEST_ASSERT_EQUAL(0, rc);
+ TEST_ASSERT_EQUAL(30, response_cursor - response);
+ TEST_ASSERT_EQUAL_CHAR_ARRAY("d2:id20:aaaaaaaaaaaaaaaaaaabee", response, 30);
+}
+
+void test_bad_method() {
+ struct nodeid self = {.inner_b={"aaaaaaaaaaaaaaaaaaab"}};
+ char* packet = "de";
+ size_t packet_len = strlen(packet);
+
+ char response[1024];
+ char* response_cursor = response;
+ char* response_end = response + sizeof(response);
+
+ int rc = handle_request(&self, "someWrongMethod", packet, packet_len, &response_cursor, response_end-response_cursor);
+
+ TEST_ASSERT_EQUAL(QUERY_EUNK, rc);
+}