Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

Add tests for @tomika's patch #144

Closed
wants to merge 4 commits into from

3 participants

@cmr

This should close #106.

@cmr

Tests shouldn't be plural. My bad.

@cmr cmr referenced this pull request
Closed

Generic method #145

@bnoordhuis

LGTM.

@tomika: Can you sign the CLA?

@tomika

OCIC ;o)

@bnoordhuis

Thanks. Squashed and landed with attribution in 0938fe5.

@bnoordhuis bnoordhuis closed this
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
This page is out of date. Refresh to see the latest.
Showing with 26 additions and 0 deletions.
  1. +1 −0  http_parser.c
  2. +2 −0  http_parser.h
  3. +23 −0 test.c
View
1  http_parser.c
@@ -866,6 +866,7 @@ size_t http_parser_execute (http_parser *parser,
case s_res_line_almost_done:
STRICT_CHECK(ch != LF);
parser->state = s_header_field_start;
+ CALLBACK_NOTIFY(status_complete);
break;
case s_start_req:
View
2  http_parser.h
@@ -142,6 +142,7 @@ enum flags
\
/* Callback-related errors */ \
XX(CB_message_begin, "the on_message_begin callback failed") \
+ XX(CB_status_complete, "the on_status_complete callback failed") \
XX(CB_url, "the on_url callback failed") \
XX(CB_header_field, "the on_header_field callback failed") \
XX(CB_header_value, "the on_header_value callback failed") \
@@ -222,6 +223,7 @@ struct http_parser {
struct http_parser_settings {
http_cb on_message_begin;
http_data_cb on_url;
+ http_cb on_status_complete;
http_data_cb on_header_field;
http_data_cb on_header_value;
http_cb on_headers_complete;
View
23 test.c
@@ -1492,6 +1492,13 @@ request_url_cb (http_parser *p, const char *buf, size_t len)
}
int
+status_complete_cb (http_parser *p) {
+ assert(p == parser);
+ p->data++;
+ return 0;
+}
+
+int
header_field_cb (http_parser *p, const char *buf, size_t len)
{
assert(p == parser);
@@ -3089,6 +3096,20 @@ create_large_chunked_message (int body_size_in_kb, const char* headers)
return buf;
}
+void
+test_status_complete (void)
+{
+ parser_init(HTTP_RESPONSE);
+ parser->data = 0;
+ http_parser_settings settings = settings_null;
+ settings.on_status_complete = status_complete_cb;
+
+ char *response = "don't mind me, just a simple response";
+ http_parser_execute(parser, &settings, response, strlen(response));
+ assert(parser->data == (void*)0); // the status_complete callback was never called
+ assert(parser->http_errno == HPE_INVALID_CONSTANT); // the errno for an invalid status line
+}
+
/* Verify that we can pause parsing at any of the bytes in the
* message and still get the result that we're expecting. */
void
@@ -3396,6 +3417,8 @@ main (void)
, &requests[CONNECT_REQUEST]
);
+ test_status_complete();
+
puts("requests okay");
return 0;
Something went wrong with that request. Please try again.