#include "response.h" #include #include Y_UNIT_TEST_SUITE(TestHttpResponse) { Y_UNIT_TEST(TestCodeOnly) { UNIT_ASSERT_STRINGS_EQUAL(ToString(THttpResponse()), "HTTP/1.1 200 Ok\r\n\r\n"); UNIT_ASSERT_STRINGS_EQUAL(ToString(THttpResponse(HTTP_NOT_FOUND)), "HTTP/1.1 404 Not found\r\n\r\n"); } Y_UNIT_TEST(TestRedirect) { THttpResponse resp = THttpResponse(HTTP_FOUND).AddHeader("Location", "yandex.ru"); UNIT_ASSERT_STRINGS_EQUAL(ToString(resp), "HTTP/1.1 302 Moved temporarily\r\n" "Location: yandex.ru\r\n" "\r\n"); } Y_UNIT_TEST(TestAddHeader) { THttpResponse resp(HTTP_FORBIDDEN); resp.AddHeader(THttpInputHeader("X-Header-1", "ValueOne")); resp.AddHeader("X-Header-2", 10); resp.AddHeader("X-Header-3", true); const char* EXPECTED = "HTTP/1.1 403 Forbidden\r\n" "X-Header-1: ValueOne\r\n" "X-Header-2: 10\r\n" "X-Header-3: 1\r\n" "\r\n"; UNIT_ASSERT_STRINGS_EQUAL(ToString(resp), EXPECTED); } Y_UNIT_TEST(TestAddMultipleHeaders) { THttpHeaders headers; headers.AddHeader(THttpInputHeader("X-Header-1", "ValueOne")); headers.AddHeader(THttpInputHeader("X-Header-2", "ValueTwo")); headers.AddHeader(THttpInputHeader("X-Header-3", "ValueThree")); const char* EXPECTED = "HTTP/1.1 403 Forbidden\r\n" "X-Header-1: ValueOne\r\n" "X-Header-2: ValueTwo\r\n" "X-Header-3: ValueThree\r\n" "\r\n"; UNIT_ASSERT_STRINGS_EQUAL(ToString(THttpResponse(HTTP_FORBIDDEN).AddMultipleHeaders(headers)), EXPECTED); } Y_UNIT_TEST(TestGetHeaders) { THttpResponse resp(HTTP_FORBIDDEN); THttpHeaders headers; headers.AddHeader(THttpInputHeader("X-Header-1", "ValueOne")); headers.AddHeader(THttpInputHeader("X-Header-2", "ValueTwo")); headers.AddHeader(THttpInputHeader("X-Header-3", "ValueThree")); resp.AddMultipleHeaders(headers); resp.AddHeader("X-Header-4", "ValueFour"); const THttpHeaders& gotHeaders = resp.GetHeaders(); UNIT_ASSERT_VALUES_EQUAL(gotHeaders.Count(), 4); UNIT_ASSERT(gotHeaders.HasHeader("X-Header-1")); UNIT_ASSERT_STRINGS_EQUAL(gotHeaders.FindHeader("X-Header-1")->Value(), "ValueOne"); UNIT_ASSERT(gotHeaders.HasHeader("X-Header-4")); UNIT_ASSERT_STRINGS_EQUAL(gotHeaders.FindHeader("X-Header-4")->Value(), "ValueFour"); } Y_UNIT_TEST(TestSetContent) { const char* EXPECTED = "HTTP/1.1 200 Ok\r\n" "Content-Length: 10\r\n" "\r\n" "0123456789"; UNIT_ASSERT_STRINGS_EQUAL(ToString(THttpResponse().SetContent("0123456789")), EXPECTED); } Y_UNIT_TEST(TestSetContentWithContentType) { const char* EXPECTED = "HTTP/1.1 200 Ok\r\n" "Content-Type: text/xml\r\n" "Content-Length: 28\r\n" "\r\n" ""; THttpResponse resp; resp.SetContent("").SetContentType("text/xml"); UNIT_ASSERT_STRINGS_EQUAL(ToString(resp), EXPECTED); } Y_UNIT_TEST(TestCopyConstructor) { THttpResponse resp(HTTP_FORBIDDEN); resp.AddHeader(THttpInputHeader("X-Header-1", "ValueOne")) .AddHeader("X-Header-2", "ValueTwo") .AddHeader(THttpInputHeader("X-Header-3", "ValueThree")) .SetContent("Some stuff") .SetContentType("text/plain"); THttpResponse copy = resp; UNIT_ASSERT_STRINGS_EQUAL(ToString(copy), ToString(resp)); } Y_UNIT_TEST(TestAssignment) { THttpResponse resp(HTTP_FORBIDDEN); resp.AddHeader(THttpInputHeader("X-Header-1", "ValueOne")); resp.AddHeader(THttpInputHeader("X-Header-2", "ValueTwo")); resp.AddHeader(THttpInputHeader("X-Header-3", "ValueThree")); resp.SetContent("Some stuff").SetContentType("text/plain"); THttpResponse copy; copy = resp; UNIT_ASSERT_STRINGS_EQUAL(ToString(copy), ToString(resp)); } Y_UNIT_TEST(TestEmptyContent) { UNIT_ASSERT_STRINGS_EQUAL(ToString(THttpResponse().SetContent("")), "HTTP/1.1 200 Ok\r\n\r\n"); } Y_UNIT_TEST(TestReturnReference) { THttpResponse resp; UNIT_ASSERT_EQUAL(&resp, &resp.AddHeader("Header1", 1)); UNIT_ASSERT_EQUAL(&resp, &resp.AddHeader(THttpInputHeader("Header2", "2"))); THttpHeaders headers; headers.AddHeader(THttpInputHeader("Header3", "3")); headers.AddHeader(THttpInputHeader("Header4", "4")); UNIT_ASSERT_EQUAL(&resp, &resp.AddMultipleHeaders(headers)); UNIT_ASSERT_EQUAL(&resp, &resp.SetContent("some stuff")); UNIT_ASSERT_EQUAL(&resp, &resp.SetContent("some other stuff").SetContentType("text/plain")); } Y_UNIT_TEST(TestSetContentType) { const char* EXPECTED = "HTTP/1.1 200 Ok\r\n" "Content-Type: text/xml\r\n" "Content-Length: 28\r\n" "\r\n" ""; THttpResponse resp; resp.SetContent("") .SetContentType("application/json") .SetContentType("text/xml"); UNIT_ASSERT_STRINGS_EQUAL(ToString(resp), EXPECTED); } Y_UNIT_TEST(TestAddOrReplaceHeader) { THttpResponse resp(HTTP_FORBIDDEN); resp.AddOrReplaceHeader(THttpInputHeader("X-Header-1", "ValueOne")); resp.AddOrReplaceHeader("X-Header-2", 10); resp.AddOrReplaceHeader("X-Header-3", true); const char* EXPECTED_ADDED = "HTTP/1.1 403 Forbidden\r\n" "X-Header-1: ValueOne\r\n" "X-Header-2: 10\r\n" "X-Header-3: 1\r\n" "\r\n"; UNIT_ASSERT_STRINGS_EQUAL(ToString(resp), EXPECTED_ADDED); resp.AddOrReplaceHeader(THttpInputHeader("X-Header-1", "ValueTwo")); resp.AddOrReplaceHeader("X-Header-2", 20); resp.AddOrReplaceHeader("X-Header-3", false); const char* EXPECTED_REPLACED = "HTTP/1.1 403 Forbidden\r\n" "X-Header-1: ValueTwo\r\n" "X-Header-2: 20\r\n" "X-Header-3: 0\r\n" "\r\n"; UNIT_ASSERT_STRINGS_EQUAL(ToString(resp), EXPECTED_REPLACED); } }