mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-28 00:02:28 +00:00
parent
da36e7e256
commit
4d21cd315d
20 changed files with 1075 additions and 664 deletions
|
@ -41,19 +41,24 @@ static unsigned version(const char *m) {
|
|||
return ParseHttpVersion(m + req->version.a, req->version.b - req->version.a);
|
||||
}
|
||||
|
||||
TEST(ParseHttpRequest, testEmpty_tooShort) {
|
||||
void SetUp(void) {
|
||||
InitHttpRequest(req);
|
||||
}
|
||||
|
||||
void TearDown(void) {
|
||||
DestroyHttpRequest(req);
|
||||
}
|
||||
|
||||
TEST(ParseHttpRequest, testEmpty_tooShort) {
|
||||
EXPECT_EQ(0, ParseHttpRequest(req, "", 0));
|
||||
}
|
||||
|
||||
TEST(ParseHttpRequest, testTooShort) {
|
||||
InitHttpRequest(req);
|
||||
EXPECT_EQ(0, ParseHttpRequest(req, "\r\n", 2));
|
||||
}
|
||||
|
||||
TEST(ParseHttpRequest, testNoHeaders) {
|
||||
static const char m[] = "GET /foo HTTP/1.0\r\n\r\n";
|
||||
InitHttpRequest(req);
|
||||
EXPECT_EQ(strlen(m), ParseHttpRequest(req, m, strlen(m)));
|
||||
EXPECT_EQ(kHttpGet, req->method);
|
||||
EXPECT_STREQ("/foo", gc(slice(m, req->uri)));
|
||||
|
@ -66,7 +71,6 @@ POST /foo?bar%20hi HTTP/1.0\r\n\
|
|||
Host: foo.example\r\n\
|
||||
Content-Length: 0\r\n\
|
||||
\r\n";
|
||||
InitHttpRequest(req);
|
||||
EXPECT_EQ(strlen(m), ParseHttpRequest(req, m, strlen(m)));
|
||||
EXPECT_EQ(kHttpPost, req->method);
|
||||
EXPECT_STREQ("/foo?bar%20hi", gc(slice(m, req->uri)));
|
||||
|
@ -78,7 +82,6 @@ Content-Length: 0\r\n\
|
|||
|
||||
TEST(ParseHttpRequest, testHttp101) {
|
||||
static const char m[] = "GET / HTTP/1.1\r\n\r\n";
|
||||
InitHttpRequest(req);
|
||||
EXPECT_EQ(strlen(m), ParseHttpRequest(req, m, strlen(m)));
|
||||
EXPECT_EQ(kHttpGet, req->method);
|
||||
EXPECT_STREQ("/", gc(slice(m, req->uri)));
|
||||
|
@ -88,7 +91,6 @@ TEST(ParseHttpRequest, testHttp101) {
|
|||
|
||||
TEST(ParseHttpRequest, testHttp100) {
|
||||
static const char m[] = "GET / HTTP/1.0\r\n\r\n";
|
||||
InitHttpRequest(req);
|
||||
EXPECT_EQ(strlen(m), ParseHttpRequest(req, m, strlen(m)));
|
||||
EXPECT_EQ(kHttpGet, req->method);
|
||||
EXPECT_STREQ("/", gc(slice(m, req->uri)));
|
||||
|
@ -98,7 +100,6 @@ TEST(ParseHttpRequest, testHttp100) {
|
|||
|
||||
TEST(ParseHttpRequest, testHttp009) {
|
||||
static const char m[] = "GET /\r\n\r\n";
|
||||
InitHttpRequest(req);
|
||||
EXPECT_EQ(strlen(m), ParseHttpRequest(req, m, strlen(m)));
|
||||
EXPECT_EQ(kHttpGet, req->method);
|
||||
EXPECT_STREQ("/", gc(slice(m, req->uri)));
|
||||
|
@ -112,7 +113,6 @@ TEST(ParseHttpRequest, testLeadingLineFeeds_areIgnored) {
|
|||
GET /foo?bar%20hi HTTP/1.0\r\n\
|
||||
User-Agent: hi\r\n\
|
||||
\r\n";
|
||||
InitHttpRequest(req);
|
||||
EXPECT_EQ(strlen(m), ParseHttpRequest(req, m, strlen(m)));
|
||||
EXPECT_STREQ("/foo?bar%20hi", gc(slice(m, req->uri)));
|
||||
}
|
||||
|
@ -123,7 +123,6 @@ GET /foo?bar%20hi HTTP/1.0\r\n\
|
|||
User-Agent: hi\r\n\
|
||||
there\r\n\
|
||||
\r\n";
|
||||
InitHttpRequest(req);
|
||||
EXPECT_EQ(-1, ParseHttpRequest(req, m, strlen(m)));
|
||||
EXPECT_EQ(EBADMSG, errno);
|
||||
}
|
||||
|
@ -134,7 +133,6 @@ GET /foo?bar%20hi HTTP/1.0\r\n\
|
|||
User-Agent: hi\r\n\
|
||||
: hi\r\n\
|
||||
\r\n";
|
||||
InitHttpRequest(req);
|
||||
EXPECT_EQ(-1, ParseHttpRequest(req, m, strlen(m)));
|
||||
EXPECT_EQ(EBADMSG, errno);
|
||||
}
|
||||
|
@ -146,7 +144,6 @@ Host: foo.example\n\
|
|||
Content-Length: 0\n\
|
||||
\n\
|
||||
\n";
|
||||
InitHttpRequest(req);
|
||||
EXPECT_EQ(strlen(m) - 1, ParseHttpRequest(req, m, strlen(m)));
|
||||
EXPECT_EQ(kHttpPost, req->method);
|
||||
EXPECT_STREQ("/foo?bar%20hi", gc(slice(m, req->uri)));
|
||||
|
@ -155,3 +152,37 @@ Content-Length: 0\n\
|
|||
EXPECT_STREQ("0", gc(slice(m, req->headers[kHttpContentLength])));
|
||||
EXPECT_STREQ("", gc(slice(m, req->headers[kHttpEtag])));
|
||||
}
|
||||
|
||||
TEST(ParseHttpRequest, testChromeMessage) {
|
||||
static const char m[] = "\
|
||||
GET /tool/net/redbean.png HTTP/1.1\r\n\
|
||||
Host: 10.10.10.124:8080\r\n\
|
||||
Connection: keep-alive\r\n\
|
||||
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\r\n\
|
||||
DNT: \t1\r\n\
|
||||
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8\r\n\
|
||||
Referer: http://10.10.10.124:8080/\r\n\
|
||||
Accept-Encoding: gzip, deflate\r\n\
|
||||
Accept-Language: en-US,en;q=0.9\r\n\
|
||||
\r\n";
|
||||
EXPECT_EQ(strlen(m), ParseHttpRequest(req, m, strlen(m)));
|
||||
EXPECT_EQ(kHttpGet, req->method);
|
||||
EXPECT_STREQ("/tool/net/redbean.png", gc(slice(m, req->uri)));
|
||||
EXPECT_STREQ("HTTP/1.1", gc(slice(m, req->version)));
|
||||
EXPECT_STREQ("10.10.10.124:8080", gc(slice(m, req->headers[kHttpHost])));
|
||||
EXPECT_STREQ("1", gc(slice(m, req->headers[kHttpDnt])));
|
||||
EXPECT_STREQ("", gc(slice(m, req->headers[kHttpExpect])));
|
||||
EXPECT_STREQ("", gc(slice(m, req->headers[kHttpContentLength])));
|
||||
EXPECT_STREQ("", gc(slice(m, req->headers[kHttpExpect])));
|
||||
}
|
||||
|
||||
TEST(ParseHttpRequest, testExtendedHeaders) {
|
||||
static const char m[] = "\
|
||||
GET /foo?bar%20hi HTTP/1.0\r\n\
|
||||
X-User-Agent: hi\r\n\
|
||||
\r\n";
|
||||
EXPECT_EQ(strlen(m), ParseHttpRequest(req, m, strlen(m)));
|
||||
ASSERT_EQ(1, req->xheaders.n);
|
||||
EXPECT_STREQ("X-User-Agent", gc(slice(m, req->xheaders.p[0].k)));
|
||||
EXPECT_STREQ("hi", gc(slice(m, req->xheaders.p[0].v)));
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue