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

Unified Diff: net/url_request/url_request_http_job_unittest.cc

Issue 2373003003: Switch to use net::FilterSourceStream from net::Filter (Closed)
Patch Set: rebased onto sdch fix Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/url_request/url_request_http_job.cc ('k') | net/url_request/url_request_job.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/url_request/url_request_http_job_unittest.cc
diff --git a/net/url_request/url_request_http_job_unittest.cc b/net/url_request/url_request_http_job_unittest.cc
index 4d93df71ae28b7364c5fe8dbd72621a88a05ad69..d2e308111f1f0e2ad3596b3cd740c7c2b3001fe3 100644
--- a/net/url_request/url_request_http_job_unittest.cc
+++ b/net/url_request/url_request_http_job_unittest.cc
@@ -10,6 +10,7 @@
#include <memory>
#include "base/compiler_specific.h"
+#include "base/macros.h"
#include "base/memory/ptr_util.h"
#include "base/memory/ref_counted.h"
#include "base/run_loop.h"
@@ -47,21 +48,117 @@ namespace {
using ::testing::Return;
+const char kSimpleGetMockWrite[] =
+ "GET / HTTP/1.1\r\n"
+ "Host: www.example.com\r\n"
+ "Connection: keep-alive\r\n"
+ "User-Agent:\r\n"
+ "Accept-Encoding: gzip, deflate\r\n"
+ "Accept-Language: en-us,fr\r\n\r\n";
+
// Inherit from URLRequestHttpJob to expose the priority and some
// other hidden functions.
class TestURLRequestHttpJob : public URLRequestHttpJob {
public:
explicit TestURLRequestHttpJob(URLRequest* request)
- : URLRequestHttpJob(request, request->context()->network_delegate(),
- request->context()->http_user_agent_settings()) {}
+ : URLRequestHttpJob(request,
+ request->context()->network_delegate(),
+ request->context()->http_user_agent_settings()),
+ use_null_source_stream_(false) {}
+
~TestURLRequestHttpJob() override {}
+ // URLRequestJob implementation:
+ std::unique_ptr<SourceStream> SetUpSourceStream() override {
+ if (use_null_source_stream_)
+ return nullptr;
+ return URLRequestHttpJob::SetUpSourceStream();
+ }
+
+ void set_use_null_source_stream(bool use_null_source_stream) {
+ use_null_source_stream_ = use_null_source_stream;
+ }
+
using URLRequestHttpJob::SetPriority;
using URLRequestHttpJob::Start;
using URLRequestHttpJob::Kill;
using URLRequestHttpJob::priority;
+
+ private:
+ bool use_null_source_stream_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestURLRequestHttpJob);
};
+class URLRequestHttpJobSetUpSourceTest : public ::testing::Test {
+ public:
+ URLRequestHttpJobSetUpSourceTest() : context_(true) {
+ test_job_interceptor_ = new TestJobInterceptor();
+ EXPECT_TRUE(test_job_factory_.SetProtocolHandler(
+ url::kHttpScheme, base::WrapUnique(test_job_interceptor_)));
+ context_.set_job_factory(&test_job_factory_);
+ context_.set_client_socket_factory(&socket_factory_);
+ context_.Init();
+ }
+
+ protected:
+ MockClientSocketFactory socket_factory_;
+ // |test_job_interceptor_| is owned by |test_job_factory_|.
+ TestJobInterceptor* test_job_interceptor_;
+ URLRequestJobFactoryImpl test_job_factory_;
+
+ TestURLRequestContext context_;
+ TestDelegate delegate_;
+};
+
+// Tests that if SetUpSourceStream() returns nullptr, the request fails.
+TEST_F(URLRequestHttpJobSetUpSourceTest, SetUpSourceFails) {
+ MockWrite writes[] = {MockWrite(kSimpleGetMockWrite)};
+ MockRead reads[] = {MockRead("HTTP/1.1 200 OK\r\n"
+ "Content-Length: 12\r\n\r\n"),
+ MockRead("Test Content")};
+
+ StaticSocketDataProvider socket_data(reads, arraysize(reads), writes,
+ arraysize(writes));
+ socket_factory_.AddSocketDataProvider(&socket_data);
+
+ std::unique_ptr<URLRequest> request = context_.CreateRequest(
+ GURL("http://www.example.com"), DEFAULT_PRIORITY, &delegate_);
+ std::unique_ptr<TestURLRequestHttpJob> job(
+ new TestURLRequestHttpJob(request.get()));
+ job->set_use_null_source_stream(true);
+ test_job_interceptor_->set_main_intercept_job(std::move(job));
+ request->Start();
+
+ base::RunLoop().Run();
+ EXPECT_EQ(ERR_CONTENT_DECODING_INIT_FAILED, delegate_.request_status());
+}
+
+// Tests that if there is an unknown content-encoding type, the raw response
+// body is passed through.
+TEST_F(URLRequestHttpJobSetUpSourceTest, UnknownEncoding) {
+ MockWrite writes[] = {MockWrite(kSimpleGetMockWrite)};
+ MockRead reads[] = {MockRead("HTTP/1.1 200 OK\r\n"
+ "Content-Encoding: foo, gzip\r\n"
+ "Content-Length: 12\r\n\r\n"),
+ MockRead("Test Content")};
+
+ StaticSocketDataProvider socket_data(reads, arraysize(reads), writes,
+ arraysize(writes));
+ socket_factory_.AddSocketDataProvider(&socket_data);
+
+ std::unique_ptr<URLRequest> request = context_.CreateRequest(
+ GURL("http://www.example.com"), DEFAULT_PRIORITY, &delegate_);
+ std::unique_ptr<TestURLRequestHttpJob> job(
+ new TestURLRequestHttpJob(request.get()));
+ test_job_interceptor_->set_main_intercept_job(std::move(job));
+ request->Start();
+
+ base::RunLoop().Run();
+ EXPECT_EQ(OK, delegate_.request_status());
+ EXPECT_EQ("Test Content", delegate_.data_received());
+}
+
class URLRequestHttpJobTest : public ::testing::Test {
protected:
URLRequestHttpJobTest() : context_(true) {
@@ -136,14 +233,6 @@ class URLRequestHttpJobWithMockSocketsTest : public ::testing::Test {
std::unique_ptr<TestURLRequestContext> context_;
};
-const char kSimpleGetMockWrite[] =
- "GET / HTTP/1.1\r\n"
- "Host: www.example.com\r\n"
- "Connection: keep-alive\r\n"
- "User-Agent:\r\n"
- "Accept-Encoding: gzip, deflate\r\n"
- "Accept-Language: en-us,fr\r\n\r\n";
-
TEST_F(URLRequestHttpJobWithMockSocketsTest,
TestContentLengthSuccessfulRequest) {
MockWrite writes[] = {MockWrite(kSimpleGetMockWrite)};
@@ -821,7 +910,7 @@ class URLRequestHttpJobWebSocketTest
class MockCreateHelper : public WebSocketHandshakeStreamBase::CreateHelper {
public:
// GoogleMock does not appear to play nicely with move-only types like
- // scoped_ptr, so this forwarding method acts as a workaround.
+ // std::unique_ptr, so this forwarding method acts as a workaround.
WebSocketHandshakeStreamBase* CreateBasicStream(
std::unique_ptr<ClientSocketHandle> connection,
bool using_proxy) override {
« no previous file with comments | « net/url_request/url_request_http_job.cc ('k') | net/url_request/url_request_job.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698