OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/ftp/ftp_ctrl_response_buffer.h" | 5 #include "net/ftp/ftp_ctrl_response_buffer.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include "net/base/net_errors.h" | 9 #include "net/base/net_errors.h" |
| 10 #include "net/test/gtest_util.h" |
| 11 #include "testing/gmock/include/gmock/gmock.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
11 | 13 |
| 14 using net::test::IsError; |
| 15 using net::test::IsOk; |
| 16 |
12 namespace net { | 17 namespace net { |
13 | 18 |
14 namespace { | 19 namespace { |
15 | 20 |
16 class FtpCtrlResponseBufferTest : public testing::Test { | 21 class FtpCtrlResponseBufferTest : public testing::Test { |
17 public: | 22 public: |
18 FtpCtrlResponseBufferTest() : buffer_(BoundNetLog()) {} | 23 FtpCtrlResponseBufferTest() : buffer_(BoundNetLog()) {} |
19 | 24 |
20 protected: | 25 protected: |
21 int PushDataToBuffer(const char* data) { | 26 int PushDataToBuffer(const char* data) { |
22 return buffer_.ConsumeData(data, strlen(data)); | 27 return buffer_.ConsumeData(data, strlen(data)); |
23 } | 28 } |
24 | 29 |
25 FtpCtrlResponseBuffer buffer_; | 30 FtpCtrlResponseBuffer buffer_; |
26 }; | 31 }; |
27 | 32 |
28 TEST_F(FtpCtrlResponseBufferTest, Basic) { | 33 TEST_F(FtpCtrlResponseBufferTest, Basic) { |
29 EXPECT_FALSE(buffer_.ResponseAvailable()); | 34 EXPECT_FALSE(buffer_.ResponseAvailable()); |
30 | 35 |
31 EXPECT_EQ(OK, PushDataToBuffer("200 Status Text\r\n")); | 36 EXPECT_THAT(PushDataToBuffer("200 Status Text\r\n"), IsOk()); |
32 EXPECT_TRUE(buffer_.ResponseAvailable()); | 37 EXPECT_TRUE(buffer_.ResponseAvailable()); |
33 | 38 |
34 FtpCtrlResponse response = buffer_.PopResponse(); | 39 FtpCtrlResponse response = buffer_.PopResponse(); |
35 EXPECT_FALSE(buffer_.ResponseAvailable()); | 40 EXPECT_FALSE(buffer_.ResponseAvailable()); |
36 EXPECT_EQ(200, response.status_code); | 41 EXPECT_EQ(200, response.status_code); |
37 ASSERT_EQ(1U, response.lines.size()); | 42 ASSERT_EQ(1U, response.lines.size()); |
38 EXPECT_EQ("Status Text", response.lines[0]); | 43 EXPECT_EQ("Status Text", response.lines[0]); |
39 } | 44 } |
40 | 45 |
41 TEST_F(FtpCtrlResponseBufferTest, Chunks) { | 46 TEST_F(FtpCtrlResponseBufferTest, Chunks) { |
42 EXPECT_EQ(OK, PushDataToBuffer("20")); | 47 EXPECT_THAT(PushDataToBuffer("20"), IsOk()); |
43 EXPECT_FALSE(buffer_.ResponseAvailable()); | 48 EXPECT_FALSE(buffer_.ResponseAvailable()); |
44 EXPECT_EQ(OK, PushDataToBuffer("0 Status")); | 49 EXPECT_THAT(PushDataToBuffer("0 Status"), IsOk()); |
45 EXPECT_FALSE(buffer_.ResponseAvailable()); | 50 EXPECT_FALSE(buffer_.ResponseAvailable()); |
46 EXPECT_EQ(OK, PushDataToBuffer(" Text")); | 51 EXPECT_THAT(PushDataToBuffer(" Text"), IsOk()); |
47 EXPECT_FALSE(buffer_.ResponseAvailable()); | 52 EXPECT_FALSE(buffer_.ResponseAvailable()); |
48 EXPECT_EQ(OK, PushDataToBuffer("\r")); | 53 EXPECT_THAT(PushDataToBuffer("\r"), IsOk()); |
49 EXPECT_FALSE(buffer_.ResponseAvailable()); | 54 EXPECT_FALSE(buffer_.ResponseAvailable()); |
50 EXPECT_EQ(OK, PushDataToBuffer("\n")); | 55 EXPECT_THAT(PushDataToBuffer("\n"), IsOk()); |
51 EXPECT_TRUE(buffer_.ResponseAvailable()); | 56 EXPECT_TRUE(buffer_.ResponseAvailable()); |
52 | 57 |
53 FtpCtrlResponse response = buffer_.PopResponse(); | 58 FtpCtrlResponse response = buffer_.PopResponse(); |
54 EXPECT_FALSE(buffer_.ResponseAvailable()); | 59 EXPECT_FALSE(buffer_.ResponseAvailable()); |
55 EXPECT_EQ(200, response.status_code); | 60 EXPECT_EQ(200, response.status_code); |
56 ASSERT_EQ(1U, response.lines.size()); | 61 ASSERT_EQ(1U, response.lines.size()); |
57 EXPECT_EQ("Status Text", response.lines[0]); | 62 EXPECT_EQ("Status Text", response.lines[0]); |
58 } | 63 } |
59 | 64 |
60 TEST_F(FtpCtrlResponseBufferTest, Continuation) { | 65 TEST_F(FtpCtrlResponseBufferTest, Continuation) { |
61 EXPECT_EQ(OK, PushDataToBuffer("230-FirstLine\r\n")); | 66 EXPECT_THAT(PushDataToBuffer("230-FirstLine\r\n"), IsOk()); |
62 EXPECT_FALSE(buffer_.ResponseAvailable()); | 67 EXPECT_FALSE(buffer_.ResponseAvailable()); |
63 | 68 |
64 EXPECT_EQ(OK, PushDataToBuffer("230-SecondLine\r\n")); | 69 EXPECT_THAT(PushDataToBuffer("230-SecondLine\r\n"), IsOk()); |
65 EXPECT_FALSE(buffer_.ResponseAvailable()); | 70 EXPECT_FALSE(buffer_.ResponseAvailable()); |
66 | 71 |
67 EXPECT_EQ(OK, PushDataToBuffer("230 LastLine\r\n")); | 72 EXPECT_THAT(PushDataToBuffer("230 LastLine\r\n"), IsOk()); |
68 EXPECT_TRUE(buffer_.ResponseAvailable()); | 73 EXPECT_TRUE(buffer_.ResponseAvailable()); |
69 | 74 |
70 FtpCtrlResponse response = buffer_.PopResponse(); | 75 FtpCtrlResponse response = buffer_.PopResponse(); |
71 EXPECT_FALSE(buffer_.ResponseAvailable()); | 76 EXPECT_FALSE(buffer_.ResponseAvailable()); |
72 EXPECT_EQ(230, response.status_code); | 77 EXPECT_EQ(230, response.status_code); |
73 ASSERT_EQ(3U, response.lines.size()); | 78 ASSERT_EQ(3U, response.lines.size()); |
74 EXPECT_EQ("FirstLine", response.lines[0]); | 79 EXPECT_EQ("FirstLine", response.lines[0]); |
75 EXPECT_EQ("SecondLine", response.lines[1]); | 80 EXPECT_EQ("SecondLine", response.lines[1]); |
76 EXPECT_EQ("LastLine", response.lines[2]); | 81 EXPECT_EQ("LastLine", response.lines[2]); |
77 } | 82 } |
78 | 83 |
79 TEST_F(FtpCtrlResponseBufferTest, MultilineContinuation) { | 84 TEST_F(FtpCtrlResponseBufferTest, MultilineContinuation) { |
80 EXPECT_EQ(OK, PushDataToBuffer("230-FirstLine\r\n")); | 85 EXPECT_THAT(PushDataToBuffer("230-FirstLine\r\n"), IsOk()); |
81 EXPECT_FALSE(buffer_.ResponseAvailable()); | 86 EXPECT_FALSE(buffer_.ResponseAvailable()); |
82 | 87 |
83 EXPECT_EQ(OK, PushDataToBuffer("Continued\r\n")); | 88 EXPECT_THAT(PushDataToBuffer("Continued\r\n"), IsOk()); |
84 EXPECT_FALSE(buffer_.ResponseAvailable()); | 89 EXPECT_FALSE(buffer_.ResponseAvailable()); |
85 | 90 |
86 EXPECT_EQ(OK, PushDataToBuffer("230-SecondLine\r\n")); | 91 EXPECT_THAT(PushDataToBuffer("230-SecondLine\r\n"), IsOk()); |
87 EXPECT_FALSE(buffer_.ResponseAvailable()); | 92 EXPECT_FALSE(buffer_.ResponseAvailable()); |
88 | 93 |
89 EXPECT_EQ(OK, PushDataToBuffer("215 Continued\r\n")); | 94 EXPECT_THAT(PushDataToBuffer("215 Continued\r\n"), IsOk()); |
90 EXPECT_FALSE(buffer_.ResponseAvailable()); | 95 EXPECT_FALSE(buffer_.ResponseAvailable()); |
91 | 96 |
92 EXPECT_EQ(OK, PushDataToBuffer("230 LastLine\r\n")); | 97 EXPECT_THAT(PushDataToBuffer("230 LastLine\r\n"), IsOk()); |
93 EXPECT_TRUE(buffer_.ResponseAvailable()); | 98 EXPECT_TRUE(buffer_.ResponseAvailable()); |
94 | 99 |
95 FtpCtrlResponse response = buffer_.PopResponse(); | 100 FtpCtrlResponse response = buffer_.PopResponse(); |
96 EXPECT_FALSE(buffer_.ResponseAvailable()); | 101 EXPECT_FALSE(buffer_.ResponseAvailable()); |
97 EXPECT_EQ(230, response.status_code); | 102 EXPECT_EQ(230, response.status_code); |
98 ASSERT_EQ(3U, response.lines.size()); | 103 ASSERT_EQ(3U, response.lines.size()); |
99 EXPECT_EQ("FirstLineContinued", response.lines[0]); | 104 EXPECT_EQ("FirstLineContinued", response.lines[0]); |
100 EXPECT_EQ("SecondLine215 Continued", response.lines[1]); | 105 EXPECT_EQ("SecondLine215 Continued", response.lines[1]); |
101 EXPECT_EQ("LastLine", response.lines[2]); | 106 EXPECT_EQ("LastLine", response.lines[2]); |
102 } | 107 } |
103 | 108 |
104 TEST_F(FtpCtrlResponseBufferTest, MultilineContinuationZeroLength) { | 109 TEST_F(FtpCtrlResponseBufferTest, MultilineContinuationZeroLength) { |
105 // For the corner case from bug 29322. | 110 // For the corner case from bug 29322. |
106 EXPECT_EQ(OK, PushDataToBuffer("230-\r\n")); | 111 EXPECT_THAT(PushDataToBuffer("230-\r\n"), IsOk()); |
107 EXPECT_FALSE(buffer_.ResponseAvailable()); | 112 EXPECT_FALSE(buffer_.ResponseAvailable()); |
108 | 113 |
109 EXPECT_EQ(OK, PushDataToBuffer("example.com\r\n")); | 114 EXPECT_THAT(PushDataToBuffer("example.com\r\n"), IsOk()); |
110 EXPECT_FALSE(buffer_.ResponseAvailable()); | 115 EXPECT_FALSE(buffer_.ResponseAvailable()); |
111 | 116 |
112 EXPECT_EQ(OK, PushDataToBuffer("230 LastLine\r\n")); | 117 EXPECT_THAT(PushDataToBuffer("230 LastLine\r\n"), IsOk()); |
113 EXPECT_TRUE(buffer_.ResponseAvailable()); | 118 EXPECT_TRUE(buffer_.ResponseAvailable()); |
114 | 119 |
115 FtpCtrlResponse response = buffer_.PopResponse(); | 120 FtpCtrlResponse response = buffer_.PopResponse(); |
116 EXPECT_FALSE(buffer_.ResponseAvailable()); | 121 EXPECT_FALSE(buffer_.ResponseAvailable()); |
117 EXPECT_EQ(230, response.status_code); | 122 EXPECT_EQ(230, response.status_code); |
118 ASSERT_EQ(2U, response.lines.size()); | 123 ASSERT_EQ(2U, response.lines.size()); |
119 EXPECT_EQ("example.com", response.lines[0]); | 124 EXPECT_EQ("example.com", response.lines[0]); |
120 EXPECT_EQ("LastLine", response.lines[1]); | 125 EXPECT_EQ("LastLine", response.lines[1]); |
121 } | 126 } |
122 | 127 |
123 TEST_F(FtpCtrlResponseBufferTest, SimilarContinuation) { | 128 TEST_F(FtpCtrlResponseBufferTest, SimilarContinuation) { |
124 EXPECT_EQ(OK, PushDataToBuffer("230-FirstLine\r\n")); | 129 EXPECT_THAT(PushDataToBuffer("230-FirstLine\r\n"), IsOk()); |
125 EXPECT_FALSE(buffer_.ResponseAvailable()); | 130 EXPECT_FALSE(buffer_.ResponseAvailable()); |
126 | 131 |
127 // Notice the space at the start of the line. It should be recognized | 132 // Notice the space at the start of the line. It should be recognized |
128 // as a continuation, and not the last line. | 133 // as a continuation, and not the last line. |
129 EXPECT_EQ(OK, PushDataToBuffer(" 230 Continued\r\n")); | 134 EXPECT_THAT(PushDataToBuffer(" 230 Continued\r\n"), IsOk()); |
130 EXPECT_FALSE(buffer_.ResponseAvailable()); | 135 EXPECT_FALSE(buffer_.ResponseAvailable()); |
131 | 136 |
132 EXPECT_EQ(OK, PushDataToBuffer("230 TrueLastLine\r\n")); | 137 EXPECT_THAT(PushDataToBuffer("230 TrueLastLine\r\n"), IsOk()); |
133 EXPECT_TRUE(buffer_.ResponseAvailable()); | 138 EXPECT_TRUE(buffer_.ResponseAvailable()); |
134 | 139 |
135 FtpCtrlResponse response = buffer_.PopResponse(); | 140 FtpCtrlResponse response = buffer_.PopResponse(); |
136 EXPECT_FALSE(buffer_.ResponseAvailable()); | 141 EXPECT_FALSE(buffer_.ResponseAvailable()); |
137 EXPECT_EQ(230, response.status_code); | 142 EXPECT_EQ(230, response.status_code); |
138 ASSERT_EQ(2U, response.lines.size()); | 143 ASSERT_EQ(2U, response.lines.size()); |
139 EXPECT_EQ("FirstLine 230 Continued", response.lines[0]); | 144 EXPECT_EQ("FirstLine 230 Continued", response.lines[0]); |
140 EXPECT_EQ("TrueLastLine", response.lines[1]); | 145 EXPECT_EQ("TrueLastLine", response.lines[1]); |
141 } | 146 } |
142 | 147 |
143 // The nesting of multi-line responses is not allowed. | 148 // The nesting of multi-line responses is not allowed. |
144 TEST_F(FtpCtrlResponseBufferTest, NoNesting) { | 149 TEST_F(FtpCtrlResponseBufferTest, NoNesting) { |
145 EXPECT_EQ(OK, PushDataToBuffer("230-FirstLine\r\n")); | 150 EXPECT_THAT(PushDataToBuffer("230-FirstLine\r\n"), IsOk()); |
146 EXPECT_FALSE(buffer_.ResponseAvailable()); | 151 EXPECT_FALSE(buffer_.ResponseAvailable()); |
147 | 152 |
148 EXPECT_EQ(OK, PushDataToBuffer("300-Continuation\r\n")); | 153 EXPECT_THAT(PushDataToBuffer("300-Continuation\r\n"), IsOk()); |
149 EXPECT_FALSE(buffer_.ResponseAvailable()); | 154 EXPECT_FALSE(buffer_.ResponseAvailable()); |
150 | 155 |
151 EXPECT_EQ(OK, PushDataToBuffer("300 Still continuation\r\n")); | 156 EXPECT_THAT(PushDataToBuffer("300 Still continuation\r\n"), IsOk()); |
152 EXPECT_FALSE(buffer_.ResponseAvailable()); | 157 EXPECT_FALSE(buffer_.ResponseAvailable()); |
153 | 158 |
154 EXPECT_EQ(OK, PushDataToBuffer("230 Real End\r\n")); | 159 EXPECT_THAT(PushDataToBuffer("230 Real End\r\n"), IsOk()); |
155 ASSERT_TRUE(buffer_.ResponseAvailable()); | 160 ASSERT_TRUE(buffer_.ResponseAvailable()); |
156 | 161 |
157 FtpCtrlResponse response = buffer_.PopResponse(); | 162 FtpCtrlResponse response = buffer_.PopResponse(); |
158 EXPECT_FALSE(buffer_.ResponseAvailable()); | 163 EXPECT_FALSE(buffer_.ResponseAvailable()); |
159 EXPECT_EQ(230, response.status_code); | 164 EXPECT_EQ(230, response.status_code); |
160 ASSERT_EQ(2U, response.lines.size()); | 165 ASSERT_EQ(2U, response.lines.size()); |
161 EXPECT_EQ("FirstLine300-Continuation300 Still continuation", | 166 EXPECT_EQ("FirstLine300-Continuation300 Still continuation", |
162 response.lines[0]); | 167 response.lines[0]); |
163 EXPECT_EQ("Real End", response.lines[1]); | 168 EXPECT_EQ("Real End", response.lines[1]); |
164 } | 169 } |
165 | 170 |
166 TEST_F(FtpCtrlResponseBufferTest, NonNumericResponse) { | 171 TEST_F(FtpCtrlResponseBufferTest, NonNumericResponse) { |
167 EXPECT_EQ(ERR_INVALID_RESPONSE, PushDataToBuffer("Non-numeric\r\n")); | 172 EXPECT_THAT(PushDataToBuffer("Non-numeric\r\n"), |
| 173 IsError(ERR_INVALID_RESPONSE)); |
168 EXPECT_FALSE(buffer_.ResponseAvailable()); | 174 EXPECT_FALSE(buffer_.ResponseAvailable()); |
169 } | 175 } |
170 | 176 |
171 TEST_F(FtpCtrlResponseBufferTest, OutOfRangeResponse) { | 177 TEST_F(FtpCtrlResponseBufferTest, OutOfRangeResponse) { |
172 EXPECT_EQ(ERR_INVALID_RESPONSE, PushDataToBuffer("777 OK?\r\n")); | 178 EXPECT_THAT(PushDataToBuffer("777 OK?\r\n"), IsError(ERR_INVALID_RESPONSE)); |
173 EXPECT_FALSE(buffer_.ResponseAvailable()); | 179 EXPECT_FALSE(buffer_.ResponseAvailable()); |
174 } | 180 } |
175 | 181 |
176 } // namespace | 182 } // namespace |
177 | 183 |
178 } // namespace net | 184 } // namespace net |
OLD | NEW |