@@ -47,7 +47,16 @@ BOOST_AUTO_TEST_CASE(incremental_parser_parse_http_method) {
47
47
BOOST_CHECK_EQUAL (parsed_ok, true );
48
48
BOOST_CHECK (!boost::empty (result_range));
49
49
std::string parsed (boost::begin (result_range), boost::end (result_range));
50
- std::cout << " PARSED: " << parsed << " " << p.state () << std::endl;
50
+ std::cout << " PARSED: " << parsed << " [state:" << p.state () << " ] " << std::endl;
51
+
52
+ std::string invalid_http_method = " get " ;
53
+ p.reset ();
54
+ fusion::tie (parsed_ok, result_range) = p.parse_until (
55
+ request_parser_type::method_done
56
+ , invalid_http_method);
57
+ BOOST_CHECK_EQUAL (parsed_ok, false );
58
+ parsed.assign (boost::begin (result_range), boost::end (result_range));
59
+ std::cout << " PARSED: " << parsed << " [state:" << p.state () << " ] " << std::endl;
51
60
}
52
61
53
62
BOOST_AUTO_TEST_CASE (incremental_parser_parse_http_uri) {
@@ -63,7 +72,15 @@ BOOST_AUTO_TEST_CASE(incremental_parser_parse_http_uri) {
63
72
BOOST_CHECK_EQUAL (parsed_ok, true );
64
73
BOOST_CHECK (!boost::empty (result_range));
65
74
std::string parsed (boost::begin (result_range), boost::end (result_range));
66
- std::cout << " PARSED: " << parsed << " " << p.state () << std::endl;
75
+ std::cout << " PARSED: " << parsed << " [state:" << p.state () << " ] " << std::endl;
76
+
77
+ std::string invalid_http_request = " GET /\t HTTP/1.1\r\n " ;
78
+ p.reset ();
79
+ fusion::tie (parsed_ok, result_range) = p.parse_until (
80
+ request_parser_type::uri_done, invalid_http_request);
81
+ BOOST_CHECK_EQUAL (parsed_ok, false );
82
+ parsed.assign (boost::begin (result_range), boost::end (result_range));
83
+ std::cout << " PARSED: " << parsed << " [state:" << p.state () << " ] " << std::endl;
67
84
}
68
85
69
86
BOOST_AUTO_TEST_CASE (incremental_parser_parse_http_version) {
@@ -79,5 +96,39 @@ BOOST_AUTO_TEST_CASE(incremental_parser_parse_http_version) {
79
96
BOOST_CHECK_EQUAL (parsed_ok, true );
80
97
BOOST_CHECK (!boost::empty (result_range));
81
98
std::string parsed (boost::begin (result_range), boost::end (result_range));
82
- std::cout << " PARSED: " << parsed << " " << p.state () << std::endl;
99
+ std::cout << " PARSED: " << parsed << " [state:" << p.state () << " ] " << std::endl;
100
+
101
+ std::string invalid_http_request = " GET / HTTP 1.1\r\n " ;
102
+ p.reset ();
103
+ fusion::tie (parsed_ok, result_range) = p.parse_until (
104
+ request_parser_type::version_done, invalid_http_request);
105
+ BOOST_CHECK_EQUAL (parsed_ok, false );
106
+ parsed.assign (boost::begin (result_range), boost::end (result_range));
107
+ std::cout << " PARSED: " << parsed << " [state:" << p.state () << " ] " << std::endl;
108
+ }
109
+
110
+ BOOST_AUTO_TEST_CASE (incremental_parser_parse_http_headers) {
111
+ request_parser<tags::default_string> p;
112
+ logic::tribool parsed_ok = false ;
113
+ typedef request_parser<tags::default_string> request_parser_type;
114
+ typedef boost::iterator_range<std::string::const_iterator> range_type;
115
+ range_type result_range;
116
+
117
+ std::string valid_http_request = " GET / HTTP/1.1\r\n Host: cpp-netlib.org\r\n\r\n " ;
118
+ fusion::tie (parsed_ok, result_range) = p.parse_until (
119
+ request_parser_type::headers_done, valid_http_request);
120
+ BOOST_CHECK_EQUAL (parsed_ok, true );
121
+ BOOST_CHECK (!boost::empty (result_range));
122
+ std::string parsed (boost::begin (result_range), boost::end (result_range));
123
+ std::cout << " PARSED: " << parsed << " [state:" << p.state () << " ] " << std::endl;
124
+
125
+ valid_http_request = " GET / HTTP/1.1\r\n Host: cpp-netlib.org\r\n Connection: close\r\n\r\n " ;
126
+ p.reset ();
127
+ fusion::tie (parsed_ok, result_range) = p.parse_until (
128
+ request_parser_type::headers_done, valid_http_request);
129
+ BOOST_CHECK_EQUAL (parsed_ok, true );
130
+ BOOST_CHECK (!boost::empty (result_range));
131
+ parsed.assign (boost::begin (result_range), boost::end (result_range));
132
+ std::cout << " PARSED: " << parsed << " [state:" << p.state () << " ] " << std::endl;
83
133
}
134
+
0 commit comments