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

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 TEST(WebSocketExtensionParserTest, ParseEmpty) {
17 WebSocketExtensionParser parser;
18 parser.Parse("", 0);
19
20 EXPECT_TRUE(parser.has_error());
21 EXPECT_TRUE(parser.extensions().empty());
22 }
23
24 TEST(WebSocketExtensionParserTest, ParseSimple) {
25 WebSocketExtensionParser parser;
26 std::vector<WebSocketExtension> expected;
27 expected.push_back(WebSocketExtension("foo"));
28
29 parser.Parse("foo");
30
31 ASSERT_FALSE(parser.has_error());
32 EXPECT_EQ(expected, parser.extensions());
33 }
34
35 TEST(WebSocketExtensionParserTest, ParseOneExtensionWithOneParamWithoutValue) {
36 WebSocketExtensionParser parser;
37 WebSocketExtension foo("foo");
38 foo.Add(WebSocketExtension::Parameter("bar"));
39 std::vector<WebSocketExtension> expected;
40 expected.push_back(foo);
41
42 parser.Parse("\tfoo ; bar");
43
44 ASSERT_FALSE(parser.has_error());
45 EXPECT_EQ(expected, parser.extensions());
46 }
47
48 TEST(WebSocketExtensionParserTest, ParseOneExtensionWithOneParamWithValue) {
49 WebSocketExtensionParser parser;
50 WebSocketExtension foo("foo");
51 foo.Add(WebSocketExtension::Parameter("bar", "baz"));
52 std::vector<WebSocketExtension> expected;
53 expected.push_back(foo);
54
55 parser.Parse("foo ; bar= baz");
56
57 ASSERT_FALSE(parser.has_error());
58 EXPECT_EQ(expected, parser.extensions());
59 }
60
61 TEST(WebSocketExtensionParserTest, ParseOneExtensionWithParams) {
62 WebSocketExtensionParser parser;
63 WebSocketExtension foo("foo");
64 foo.Add(WebSocketExtension::Parameter("bar", "baz"));
65 foo.Add(WebSocketExtension::Parameter("hoge", "fuga"));
66 std::vector<WebSocketExtension> expected;
67 expected.push_back(foo);
68
69 parser.Parse("foo ; bar= baz;\t \thoge\r\n\t=fuga");
70
71 ASSERT_FALSE(parser.has_error());
72 EXPECT_EQ(expected, parser.extensions());
73 }
74
75 TEST(WebSocketExtensionParserTest, ParseMultipleExtensions) {
76 WebSocketExtensionParser parser;
77 WebSocketExtension foo("foo"), baz("baz"), hoge("hoge");
78 foo.Add(WebSocketExtension::Parameter("bar"));
79 hoge.Add(WebSocketExtension::Parameter("fuga", "piyo"));
80 std::vector<WebSocketExtension> expected;
81 expected.push_back(foo);
82 expected.push_back(baz);
83 expected.push_back(hoge);
84
85 parser.Parse("foo ; bar baz\thoge\r\n ;fuga=piyo");
86
87 ASSERT_FALSE(parser.has_error());
88 EXPECT_EQ(expected, parser.extensions());
89 }
90
91 TEST(WebSocketExtensionParserTest, InvalidPatterns) {
92 const char* patterns[] = {
93 "foo ", // trailing space
94 "fo\ao", // control in extension name
95 "fo\x01o", // control in extension name
96 "fo<o", // separator in extension name
97 "foo/", // separator in extension name
98 ";bar", // empty extension name
99 "foo; b\ar", // control in parameter name
100 "foo; b\x7fr", // control in parameter name
101 "foo; b[r", // separator in parameter name
102 "foo; ba:", // separator in parameter name
103 "foo; =baz", // empty parameter name
104 "foo; bar=", // empty parameter value
105 "foo; =", // empty parameter name and value
106 "foo; bar=b\x02z", // control in parameter value
107 "foo; bar=b@z", // separator in parameter value
108 "foo; bar=b\\z", // separator in parameter value
109 "foo; bar=b?z", // separator in parameter value
110 "\"foo\"", // quoted extension name
111 "foo; \"bar\"", // quoted parameter name
112 "foo; bar=\"\a2\"", // control in quoted parameter value
113 "foo; bar=\"b@z\"", // separator in quoted parameter value
114 "foo; bar=\"b\\\\z\"", // separator in quoted parameter value
115 "foo; bar=\"\"", // quoted emptyparameter value
116 "foo\r\nbar", // CRNL not followed by a space
117 };
118
119 for (size_t i = 0; i < arraysize(patterns); ++i) {
120 WebSocketExtensionParser parser;
121 parser.Parse(patterns[i]);
122 EXPECT_TRUE(parser.has_error());
123 EXPECT_TRUE(parser.extensions().empty());
124 }
125 }
126
127 TEST(WebSocketExtensionParserTest, QuotedParameterValue) {
128 WebSocketExtensionParser parser;
129 WebSocketExtension foo("foo");
130 foo.Add(WebSocketExtension::Parameter("bar", "baz"));
131 std::vector<WebSocketExtension> expected;
132 expected.push_back(foo);
133
134 parser.Parse("foo; bar=\"ba\\z\"");
135
136 ASSERT_FALSE(parser.has_error());
137 EXPECT_EQ(expected, parser.extensions());
138 }
139
140 } // namespace
141
142 } // 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