Prechádzať zdrojové kódy

Add some unit tests for encoding

bel 10 rokov pred
rodič
commit
a77a97ec6c
1 zmenil súbory, kde vykonal 119 pridanie a 9 odobranie
  1. 119 9
      test/private.c

+ 119 - 9
test/private.c

@@ -40,9 +40,9 @@
 
 START_TEST(test_parse_http_message)
 {
-    /* Adapted from unit_test.c */
-    /* Copyright (c) 2013-2015 the Civetweb developers */
-    /* Copyright (c) 2004-2013 Sergey Lyubka */
+	/* Adapted from unit_test.c */
+	/* Copyright (c) 2013-2015 the Civetweb developers */
+	/* Copyright (c) 2004-2013 Sergey Lyubka */
 	struct mg_request_info ri;
 	char empty[] = "";
 	char req1[] = "GET / HTTP/1.1\r\n\r\n";
@@ -92,11 +92,57 @@ START_TEST(test_parse_http_message)
 END_TEST
 
 
+START_TEST(test_should_keep_alive)
+{
+	/* Adapted from unit_test.c */
+	/* Copyright (c) 2013-2015 the Civetweb developers */
+	/* Copyright (c) 2004-2013 Sergey Lyubka */
+	struct mg_connection conn;
+	struct mg_context ctx;
+	char req1[] = "GET / HTTP/1.1\r\n\r\n";
+	char req2[] = "GET / HTTP/1.0\r\n\r\n";
+	char req3[] = "GET / HTTP/1.1\r\nConnection: close\r\n\r\n";
+	char req4[] = "GET / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n";
+
+	memset(&conn, 0, sizeof(conn));
+	conn.ctx = &ctx;
+	ck_assert_int_eq(parse_http_message(req1, sizeof(req1), &conn.request_info),
+	                 sizeof(req1) - 1);
+
+	ctx.config[ENABLE_KEEP_ALIVE] = "no";
+	ck_assert_int_eq(should_keep_alive(&conn), 0);
+
+	ctx.config[ENABLE_KEEP_ALIVE] = "yes";
+	ck_assert_int_eq(should_keep_alive(&conn), 1);
+
+	conn.must_close = 1;
+	ck_assert_int_eq(should_keep_alive(&conn), 0);
+
+	conn.must_close = 0;
+	parse_http_message(req2, sizeof(req2), &conn.request_info);
+	ck_assert_int_eq(should_keep_alive(&conn), 0);
+
+	parse_http_message(req3, sizeof(req3), &conn.request_info);
+	ck_assert_int_eq(should_keep_alive(&conn), 0);
+
+	parse_http_message(req4, sizeof(req4), &conn.request_info);
+	ck_assert_int_eq(should_keep_alive(&conn), 1);
+
+	conn.status_code = 401;
+	ck_assert_int_eq(should_keep_alive(&conn), 0);
+
+	conn.status_code = 200;
+	conn.must_close = 1;
+	ck_assert_int_eq(should_keep_alive(&conn), 0);
+}
+END_TEST
+
+
 START_TEST(test_match_prefix)
 {
-    /* Adapted from unit_test.c */
-    /* Copyright (c) 2013-2015 the Civetweb developers */
-    /* Copyright (c) 2004-2013 Sergey Lyubka */
+	/* Adapted from unit_test.c */
+	/* Copyright (c) 2013-2015 the Civetweb developers */
+	/* Copyright (c) 2004-2013 Sergey Lyubka */
 	ck_assert_int_eq(4, match_prefix("/api", 4, "/api"));
 	ck_assert_int_eq(3, match_prefix("/a/", 3, "/a/b/c"));
 	ck_assert_int_eq(-1, match_prefix("/a/", 3, "/ab/c"));
@@ -131,9 +177,9 @@ END_TEST
 
 START_TEST(test_remove_double_dots_and_double_slashes)
 {
-    /* Adapted from unit_test.c */
-    /* Copyright (c) 2013-2015 the Civetweb developers */
-    /* Copyright (c) 2004-2013 Sergey Lyubka */
+	/* Adapted from unit_test.c */
+	/* Copyright (c) 2013-2015 the Civetweb developers */
+	/* Copyright (c) 2004-2013 Sergey Lyubka */
 	struct {
 		char before[20], after[20];
 	} data[] = {
@@ -168,6 +214,64 @@ START_TEST(test_is_valid_uri)
 END_TEST
 
 
+START_TEST(test_base64_encode_decode)
+{
+	char buf[64];
+	const char *alpha = "abcdefghijklmnopqrstuvwxyz";
+	const char *enc = "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=";
+	int ret;
+	size_t len;
+
+#if defined(USE_WEBSOCKET) || defined(USE_LUA)
+	memset(buf, 77, sizeof(buf));
+	base64_encode("a", 1, buf);
+	ck_assert_str_eq(buf, "YQ==");
+
+	memset(buf, 77, sizeof(buf));
+	base64_encode("ab", 1, buf);
+	ck_assert_str_eq(buf, "YQ==");
+
+	memset(buf, 77, sizeof(buf));
+	base64_encode("ab", 2, buf);
+	ck_assert_str_eq(buf, "YWI=");
+
+	memset(buf, 77, sizeof(buf));
+	base64_encode(alpha, 3, buf);
+	ck_assert_str_eq(buf, "YWJj");
+
+	memset(buf, 77, sizeof(buf));
+	base64_encode(alpha, 4, buf);
+	ck_assert_str_eq(buf, "YWJjZA==");
+
+	memset(buf, 77, sizeof(buf));
+	base64_encode(alpha, 5, buf);
+	ck_assert_str_eq(buf, "YWJjZGU=");
+
+	memset(buf, 77, sizeof(buf));
+	base64_encode(alpha, 6, buf);
+	ck_assert_str_eq(buf, "YWJjZGVm");
+
+	memset(buf, 77, sizeof(buf));
+	base64_encode(alpha, strlen(alpha), buf);
+	ck_assert_str_eq(buf, enc;
+#endif
+
+#if defined(USE_LUA)
+    memset(buf, 77, sizeof(buf));
+    len = 9999;
+    ret = base64_decode(enc, strlen(enc), buf, &len);
+    ck_assert_int_eq(ret, -1);
+    ck_assert_uint_eq((unsigned int)len, (unsigned int)strlen(alpha));
+    ck_assert_str_eq(buf, alpha);
+
+    memset(buf, 77, sizeof(buf));
+    len = 9999;
+    ret = base64_decode("AAA*AAA", 7, buf, &len);
+    ck_assert_int_eq(ret, 3);
+#endif
+}
+
+
 Suite *make_private_suite(void)
 {
 
@@ -175,8 +279,10 @@ Suite *make_private_suite(void)
 
 	TCase *const http_message = tcase_create("HTTP Message");
 	TCase *const url_parsing = tcase_create("URL Parsing");
+	TCase *const encode_decode = tcase_create("Encode Decode");
 
 	tcase_add_test(http_message, test_parse_http_message);
+	tcase_add_test(http_message, test_should_keep_alive);
 	suite_add_tcase(suite, http_message);
 
 	tcase_add_test(url_parsing, test_match_prefix);
@@ -184,5 +290,9 @@ Suite *make_private_suite(void)
 	tcase_add_test(url_parsing, test_is_valid_uri);
 	suite_add_tcase(suite, url_parsing);
 
+	tcase_add_test(encode_decode, test_base64_encode_decode);
+	suite_add_tcase(suite, encode_decode);
+
+
 	return suite;
 }