Alex Rousskov wrote:
On Sun, 2008-02-03 at 16:41 +1300, Amos Jeffries wrote:
Alex Rousskov wrote:
Please give an example or two, where the performance would noticeably
suffer for standard methods.
There were several switch(e->method) in what I think is the request
processing pathways. I was thinking making that switch into a series of
string comparisons (on image()) would increase the processing ops where
the current index int checks are faster.
I agree that there should not be any string comparisons. That is
expensive and would not buy us much. We should either use id() or
isGet() and alike.
The biggest possible hit I've seen so far with the enum change is the
store MD5's, they currently use the int value of the enum. I'm not sure
if it would matter making them always use the image() string instead.
They are certainly capable of it, just the side-effects need checking.
src/store_key_md5.cc:120
src/store_key_md5.cc:139
Extension methods are not cachable, but we need to check whether having
the same id() or key() for multiple methods is going to create problems.
I doubt it will because all these store entries should remain private.
Changing the MD5 affects both private and public (GET, HEAD, etc I
assume?) store MD5 functions.
I am fine with keeping method_t exposed if hiding it creates too many
problems. Let's just replace the conversion operator with id() and get
rid of EXT values, I guess.
The compile and unit-test fixes are done and a patch ready (attached) if
you want to test it.
The removal of EXT methods has been held back until later.
Amos
--
Please use Squid 2.6STABLE17+ or 3.0STABLE1+
There are serious security advisories out on all earlier releases.
Patch file generated Sun Feb 3 19:14:53 NZDT 2008 from
CVS branch ayjwork
CVS base branch HEAD
CVS repository: [EMAIL PROTECTED]:/cvsroot/squid
CVS module: squid3
Fixes many Unit-test compile errors and testing problems in HttpRequestMethod
- Removes implicit conversion from HttpRequestMethod to other types.
- Adds id() accessor to retrieve an ID for known methods.
- Adds more boolean operators to class library
Also adds auto-documantation in some METHOD-related places.
cvs -q rdiff -u -kk -r Z-ayjwork_merge_HEAD -r ayjwork squid3
Index: squid3/src/ACLMethodData.cc
diff -u squid3/src/ACLMethodData.cc:1.9 squid3/src/ACLMethodData.cc:1.8.8.2
--- squid3/src/ACLMethodData.cc:1.9 Sun Jan 20 01:50:56 2008
+++ squid3/src/ACLMethodData.cc Sat Feb 2 20:38:59 2008
@@ -54,10 +54,11 @@
delete values;
}
+/// todo make this a pass-by-reference now that HTTPRequestMethods a full class?
bool
ACLMethodData::match(HttpRequestMethod toFind)
{
- return values->findAndTune (toFind);
+ return values->findAndTune(toFind);
}
/* explicit instantiation required for some systems */
@@ -89,7 +90,7 @@
;
while ((t = strtokFile())) {
- List<HttpRequestMethod> *q = new List<HttpRequestMethod> (HttpRequestMethod(t));
+ List<HttpRequestMethod> *q = new List<HttpRequestMethod> (HttpRequestMethod(t, NULL));
*(Tail) = q;
Tail = &q->next;
}
Index: squid3/src/HttpReply.cc
diff -u squid3/src/HttpReply.cc:1.45 squid3/src/HttpReply.cc:1.38.4.11
--- squid3/src/HttpReply.cc:1.45 Sun Jan 20 01:50:56 2008
+++ squid3/src/HttpReply.cc Sat Feb 2 20:38:59 2008
@@ -420,7 +420,7 @@
{
if (sline.version.major < 1)
return -1;
- else if (METHOD_HEAD == method)
+ else if (method.id() == METHOD_HEAD)
return 0;
else if (sline.status == HTTP_OK)
(void) 0; /* common case, continue */
Index: squid3/src/HttpRequest.cc
diff -u squid3/src/HttpRequest.cc:1.45 squid3/src/HttpRequest.cc:1.37.4.9
--- squid3/src/HttpRequest.cc:1.45 Sun Jan 20 01:50:56 2008
+++ squid3/src/HttpRequest.cc Sat Feb 2 20:38:59 2008
@@ -143,13 +143,14 @@
bool
HttpRequest::sanityCheckStartLine(MemBuf *buf, http_status *error)
{
- /*
+ /**
* Just see if the request buffer starts with a known
* HTTP request method. NOTE this whole function is somewhat
* superfluous and could just go away.
+ \todo AYJ: Check for safely removing this function. We now accept 'unknown' request methods in HTTP.
*/
- if (METHOD_NONE == HttpRequestMethod(buf->content())) {
+ if (HttpRequestMethod(buf->content(),NULL) == METHOD_NONE) {
debugs(73, 3, "HttpRequest::sanityCheckStartLine: did not find HTTP request method");
return false;
}
@@ -163,7 +164,7 @@
const char *t = start + strcspn(start, w_space);
method = HttpRequestMethod(start, t);
- if (METHOD_NONE == method)
+ if (method == METHOD_NONE)
return false;
start = t + strspn(t, w_space);
Index: squid3/src/HttpRequestMethod.cc
diff -u squid3/src/HttpRequestMethod.cc:1.5 squid3/src/HttpRequestMethod.cc:1.2.4.4
--- squid3/src/HttpRequestMethod.cc:1.5 Sun Jan 20 01:50:56 2008
+++ squid3/src/HttpRequestMethod.cc Sat Feb 2 20:38:59 2008
@@ -144,6 +144,7 @@
theImage.limitInit(begin,end-begin);
}
+/** \todo AYJ: this _should_ be obsolete. Since all such methods fit nicely into METHOD_OTHER now. */
void
HttpRequestMethod::AddExtension(const char *mstr)
{
@@ -187,17 +188,18 @@
}
char const*
-HttpRequestMethod::image() const
-{
- if (METHOD_OTHER != theMethod) {
- return RequestMethodStr[theMethod];
- }
- else {
- if (theImage.size()>0)
- return theImage.buf();
- else
- return "METHOD_OTHER";
- }
+HttpRequestMethod::image() const
+{
+ if (METHOD_OTHER != theMethod) {
+ return RequestMethodStr[theMethod];
+ }
+ else {
+ if (theImage.size()>0) {
+ return theImage.buf();
+ } else {
+ return "METHOD_OTHER";
+ }
+ }
}
bool
Index: squid3/src/HttpRequestMethod.h
diff -u squid3/src/HttpRequestMethod.h:1.5 squid3/src/HttpRequestMethod.h:1.2.4.4
--- squid3/src/HttpRequestMethod.h:1.5 Sun Jan 20 20:51:29 2008
+++ squid3/src/HttpRequestMethod.h Sat Feb 2 20:38:59 2008
@@ -1,4 +1,3 @@
-
/*
* $Id$
*
@@ -93,15 +92,16 @@
};
/* forward decls */
-
typedef struct _SquidConfig SquidConfig;
-/* This class represents an HTTP Request METHOD - i.e.
- * PUT, POST, GET etc. It has a runtime extensionf acility to allow it to
+/**
+ * This class represents an HTTP Request METHOD
+ * - i.e. PUT, POST, GET etc.
+ * It has a runtime extension facility to allow it to
* efficiently support new methods
+ \ingroup POD
*/
-
class HttpRequestMethod
{
@@ -109,14 +109,18 @@
static void AddExtension(const char *methodString);
static void Configure(SquidConfig &Config);
- HttpRequestMethod() : theMethod(METHOD_NONE) {}
+ HttpRequestMethod() : theMethod(METHOD_NONE), theImage() {}
- HttpRequestMethod(_method_t const aMethod) : theMethod(aMethod) {}
+ HttpRequestMethod(_method_t const aMethod) : theMethod(aMethod), theImage() {}
- HttpRequestMethod(char const * begin, char const * end=0);
+ /**
+ \param begin string to convert to request method.
+ \param end end of the method string (relative to begin). Use NULL if this is unknown.
+ *
+ \note DO NOT give end a default (ie NULL). That will cause silent char* conversion clashes.
+ */
+ HttpRequestMethod(char const * begin, char const * end);
- operator _method_t() const {return theMethod; }
-
HttpRequestMethod & operator = (const HttpRequestMethod& aMethod)
{
theMethod = aMethod.theMethod;
@@ -131,38 +135,49 @@
return *this;
}
- bool operator != (_method_t const & aMethod) { return theMethod != aMethod;}
- bool operator != (HttpRequestMethod const & aMethod)
- {
- return ( (theMethod != aMethod) || (theImage != aMethod.theImage) );
+ bool operator == (_method_t const & aMethod) const { return theMethod == aMethod; }
+ bool operator == (HttpRequestMethod const & aMethod) const
+ {
+ return ( (theMethod == aMethod.theMethod) || (theImage == aMethod.theImage) );
+ }
+
+ bool operator != (_method_t const & aMethod) const { return theMethod != aMethod; }
+ bool operator != (HttpRequestMethod const & aMethod) const
+ {
+ return ( (theMethod != aMethod.theMethod) || (theImage != aMethod.theImage) );
}
-
+
+ /** Iterate through the registered HTTP methods. */
HttpRequestMethod& operator++()
{
- if (METHOD_OTHER!=theMethod)
- {
- int tmp = (int)theMethod;
- _method_t tmp_m = (_method_t)(++tmp);
-
- if (METHOD_ENUM_END >= tmp_m)
- theMethod = tmp_m;
+ if(METHOD_OTHER != theMethod) {
+ int tmp = (int)theMethod;
+ _method_t tmp_m = (_method_t)(++tmp);
+
+ if (METHOD_ENUM_END >= tmp_m)
+ theMethod = tmp_m;
}
return *this;
}
+ /** Get an ID representation of the method.
+ \retval METHOD_NONE the methopd is currently unset or unknown.
+ \retval METHOD_UNKNOWN the method has been accepted but is not one of the registerd HTTP methods.
+ \retval * the method is on of the registered HTTP methods.
+ */
+ _method_t const id() const { return theMethod; }
- /* Get a char string representation of the method. */
+ /** Get a char string representation of the method. */
char const* image() const;
-
+
bool isCacheble() const;
private:
- static const char *RequestMethodStr[];
-
- _method_t theMethod; ///< Method type
- String theImage; ///< Used for store METHOD_OTHER only
-};
+ static const char *RequestMethodStr[];
+ _method_t theMethod; ///< Method type
+ String theImage; ///< Used for store METHOD_OTHER only
+};
inline std::ostream &
operator << (std::ostream &os, HttpRequestMethod const &method)
Index: squid3/src/client_side.cc
diff -u squid3/src/client_side.cc:1.144 squid3/src/client_side.cc:1.119.2.13
--- squid3/src/client_side.cc:1.144 Sun Jan 20 01:50:56 2008
+++ squid3/src/client_side.cc Sat Feb 2 20:38:59 2008
@@ -667,7 +667,7 @@
static int
clientIsContentLengthValid(HttpRequest * r)
{
- switch (r->method) {
+ switch (r->method.id()) {
case METHOD_PUT:
Index: squid3/src/client_side_reply.cc
diff -u squid3/src/client_side_reply.cc:1.123 squid3/src/client_side_reply.cc:1.90.4.15
--- squid3/src/client_side_reply.cc:1.123 Tue Jan 22 12:50:40 2008
+++ squid3/src/client_side_reply.cc Sat Feb 2 20:38:59 2008
@@ -677,8 +677,8 @@
purgeRequest();
return;
}
-
- if (METHOD_OTHER == r->method) {
+
+ if (r->method == METHOD_OTHER) {
// invalidate all cache entries
purgeAllCached();
}
Index: squid3/src/client_side_request.cc
diff -u squid3/src/client_side_request.cc:1.87 squid3/src/client_side_request.cc:1.66.4.17
--- squid3/src/client_side_request.cc:1.87 Sun Jan 20 01:50:56 2008
+++ squid3/src/client_side_request.cc Sat Feb 2 20:39:00 2008
@@ -656,8 +656,8 @@
}
}
}
-
- if (METHOD_OTHER == request->method) {
+
+ if (request->method == METHOD_OTHER) {
no_cache++;
}
@@ -1126,7 +1126,7 @@
xfree(uri);
uri = xstrdup(urlCanonical(request));
setLogUri(this, urlCanonicalClean(request));
- assert(request->method);
+ assert(request->method.id());
} else if (HttpReply *new_rep = dynamic_cast<HttpReply*>(msg)) {
debugs(85,3,HERE << "REQMOD reply is HTTP reply");
Index: squid3/src/forward.cc
diff -u squid3/src/forward.cc:1.78 squid3/src/forward.cc:1.64.2.9
--- squid3/src/forward.cc:1.78 Sun Jan 20 10:51:12 2008
+++ squid3/src/forward.cc Sat Feb 2 20:39:00 2008
@@ -464,13 +464,13 @@
return false;
/* RFC2616 9.1 Safe and Idempotent Methods */
- switch (request->method) {
+ switch (request->method.id()) {
/* 9.1.1 Safe Methods */
case METHOD_GET:
case METHOD_HEAD:
- /* 9.1.2 Indepontent Methods */
+ /* 9.1.2 Idempotent Methods */
case METHOD_PUT:
Index: squid3/src/htcp.cc
diff -u squid3/src/htcp.cc:1.36 squid3/src/htcp.cc:1.29.4.6
--- squid3/src/htcp.cc:1.36 Sun Jan 20 01:50:57 2008
+++ squid3/src/htcp.cc Sat Feb 2 20:39:00 2008
@@ -762,7 +762,7 @@
/*
* Parse the request
*/
- method = HttpRequestMethod(s->method);
+ method = HttpRequestMethod(s->method, NULL);
s->request = HttpRequest::CreateFromUrlAndMethod(s->uri, method == METHOD_NONE ? HttpRequestMethod(METHOD_GET) : method);
Index: squid3/src/http.cc
diff -u squid3/src/http.cc:1.129 squid3/src/http.cc:1.99.2.16
--- squid3/src/http.cc:1.129 Sun Jan 20 01:50:57 2008
+++ squid3/src/http.cc Sat Feb 2 20:39:01 2008
@@ -200,12 +200,8 @@
static void
httpMaybeRemovePublic(StoreEntry * e, http_status status)
{
-
- int remove
- = 0;
-
+ int remove = 0;
int forbidden = 0;
-
StoreEntry *pe;
if (!EBIT_TEST(e->flags, KEY_PRIVATE))
@@ -226,9 +222,7 @@
case HTTP_GONE:
case HTTP_NOT_FOUND:
-
- remove
- = 1;
+ remove = 1;
break;
@@ -255,16 +249,14 @@
*/
if (status >= 200 && status < 300)
- remove
- = 1;
+ remove = 1;
#endif
break;
}
- if (!remove
- && !forbidden)
+ if (!remove && !forbidden)
return;
assert(e->mem_obj);
@@ -279,7 +271,7 @@
pe->release();
}
- /*
+ /** \par
* Also remove any cached HEAD response in case the object has
* changed.
*/
@@ -296,7 +288,9 @@
if (forbidden)
return;
- switch (e->mem_obj->method) {
+ /// \todo AYJ: given the coment below + new behaviour of accepting METHOD_UNKNOWN, should we invert this test
+ /// removing the object unless the method is nown to be safely kept?
+ switch (e->mem_obj->method.id()) {
case METHOD_PUT:
@@ -311,8 +305,8 @@
case METHOD_BMOVE:
case METHOD_BDELETE:
- /*
- * Remove any cached GET object if it is beleived that the
+ /** \par
+ * Remove any cached GET object if it is believed that the
* object may have changed as a result of other methods
*/
Index: squid3/src/store_key_md5.cc
diff -u squid3/src/store_key_md5.cc:1.11 squid3/src/store_key_md5.cc:1.7.8.4
--- squid3/src/store_key_md5.cc:1.11 Sun Jan 20 01:50:58 2008
+++ squid3/src/store_key_md5.cc Sat Feb 2 20:39:02 2008
@@ -117,7 +117,7 @@
storeKeyPublic(const char *url, const HttpRequestMethod& method)
{
static cache_key digest[SQUID_MD5_DIGEST_LENGTH];
- unsigned char m = (unsigned char) method;
+ unsigned char m = (unsigned char) method.id();
SquidMD5_CTX M;
SquidMD5Init(&M);
SquidMD5Update(&M, &m, sizeof(m));
@@ -136,7 +136,7 @@
storeKeyPublicByRequestMethod(HttpRequest * request, const HttpRequestMethod& method)
{
static cache_key digest[SQUID_MD5_DIGEST_LENGTH];
- unsigned char m = (unsigned char) method;
+ unsigned char m = (unsigned char) method.id();
const char *url = urlCanonical(request);
SquidMD5_CTX M;
SquidMD5Init(&M);
Index: squid3/src/url.cc
diff -u squid3/src/url.cc:1.23 squid3/src/url.cc:1.17.4.8
--- squid3/src/url.cc:1.23 Sun Jan 20 01:50:58 2008
+++ squid3/src/url.cc Sat Feb 2 20:39:02 2008
@@ -430,6 +430,7 @@
urlCanonical(HttpRequest * request)
{
LOCAL_ARRAY(char, portbuf, 32);
+/// \todo AYJ: Performance: making this a ptr and allocating when needed will be better than a write and future xstrdup().
LOCAL_ARRAY(char, urlbuf, MAX_URL);
if (request->canonical)
@@ -438,7 +439,8 @@
if (request->protocol == PROTO_URN) {
snprintf(urlbuf, MAX_URL, "urn:%s", request->urlpath.buf());
} else {
- switch (request->method) {
+/// \todo AYJ: this could use "if..else and method == METHOD_CONNECT" easier.
+ switch (request->method.id()) {
case METHOD_CONNECT:
snprintf(urlbuf, MAX_URL, "%s:%d", request->GetHost(), request->port);
@@ -465,6 +467,10 @@
return (request->canonical = xstrdup(urlbuf));
}
+/** \todo AYJ: Performance: This is an *almost* duplicate of urlCanoncical. But elides the query-string.
+ * After copying it on in the first place! Would be less code to merge the two with a flag parameter.
+ * and never copy the query-string part in the first place
+ */
char *
urlCanonicalClean(const HttpRequest * request)
{
@@ -476,7 +482,8 @@
if (request->protocol == PROTO_URN) {
snprintf(buf, MAX_URL, "urn:%s", request->urlpath.buf());
} else {
- switch (request->method) {
+/// \todo AYJ: this could use "if..else and method == METHOD_CONNECT" easier.
+ switch (request->method.id()) {
case METHOD_CONNECT:
snprintf(buf, MAX_URL, "%s:%d",
Index: squid3/src/tests/testHttpRequest.cc
diff -u squid3/src/tests/testHttpRequest.cc:1.5 squid3/src/tests/testHttpRequest.cc:1.1.18.6
--- squid3/src/tests/testHttpRequest.cc:1.5 Fri Dec 14 15:51:09 2007
+++ squid3/src/tests/testHttpRequest.cc Sat Feb 2 20:39:03 2008
@@ -36,7 +36,7 @@
expected_port = 90;
HttpRequest *nullRequest = NULL;
CPPUNIT_ASSERT_EQUAL(expected_port, aRequest->port);
- CPPUNIT_ASSERT_EQUAL(METHOD_GET, aRequest->method);
+ CPPUNIT_ASSERT(aRequest->method == METHOD_GET);
CPPUNIT_ASSERT_EQUAL(String("foo"), String(aRequest->GetHost()));
CPPUNIT_ASSERT_EQUAL(String("/bar"), aRequest->urlpath);
CPPUNIT_ASSERT_EQUAL(PROTO_HTTP, aRequest->protocol);
@@ -48,7 +48,7 @@
aRequest = HttpRequest::CreateFromUrlAndMethod(url, METHOD_PUT);
expected_port = 80;
CPPUNIT_ASSERT_EQUAL(expected_port, aRequest->port);
- CPPUNIT_ASSERT_EQUAL(METHOD_PUT, aRequest->method);
+ CPPUNIT_ASSERT(aRequest->method == METHOD_PUT);
CPPUNIT_ASSERT_EQUAL(String("foo"), String(aRequest->GetHost()));
CPPUNIT_ASSERT_EQUAL(String("/bar"), aRequest->urlpath);
CPPUNIT_ASSERT_EQUAL(PROTO_HTTP, aRequest->protocol);
@@ -65,7 +65,7 @@
aRequest = HttpRequest::CreateFromUrlAndMethod(url, METHOD_CONNECT);
expected_port = 45;
CPPUNIT_ASSERT_EQUAL(expected_port, aRequest->port);
- CPPUNIT_ASSERT_EQUAL(METHOD_CONNECT, aRequest->method);
+ CPPUNIT_ASSERT(aRequest->method == METHOD_CONNECT);
CPPUNIT_ASSERT_EQUAL(String("foo"), String(aRequest->GetHost()));
CPPUNIT_ASSERT_EQUAL(String(""), aRequest->urlpath);
CPPUNIT_ASSERT_EQUAL(PROTO_NONE, aRequest->protocol);
@@ -85,7 +85,7 @@
HttpRequest *aRequest = HttpRequest::CreateFromUrl(url);
expected_port = 90;
CPPUNIT_ASSERT_EQUAL(expected_port, aRequest->port);
- CPPUNIT_ASSERT_EQUAL(METHOD_GET, aRequest->method);
+ CPPUNIT_ASSERT(aRequest->method == METHOD_GET);
CPPUNIT_ASSERT_EQUAL(String("foo"), String(aRequest->GetHost()));
CPPUNIT_ASSERT_EQUAL(String("/bar"), aRequest->urlpath);
CPPUNIT_ASSERT_EQUAL(PROTO_HTTP, aRequest->protocol);
@@ -108,7 +108,7 @@
aRequest = HttpRequest::CreateFromUrlAndMethod(url, METHOD_GET);
expected_port = 80;
CPPUNIT_ASSERT_EQUAL(expected_port, aRequest->port);
- CPPUNIT_ASSERT_EQUAL(METHOD_GET, aRequest->method);
+ CPPUNIT_ASSERT(aRequest->method == METHOD_GET);
CPPUNIT_ASSERT_EQUAL(String("[2000:800::45]"), String(aRequest->GetHost()));
CPPUNIT_ASSERT_EQUAL(String("/foo"), aRequest->urlpath);
CPPUNIT_ASSERT_EQUAL(PROTO_HTTP, aRequest->protocol);
@@ -120,7 +120,7 @@
aRequest = HttpRequest::CreateFromUrlAndMethod(url, METHOD_GET);
expected_port = 90;
CPPUNIT_ASSERT_EQUAL(expected_port, aRequest->port);
- CPPUNIT_ASSERT_EQUAL(METHOD_GET, aRequest->method);
+ CPPUNIT_ASSERT(aRequest->method == METHOD_GET);
CPPUNIT_ASSERT_EQUAL(String("[2000:800::45]"), String(aRequest->GetHost()));
CPPUNIT_ASSERT_EQUAL(String("/foo"), aRequest->urlpath);
CPPUNIT_ASSERT_EQUAL(PROTO_HTTP, aRequest->protocol);
@@ -132,7 +132,7 @@
aRequest = HttpRequest::CreateFromUrlAndMethod(url, METHOD_GET);
expected_port = 80;
CPPUNIT_ASSERT_EQUAL(expected_port, aRequest->port);
- CPPUNIT_ASSERT_EQUAL(METHOD_GET, aRequest->method);
+ CPPUNIT_ASSERT(aRequest->method == METHOD_GET);
#if USE_IPV6
/* We hasve fixed this in IPv6 build. */
CPPUNIT_ASSERT_EQUAL(String("[2000:800::45]"), String(aRequest->GetHost()));
Index: squid3/src/tests/testHttpRequestMethod.cc
diff -u squid3/src/tests/testHttpRequestMethod.cc:1.5 squid3/src/tests/testHttpRequestMethod.cc:1.2.8.5
--- squid3/src/tests/testHttpRequestMethod.cc:1.5 Sun Jan 20 01:50:58 2008
+++ squid3/src/tests/testHttpRequestMethod.cc Sat Feb 2 20:39:03 2008
@@ -17,10 +17,10 @@
testHttpRequestMethod::testConstructCharStart()
{
/* parse an empty string -> METHOD_NONE */
- CPPUNIT_ASSERT(METHOD_NONE == HttpRequestMethod(NULL));
+ CPPUNIT_ASSERT(HttpRequestMethod(NULL,NULL) == METHOD_NONE);
/* parsing a literal should work */
- CPPUNIT_ASSERT(METHOD_GET == HttpRequestMethod("GET", NULL));
- CPPUNIT_ASSERT(METHOD_OTHER == HttpRequestMethod("QWERTY", NULL));
+ CPPUNIT_ASSERT(HttpRequestMethod("GET", NULL) == METHOD_GET);
+ CPPUNIT_ASSERT(HttpRequestMethod("QWERTY", NULL) == METHOD_OTHER);
}
/*
@@ -31,12 +31,12 @@
{
char const * buffer;
/* parse an empty string -> METHOD_NONE */
- CPPUNIT_ASSERT(METHOD_NONE == HttpRequestMethod(NULL, NULL));
+ CPPUNIT_ASSERT(HttpRequestMethod(NULL, NULL) == METHOD_NONE);
/* parsing a literal should work */
- CPPUNIT_ASSERT(METHOD_GET == HttpRequestMethod("GET", NULL));
+ CPPUNIT_ASSERT(HttpRequestMethod("GET", NULL) == METHOD_GET);
/* parsing with an explicit end should work */
buffer = "POSTPLUS";
- CPPUNIT_ASSERT(METHOD_POST == HttpRequestMethod(buffer, buffer + 4));
+ CPPUNIT_ASSERT(HttpRequestMethod(buffer, buffer + 4) == METHOD_POST);
}
/*
@@ -78,9 +78,9 @@
* we should be able to get a char const * version of the method.
*/
void
-testHttpRequestMethod::testConst_str()
+testHttpRequestMethod::testImage()
{
- CPPUNIT_ASSERT_EQUAL(String("POST"), String(HttpRequestMethod("post").const_str()));
+ CPPUNIT_ASSERT_EQUAL(String("POST"), String(HttpRequestMethod("post",NULL).image()));
}
/*
@@ -92,8 +92,8 @@
{
CPPUNIT_ASSERT(HttpRequestMethod(METHOD_NONE) == METHOD_NONE);
CPPUNIT_ASSERT(not (HttpRequestMethod(METHOD_POST) == METHOD_GET));
- CPPUNIT_ASSERT(METHOD_GET == HttpRequestMethod(METHOD_GET));
- CPPUNIT_ASSERT(not (METHOD_SEARCH == HttpRequestMethod(METHOD_TRACE)));
+ CPPUNIT_ASSERT(HttpRequestMethod(METHOD_GET) == METHOD_GET);
+ CPPUNIT_ASSERT(not (HttpRequestMethod(METHOD_TRACE) == METHOD_SEARCH));
}
/*
@@ -104,8 +104,8 @@
{
CPPUNIT_ASSERT(HttpRequestMethod(METHOD_NONE) != METHOD_GET);
CPPUNIT_ASSERT(not (HttpRequestMethod(METHOD_POST) != METHOD_POST));
- CPPUNIT_ASSERT(METHOD_NONE != HttpRequestMethod(METHOD_GET));
- CPPUNIT_ASSERT(not (METHOD_SEARCH != HttpRequestMethod(METHOD_SEARCH)));
+ CPPUNIT_ASSERT(HttpRequestMethod(METHOD_GET) != METHOD_NONE);
+ CPPUNIT_ASSERT(not (HttpRequestMethod(METHOD_SEARCH) != METHOD_SEARCH));
}
/*
@@ -115,6 +115,6 @@
testHttpRequestMethod::testStream()
{
std::ostringstream buffer;
- buffer << HttpRequestMethod("get");
+ buffer << HttpRequestMethod("get",NULL);
CPPUNIT_ASSERT_EQUAL(String("GET"), String(buffer.str().c_str()));
}
Index: squid3/src/tests/testHttpRequestMethod.h
diff -u squid3/src/tests/testHttpRequestMethod.h:1.1 squid3/src/tests/testHttpRequestMethod.h:1.1.18.1
--- squid3/src/tests/testHttpRequestMethod.h:1.1 Fri May 12 06:49:57 2006
+++ squid3/src/tests/testHttpRequestMethod.h Sat Feb 2 05:12:57 2008
@@ -18,7 +18,7 @@
CPPUNIT_TEST( testDefaultConstructor );
CPPUNIT_TEST( testEqualmethod_t );
CPPUNIT_TEST( testNotEqualmethod_t );
- CPPUNIT_TEST( testConst_str );
+ CPPUNIT_TEST( testImage );
CPPUNIT_TEST( testStream );
CPPUNIT_TEST_SUITE_END();
@@ -29,7 +29,7 @@
void testConstructmethod_t();
void testConstructCharStart();
void testConstructCharStartEnd();
- void testConst_str();
+ void testImage();
void testDefaultConstructor();
void testEqualmethod_t();
void testNotEqualmethod_t();