-#define SQUID_UNIT_TEST 1
+/*
+ * Copyright (C) 1996-2020 The Squid Software Foundation and contributors
+ *
+ * Squid software is distributed under GPLv2+ license and includes
+ * contributions from numerous individuals and organizations.
+ * Please see the COPYING and CONTRIBUTORS files for details.
+ */
#include "squid.h"
#include <cppunit/TestAssert.h>
#include "http/RequestMethod.h"
-#include "Mem.h"
#include "SquidConfig.h"
#include "testHttpRequestMethod.h"
-#if HAVE_SSTREAM
#include <sstream>
-#endif
CPPUNIT_TEST_SUITE_REGISTRATION( testHttpRequestMethod );
void
testHttpRequestMethod::testConstructCharStart()
{
+ // string in SBuf
+
/* parse an empty string -> Http::METHOD_NONE */
- CPPUNIT_ASSERT(HttpRequestMethod(NULL,NULL) == Http::METHOD_NONE);
+ CPPUNIT_ASSERT(HttpRequestMethod(SBuf()) == Http::METHOD_NONE);
+
/* parsing a literal should work */
- CPPUNIT_ASSERT(HttpRequestMethod("GET", NULL) == Http::METHOD_GET);
- CPPUNIT_ASSERT(HttpRequestMethod("QWERTY", NULL) == Http::METHOD_OTHER);
+ CPPUNIT_ASSERT(HttpRequestMethod(SBuf("GET")) == Http::METHOD_GET);
+ CPPUNIT_ASSERT(HttpRequestMethod(SBuf("QWERTY")) == Http::METHOD_OTHER);
+
+ // string in char*
+
+ /* parse an empty string -> Http::METHOD_NONE */
+ HttpRequestMethod a;
+ a.HttpRequestMethodXXX(NULL);
+ CPPUNIT_ASSERT(a == Http::METHOD_NONE);
+
+ /* parsing a literal should work */
+ HttpRequestMethod b;
+ b.HttpRequestMethodXXX("GET");
+ CPPUNIT_ASSERT(b == Http::METHOD_GET);
+ CPPUNIT_ASSERT_EQUAL(SBuf("GET"), b.image());
+ HttpRequestMethod c;
+ c.HttpRequestMethodXXX("QWERTY");
+ CPPUNIT_ASSERT(c == Http::METHOD_OTHER);
+ CPPUNIT_ASSERT_EQUAL(SBuf("QWERTY"), c.image());
+
+ // parsing error should not leave stale results
+ b.HttpRequestMethodXXX(NULL);
+ CPPUNIT_ASSERT(b == Http::METHOD_NONE);
+ CPPUNIT_ASSERT_EQUAL(SBuf("NONE"), b.image());
}
/*
- * We can also parse precise ranges of characters
+ * We can also parse precise ranges of characters with SBuf
*/
void
testHttpRequestMethod::testConstructCharStartEnd()
{
char const * buffer;
/* parse an empty string -> Http::METHOD_NONE */
- CPPUNIT_ASSERT(HttpRequestMethod(NULL, NULL) == Http::METHOD_NONE);
+ CPPUNIT_ASSERT(HttpRequestMethod(SBuf()) == Http::METHOD_NONE);
/* parsing a literal should work */
- CPPUNIT_ASSERT(HttpRequestMethod("GET", NULL) == Http::METHOD_GET);
+ CPPUNIT_ASSERT(HttpRequestMethod(SBuf("GET")) == Http::METHOD_GET);
/* parsing with an explicit end should work */
buffer = "POSTPLUS";
- CPPUNIT_ASSERT(HttpRequestMethod(buffer, buffer + 4) == Http::METHOD_POST);
+ CPPUNIT_ASSERT(HttpRequestMethod(SBuf(buffer, 4)) == Http::METHOD_POST);
}
/*
{
// relaxed RFC-compliance parse HTTP methods are upgraded to correct case
Config.onoff.relaxed_header_parser = 1;
- CPPUNIT_ASSERT_EQUAL(String("POST"), String(HttpRequestMethod("POST",NULL).image()));
- CPPUNIT_ASSERT_EQUAL(String("POST"), String(HttpRequestMethod("pOsT",NULL).image()));
- CPPUNIT_ASSERT_EQUAL(String("POST"), String(HttpRequestMethod("post",NULL).image()));
+ CPPUNIT_ASSERT_EQUAL(SBuf("POST"), HttpRequestMethod(SBuf("POST")).image());
+ CPPUNIT_ASSERT_EQUAL(SBuf("POST"), HttpRequestMethod(SBuf("pOsT")).image());
+ CPPUNIT_ASSERT_EQUAL(SBuf("POST"), HttpRequestMethod(SBuf("post")).image());
// strict RFC-compliance parse HTTP methods are case sensitive
Config.onoff.relaxed_header_parser = 0;
- CPPUNIT_ASSERT_EQUAL(String("POST"), String(HttpRequestMethod("POST",NULL).image()));
- CPPUNIT_ASSERT_EQUAL(String("pOsT"), String(HttpRequestMethod("pOsT",NULL).image()));
- CPPUNIT_ASSERT_EQUAL(String("post"), String(HttpRequestMethod("post",NULL).image()));
+ CPPUNIT_ASSERT_EQUAL(SBuf("POST"), HttpRequestMethod(SBuf("POST")).image());
+ CPPUNIT_ASSERT_EQUAL(SBuf("pOsT"), HttpRequestMethod(SBuf("pOsT")).image());
+ CPPUNIT_ASSERT_EQUAL(SBuf("post"), HttpRequestMethod(SBuf("post")).image());
}
/*
// relaxed RFC-compliance parse HTTP methods are upgraded to correct case
Config.onoff.relaxed_header_parser = 1;
std::ostringstream buffer;
- buffer << HttpRequestMethod("get", NULL);
+ buffer << HttpRequestMethod(SBuf("get"));
CPPUNIT_ASSERT_EQUAL(String("GET"), String(buffer.str().c_str()));
// strict RFC-compliance parse HTTP methods are case sensitive
Config.onoff.relaxed_header_parser = 0;
std::ostringstream buffer2;
- buffer2 << HttpRequestMethod("get", NULL);
+ buffer2 << HttpRequestMethod(SBuf("get"));
CPPUNIT_ASSERT_EQUAL(String("get"), String(buffer2.str().c_str()));
}
+