OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/streams/stream_url_request_job.h" | 5 #include "content/browser/streams/stream_url_request_job.h" |
6 | 6 |
7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
10 #include "base/test/test_simple_task_runner.h" | 10 #include "base/test/test_simple_task_runner.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 | 61 |
62 url_request_job_factory_.SetProtocolHandler( | 62 url_request_job_factory_.SetProtocolHandler( |
63 "blob", base::MakeUnique<MockProtocolHandler>(registry_.get())); | 63 "blob", base::MakeUnique<MockProtocolHandler>(registry_.get())); |
64 url_request_context_.set_job_factory(&url_request_job_factory_); | 64 url_request_context_.set_job_factory(&url_request_job_factory_); |
65 } | 65 } |
66 | 66 |
67 void TearDown() override {} | 67 void TearDown() override {} |
68 | 68 |
69 void TestSuccessRequest(const GURL& url, | 69 void TestSuccessRequest(const GURL& url, |
70 const std::string& expected_response) { | 70 const std::string& expected_response) { |
71 TestRequest("GET", url, net::HttpRequestHeaders(), 200, expected_response); | 71 TestRequest("GET", url, net::HttpRequestHeaders(), 200, net::OK, |
| 72 expected_response); |
72 } | 73 } |
73 | 74 |
74 void TestRequest(const std::string& method, | 75 void TestRequest(const std::string& method, |
75 const GURL& url, | 76 const GURL& url, |
76 const net::HttpRequestHeaders& extra_headers, | 77 const net::HttpRequestHeaders& extra_headers, |
77 int expected_status_code, | 78 int expected_status_code, |
| 79 int expected_error_code, |
78 const std::string& expected_response) { | 80 const std::string& expected_response) { |
79 net::TestDelegate delegate; | 81 net::TestDelegate delegate; |
80 request_ = url_request_context_.CreateRequest( | 82 request_ = url_request_context_.CreateRequest( |
81 url, net::DEFAULT_PRIORITY, &delegate); | 83 url, net::DEFAULT_PRIORITY, &delegate); |
82 request_->set_method(method); | 84 request_->set_method(method); |
83 if (!extra_headers.IsEmpty()) | 85 if (!extra_headers.IsEmpty()) |
84 request_->SetExtraRequestHeaders(extra_headers); | 86 request_->SetExtraRequestHeaders(extra_headers); |
85 request_->Start(); | 87 request_->Start(); |
86 | 88 |
87 base::RunLoop().RunUntilIdle(); | 89 base::RunLoop().RunUntilIdle(); |
88 | 90 |
89 // Verify response. | 91 // Verify response. |
90 EXPECT_TRUE(request_->status().is_success()); | 92 if (expected_error_code) |
| 93 EXPECT_EQ(expected_error_code, request_->status().error()); |
| 94 else |
| 95 EXPECT_TRUE(request_->status().is_success()); |
91 ASSERT_TRUE(request_->response_headers()); | 96 ASSERT_TRUE(request_->response_headers()); |
92 EXPECT_EQ(expected_status_code, | 97 EXPECT_EQ(expected_status_code, |
93 request_->response_headers()->response_code()); | 98 request_->response_headers()->response_code()); |
94 EXPECT_EQ(expected_response, delegate.data_received()); | 99 EXPECT_EQ(expected_response, delegate.data_received()); |
95 } | 100 } |
96 | 101 |
97 protected: | 102 protected: |
98 base::MessageLoopForIO message_loop_; | 103 base::MessageLoopForIO message_loop_; |
99 std::unique_ptr<StreamRegistry> registry_; | 104 std::unique_ptr<StreamRegistry> registry_; |
100 | 105 |
101 net::URLRequestContext url_request_context_; | 106 net::URLRequestContext url_request_context_; |
102 net::URLRequestJobFactoryImpl url_request_job_factory_; | 107 net::URLRequestJobFactoryImpl url_request_job_factory_; |
103 std::unique_ptr<net::URLRequest> request_; | 108 std::unique_ptr<net::URLRequest> request_; |
104 }; | 109 }; |
105 | 110 |
106 TEST_F(StreamURLRequestJobTest, TestGetSimpleDataRequest) { | 111 TEST_F(StreamURLRequestJobTest, TestGetSimpleDataRequest) { |
107 scoped_refptr<Stream> stream( | 112 scoped_refptr<Stream> stream( |
108 new Stream(registry_.get(), NULL, kStreamURL)); | 113 new Stream(registry_.get(), NULL, kStreamURL)); |
109 | 114 |
110 scoped_refptr<net::StringIOBuffer> buffer( | 115 scoped_refptr<net::StringIOBuffer> buffer( |
111 new net::StringIOBuffer(kTestData1)); | 116 new net::StringIOBuffer(kTestData1)); |
112 | 117 |
113 stream->AddData(buffer, buffer->size()); | 118 stream->AddData(buffer, buffer->size()); |
114 stream->Finalize(); | 119 stream->Finalize(net::OK); |
115 | 120 |
116 TestSuccessRequest(kStreamURL, kTestData1); | 121 TestSuccessRequest(kStreamURL, kTestData1); |
117 } | 122 } |
118 | 123 |
119 TEST_F(StreamURLRequestJobTest, TestGetLargeStreamRequest) { | 124 TEST_F(StreamURLRequestJobTest, TestGetLargeStreamRequest) { |
120 scoped_refptr<Stream> stream( | 125 scoped_refptr<Stream> stream( |
121 new Stream(registry_.get(), NULL, kStreamURL)); | 126 new Stream(registry_.get(), NULL, kStreamURL)); |
122 | 127 |
123 std::string large_data; | 128 std::string large_data; |
124 large_data.reserve(kBufferSize * 5); | 129 large_data.reserve(kBufferSize * 5); |
125 for (int i = 0; i < kBufferSize * 5; ++i) | 130 for (int i = 0; i < kBufferSize * 5; ++i) |
126 large_data.append(1, static_cast<char>(i % 256)); | 131 large_data.append(1, static_cast<char>(i % 256)); |
127 | 132 |
128 scoped_refptr<net::StringIOBuffer> buffer( | 133 scoped_refptr<net::StringIOBuffer> buffer( |
129 new net::StringIOBuffer(large_data)); | 134 new net::StringIOBuffer(large_data)); |
130 | 135 |
131 stream->AddData(buffer, buffer->size()); | 136 stream->AddData(buffer, buffer->size()); |
132 stream->Finalize(); | 137 stream->Finalize(net::OK); |
133 TestSuccessRequest(kStreamURL, large_data); | 138 TestSuccessRequest(kStreamURL, large_data); |
134 } | 139 } |
135 | 140 |
136 TEST_F(StreamURLRequestJobTest, TestGetNonExistentStreamRequest) { | 141 TEST_F(StreamURLRequestJobTest, TestGetNonExistentStreamRequest) { |
137 net::TestDelegate delegate; | 142 net::TestDelegate delegate; |
138 request_ = url_request_context_.CreateRequest( | 143 request_ = url_request_context_.CreateRequest( |
139 kStreamURL, net::DEFAULT_PRIORITY, &delegate); | 144 kStreamURL, net::DEFAULT_PRIORITY, &delegate); |
140 request_->set_method("GET"); | 145 request_->set_method("GET"); |
141 request_->Start(); | 146 request_->Start(); |
142 | 147 |
143 base::RunLoop().RunUntilIdle(); | 148 base::RunLoop().RunUntilIdle(); |
144 | 149 |
145 // Verify response. | 150 // Verify response. |
146 EXPECT_FALSE(request_->status().is_success()); | 151 EXPECT_FALSE(request_->status().is_success()); |
147 } | 152 } |
148 | 153 |
149 TEST_F(StreamURLRequestJobTest, TestRangeDataRequest) { | 154 TEST_F(StreamURLRequestJobTest, TestRangeDataRequest) { |
150 scoped_refptr<Stream> stream( | 155 scoped_refptr<Stream> stream( |
151 new Stream(registry_.get(), NULL, kStreamURL)); | 156 new Stream(registry_.get(), NULL, kStreamURL)); |
152 | 157 |
153 scoped_refptr<net::StringIOBuffer> buffer( | 158 scoped_refptr<net::StringIOBuffer> buffer( |
154 new net::StringIOBuffer(kTestData2)); | 159 new net::StringIOBuffer(kTestData2)); |
155 | 160 |
156 stream->AddData(buffer, buffer->size()); | 161 stream->AddData(buffer, buffer->size()); |
157 stream->Finalize(); | 162 stream->Finalize(net::OK); |
158 | 163 |
159 net::HttpRequestHeaders extra_headers; | 164 net::HttpRequestHeaders extra_headers; |
160 extra_headers.SetHeader(net::HttpRequestHeaders::kRange, | 165 extra_headers.SetHeader(net::HttpRequestHeaders::kRange, |
161 net::HttpByteRange::Bounded(0, 3).GetHeaderValue()); | 166 net::HttpByteRange::Bounded(0, 3).GetHeaderValue()); |
162 TestRequest("GET", kStreamURL, extra_headers, | 167 TestRequest("GET", kStreamURL, extra_headers, |
163 200, std::string(kTestData2, 4)); | 168 200, net::OK, std::string(kTestData2, 4)); |
164 } | 169 } |
165 | 170 |
166 TEST_F(StreamURLRequestJobTest, TestInvalidRangeDataRequest) { | 171 TEST_F(StreamURLRequestJobTest, TestInvalidRangeDataRequest) { |
167 scoped_refptr<Stream> stream( | 172 scoped_refptr<Stream> stream( |
168 new Stream(registry_.get(), NULL, kStreamURL)); | 173 new Stream(registry_.get(), NULL, kStreamURL)); |
169 | 174 |
170 scoped_refptr<net::StringIOBuffer> buffer( | 175 scoped_refptr<net::StringIOBuffer> buffer( |
171 new net::StringIOBuffer(kTestData2)); | 176 new net::StringIOBuffer(kTestData2)); |
172 | 177 |
173 stream->AddData(buffer, buffer->size()); | 178 stream->AddData(buffer, buffer->size()); |
174 stream->Finalize(); | 179 stream->Finalize(net::OK); |
175 | 180 |
176 net::HttpRequestHeaders extra_headers; | 181 net::HttpRequestHeaders extra_headers; |
177 extra_headers.SetHeader(net::HttpRequestHeaders::kRange, | 182 extra_headers.SetHeader(net::HttpRequestHeaders::kRange, |
178 net::HttpByteRange::Bounded(1, 3).GetHeaderValue()); | 183 net::HttpByteRange::Bounded(1, 3).GetHeaderValue()); |
179 TestRequest("GET", kStreamURL, extra_headers, 405, std::string()); | 184 TestRequest("GET", kStreamURL, extra_headers, 405, |
| 185 net::ERR_METHOD_NOT_SUPPORTED, std::string()); |
180 } | 186 } |
181 | 187 |
182 } // namespace content | 188 } // namespace content |
OLD | NEW |