Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Side by Side Diff: net/websockets/websocket_extension_parser_test.cc

Issue 23872029: Implement WebSocketExtensionParser (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "net/websockets/websocket_extension_parser.h"
6
7 #include <string>
8
9 #include "net/websockets/websocket_extension.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace net {
13
14 namespace {
15
16 bool Equals(const std::vector<WebSocketExtension>& x,
17 const std::vector<WebSocketExtension>& y) {
18 if (x.size() != y.size()) return false;
19 for (size_t i = 0; i < x.size(); ++i) {
20 if (!x[i].Equals(y[i])) return false;
21 }
22 return true;
23 }
24
25 TEST(WebSocketExtensionParserTest, ParseEmpty) {
26 WebSocketExtensionParser parser;
27 parser.Parse("", 0);
28
29 EXPECT_TRUE(parser.has_error());
30 EXPECT_TRUE(parser.extensions().empty());
31 }
32
33 TEST(WebSocketExtensionParserTest, ParseSimple) {
34 WebSocketExtensionParser parser;
35 std::vector<WebSocketExtension> expected;
36 expected.push_back(WebSocketExtension("foo"));
37
38 parser.Parse("foo");
39
40 ASSERT_FALSE(parser.has_error());
41 EXPECT_TRUE(Equals(expected, parser.extensions()));
42 }
43
44 TEST(WebSocketExtensionParserTest, ParseOneExtensionWithOneParamWithoutValue) {
45 WebSocketExtensionParser parser;
46 WebSocketExtension foo("foo");
47 foo.Add(WebSocketExtension::Parameter("bar"));
48 std::vector<WebSocketExtension> expected;
49 expected.push_back(foo);
50
51 parser.Parse("\tfoo ; bar");
52
53 ASSERT_FALSE(parser.has_error());
54 EXPECT_TRUE(Equals(expected, parser.extensions()));
55 }
56
57 TEST(WebSocketExtensionParserTest, ParseOneExtensionWithOneParamWithValue) {
58 WebSocketExtensionParser parser;
59 WebSocketExtension foo("foo");
60 foo.Add(WebSocketExtension::Parameter("bar", "baz"));
61 std::vector<WebSocketExtension> expected;
62 expected.push_back(foo);
63
64 parser.Parse("foo ; bar= baz");
65
66 ASSERT_FALSE(parser.has_error());
67 EXPECT_TRUE(Equals(expected, parser.extensions()));
68 }
69
70 TEST(WebSocketExtensionParserTest, ParseOneExtensionWithParams) {
71 WebSocketExtensionParser parser;
72 WebSocketExtension foo("foo");
73 foo.Add(WebSocketExtension::Parameter("bar", "baz"));
74 foo.Add(WebSocketExtension::Parameter("hoge", "fuga"));
75 std::vector<WebSocketExtension> expected;
76 expected.push_back(foo);
77
78 parser.Parse("foo ; bar= baz;\t \thoge\r\n\t=fuga");
79
80 ASSERT_FALSE(parser.has_error());
81 EXPECT_TRUE(Equals(expected, parser.extensions()));
82 }
83
84 TEST(WebSocketExtensionParserTest, ParseMultipleExtensions) {
85 WebSocketExtensionParser parser;
86 WebSocketExtension foo("foo"), baz("baz"), hoge("hoge");
87 foo.Add(WebSocketExtension::Parameter("bar"));
88 hoge.Add(WebSocketExtension::Parameter("fuga", "piyo"));
89 std::vector<WebSocketExtension> expected;
90 expected.push_back(foo);
91 expected.push_back(baz);
92 expected.push_back(hoge);
93
94 parser.Parse("foo ; bar baz\thoge\r\n ;fuga=piyo");
Adam Rice 2013/09/17 07:45:58 This is not correct; the header would be formatted
yhirano 2013/09/17 09:17:39 Deleted
95
96 ASSERT_FALSE(parser.has_error());
97 EXPECT_TRUE(Equals(expected, parser.extensions()));
98 }
99
100 TEST(WebSocketExtensionParserTest, InvalidPatterns) {
101 const char* patterns[] = {
102 "foo ", // trailing space
103 "fo\ao", // control in extension name
104 "fo\x01o", // control in extension name
105 "fo<o", // separator in extension name
106 "foo/", // separator in extension name
107 ";bar", // empty extension name
108 "foo; b\ar", // control in parameter name
109 "foo; b\x7fr", // control in parameter name
110 "foo; b[r", // separator in parameter name
111 "foo; ba:", // separator in parameter name
112 "foo; =baz", // empty parameter name
113 "foo; bar=", // empty parameter value
114 "foo; =", // empty parameter name and value
115 "foo; bar=b\x02z", // control in parameter value
116 "foo; bar=b@z", // separator in parameter value
117 "foo; bar=b\\z", // separator in parameter value
118 "foo; bar=b?z", // separator in parameter value
119 "\"foo\"", // quoted extension name
120 "foo; \"bar\"", // quoted parameter name
121 "foo; bar=\"\a2\"", // control in quoted parameter value
122 "foo; bar=\"b@z\"", // separator in quoted parameter value
123 "foo; bar=\"b\\\\z\"", // separator in quoted parameter value
124 "foo; bar=\"\"", // quoted emptyparameter value
125 "foo\r\nbar", // CRNL not followed by a space
126 };
127
128 for (size_t i = 0; i < arraysize(patterns); ++i) {
129 WebSocketExtensionParser parser;
130 parser.Parse(patterns[i]);
131 EXPECT_TRUE(parser.has_error());
132 EXPECT_TRUE(parser.extensions().empty());
133 }
134 }
135
136 TEST(WebSocketExtensionParserTest, QuotedParameterValue) {
137 WebSocketExtensionParser parser;
138 WebSocketExtension foo("foo");
139 foo.Add(WebSocketExtension::Parameter("bar", "baz"));
140 std::vector<WebSocketExtension> expected;
141 expected.push_back(foo);
142
143 parser.Parse("foo; bar=\"ba\\z\"");
144
145 ASSERT_FALSE(parser.has_error());
146 EXPECT_TRUE(Equals(expected, parser.extensions()));
147 }
148
149 } // namespace
150
151 } // namespace net
OLDNEW
« net/websockets/websocket_extension_parser.cc ('K') | « net/websockets/websocket_extension_parser.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698