123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- #include "httpreqdata.h"
- #include <library/cpp/testing/unittest/registar.h>
- Y_UNIT_TEST_SUITE(TRequestServerDataTest) {
- Y_UNIT_TEST(Headers) {
- TServerRequestData sd;
- sd.AddHeader("x-xx", "y-yy");
- sd.AddHeader("x-Xx", "y-yy");
- UNIT_ASSERT_VALUES_EQUAL(sd.HeadersCount(), 1);
- sd.AddHeader("x-XxX", "y-yyy");
- UNIT_ASSERT_VALUES_EQUAL(sd.HeadersCount(), 2);
- UNIT_ASSERT_VALUES_EQUAL(sd.HeaderInOrEmpty("X-XX"), TStringBuf("y-yy"));
- UNIT_ASSERT_VALUES_EQUAL(sd.HeaderInOrEmpty("X-XXX"), TStringBuf("y-yyy"));
- }
- Y_UNIT_TEST(ComplexHeaders) {
- TServerRequestData sd;
- sd.SetHost("zzz", 1);
- sd.AddHeader("x-Xx", "y-yy");
- UNIT_ASSERT_VALUES_EQUAL(sd.HeadersCount(), 1);
- UNIT_ASSERT_VALUES_EQUAL(sd.HeaderInOrEmpty("X-XX"), TStringBuf("y-yy"));
- sd.AddHeader("x-Xz", "y-yy");
- UNIT_ASSERT_VALUES_EQUAL(sd.HeadersCount(), 2);
- UNIT_ASSERT_VALUES_EQUAL(sd.HeaderInOrEmpty("X-Xz"), TStringBuf("y-yy"));
- UNIT_ASSERT_VALUES_EQUAL(sd.ServerName(), "zzz");
- UNIT_ASSERT_VALUES_EQUAL(sd.ServerPort(), "1");
- sd.AddHeader("Host", "1234");
- UNIT_ASSERT_VALUES_EQUAL(sd.HeadersCount(), 3);
- UNIT_ASSERT_VALUES_EQUAL(sd.HeaderInOrEmpty("Host"), TStringBuf("1234"));
- UNIT_ASSERT_VALUES_EQUAL(sd.ServerName(), "1234");
- sd.AddHeader("Host", "12345:678");
- UNIT_ASSERT_VALUES_EQUAL(sd.HeadersCount(), 3);
- UNIT_ASSERT_VALUES_EQUAL(sd.HeaderInOrEmpty("Host"), TStringBuf("12345:678"));
- UNIT_ASSERT_VALUES_EQUAL(sd.ServerName(), "12345");
- UNIT_ASSERT_VALUES_EQUAL(sd.ServerPort(), "678");
- }
- Y_UNIT_TEST(ParseInvalid) {
- TServerRequestData rd;
- //Not crashes on null
- UNIT_ASSERT(!rd.Parse(" \0/yandsearch?>a=fake&haha=da HTTP 1.1 OK"));
- rd.Scan();
- UNIT_ASSERT_VALUES_EQUAL(rd.Query(), "");
- UNIT_ASSERT_VALUES_EQUAL(rd.CgiParam.size(), 0);
- rd.Clear();
- }
- Y_UNIT_TEST(ParseScan) {
- TServerRequestData rd;
- // Parse parses url without host
- UNIT_ASSERT(!rd.Parse(" http://yandex.ru/yandsearch?>a=fake&haha=da HTTP 1.1 OK"));
- // This should work
- UNIT_ASSERT(rd.Parse(" /yandsearch?>a=fake&haha=da HTTP 1.1 OK"));
- UNIT_ASSERT_STRINGS_EQUAL(rd.Query(), ">a=fake&haha=da");
- UNIT_ASSERT_STRINGS_EQUAL(rd.Query(), rd.OrigQuery());
- rd.Scan();
- UNIT_ASSERT(rd.CgiParam.Has("gta", "fake"));
- UNIT_ASSERT(rd.CgiParam.Has("haha", "da"));
- UNIT_ASSERT(!rd.CgiParam.Has("no-param"));
- rd.Clear();
- }
- Y_UNIT_TEST(Ctor) {
- const TString qs("gta=fake&haha=da");
- TServerRequestData rd(qs.c_str());
- UNIT_ASSERT_STRINGS_EQUAL(rd.Query(), qs);
- UNIT_ASSERT_STRINGS_EQUAL(rd.OrigQuery(), qs);
- UNIT_ASSERT(rd.CgiParam.Has("gta"));
- UNIT_ASSERT(rd.CgiParam.Has("haha"));
- UNIT_ASSERT(!rd.CgiParam.Has("no-param"));
- }
- Y_UNIT_TEST(HashCut) {
- const TString qs(">a=fake&haha=da");
- const TString header = " /yandsearch?" + qs + "#&uberParam=yes&q=? HTTP 1.1 OK";
- TServerRequestData rd;
- rd.Parse(header.c_str());
- UNIT_ASSERT_STRINGS_EQUAL(rd.Query(), qs);
- UNIT_ASSERT_STRINGS_EQUAL(rd.OrigQuery(), qs);
- rd.Scan();
- UNIT_ASSERT(rd.CgiParam.Has("gta"));
- UNIT_ASSERT(rd.CgiParam.Has("haha"));
- UNIT_ASSERT(!rd.CgiParam.Has("uberParam"));
- }
- Y_UNIT_TEST(MisplacedHashCut) {
- TServerRequestData rd;
- rd.Parse(" /y#ndsearch?>a=fake&haha=da&uberParam=yes&q=? HTTP 1.1 OK");
- UNIT_ASSERT_STRINGS_EQUAL(rd.Query(), "");
- UNIT_ASSERT_STRINGS_EQUAL(rd.OrigQuery(), "");
- rd.Scan();
- UNIT_ASSERT(rd.CgiParam.empty());
- }
- Y_UNIT_TEST(CornerCase) {
- TServerRequestData rd;
- rd.Parse(" /yandsearch?#");
- UNIT_ASSERT_STRINGS_EQUAL(rd.Query(), "");
- UNIT_ASSERT_STRINGS_EQUAL(rd.OrigQuery(), "");
- rd.Scan();
- UNIT_ASSERT(rd.CgiParam.empty());
- }
- Y_UNIT_TEST(AppendQueryString) {
- const TString qs("gta=fake&haha=da");
- TServerRequestData rd(qs.c_str());
- UNIT_ASSERT(rd.CgiParam.Has("gta", "fake"));
- UNIT_ASSERT(rd.CgiParam.Has("haha", "da"));
- UNIT_ASSERT_STRINGS_EQUAL(rd.Query(), qs);
- UNIT_ASSERT_STRINGS_EQUAL(rd.Query(), rd.OrigQuery());
- constexpr TStringBuf appendix = "gta=true>a=new";
- rd.AppendQueryString(appendix);
- UNIT_ASSERT_STRINGS_EQUAL(rd.Query(), qs + '&' + appendix);
- UNIT_ASSERT_STRINGS_EQUAL(rd.OrigQuery(), qs);
- rd.Scan();
- UNIT_ASSERT(rd.CgiParam.Has("gta", "true"));
- UNIT_ASSERT(rd.CgiParam.Has("gta", "new"));
- }
- Y_UNIT_TEST(SetRemoteAddrSimple) {
- static const TString TEST = "abacaba.search.yandex.net";
- TServerRequestData rd;
- rd.SetRemoteAddr(TEST);
- UNIT_ASSERT_STRINGS_EQUAL(TEST, rd.RemoteAddr());
- }
- Y_UNIT_TEST(SetRemoteAddrRandom) {
- for (size_t size = 0; size < 2 * INET6_ADDRSTRLEN; ++size) {
- const TString test = NUnitTest::RandomString(size, size);
- TServerRequestData rd;
- rd.SetRemoteAddr(test);
- UNIT_ASSERT_STRINGS_EQUAL(test.substr(0, INET6_ADDRSTRLEN - 1), rd.RemoteAddr());
- }
- }
- } // TRequestServerDataTest
|