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

Unified Diff: net/cert_net/cert_net_fetcher_impl_unittest.cc

Issue 2453093004: Remove dependence on a message loop for net::PathBuilder. (Closed)
Patch Set: remove unnecessary forward decl Created 4 years, 1 month 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/cert_net/cert_net_fetcher_impl.cc ('k') | net/net.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/cert_net/cert_net_fetcher_impl_unittest.cc
diff --git a/net/cert_net/cert_net_fetcher_impl_unittest.cc b/net/cert_net/cert_net_fetcher_impl_unittest.cc
index da2c116064a68a26628cec9f62cb6095dba94504..0108c5623661d6cb72faaf1ebfd1934c1ba4538d 100644
--- a/net/cert_net/cert_net_fetcher_impl_unittest.cc
+++ b/net/cert_net/cert_net_fetcher_impl_unittest.cc
@@ -10,6 +10,8 @@
#include "base/compiler_specific.h"
#include "base/memory/ptr_util.h"
#include "base/run_loop.h"
+#include "base/synchronization/lock.h"
+#include "net/cert/cert_net_fetcher.h"
#include "net/cert/ct_policy_enforcer.h"
#include "net/cert/mock_cert_verifier.h"
#include "net/cert/multi_log_ct_verifier.h"
@@ -27,8 +29,6 @@ using net::test::IsOk;
// TODO(eroman): Test that cookies aren't sent.
-using base::ASCIIToUTF16;
-
namespace net {
namespace {
@@ -77,96 +77,107 @@ class RequestContext : public URLRequestContext {
URLRequestContextStorage storage_;
};
-class FetchResult {
- public:
- FetchResult(Error net_error, const std::vector<uint8_t>& response_body)
- : net_error_(net_error), response_body_(response_body) {}
+// Wait for the request to complete, and verify that it completed successfully
+// with the indicated bytes.
+void VerifySuccess(const std::string& expected_body,
+ CertNetFetcher::Request* request) {
+ Error actual_error;
+ std::vector<uint8_t> actual_body;
+ request->WaitForResult(&actual_error, &actual_body);
- void VerifySuccess(const std::string& expected_body) {
- EXPECT_THAT(net_error_, IsOk());
- EXPECT_EQ(expected_body,
- std::string(response_body_.begin(), response_body_.end()));
- }
+ EXPECT_THAT(actual_error, IsOk());
+ EXPECT_EQ(expected_body, std::string(actual_body.begin(), actual_body.end()));
+}
- void VerifyFailure(Error expected_error) {
- EXPECT_EQ(expected_error, net_error_);
- EXPECT_EQ(0u, response_body_.size());
- }
+// Wait for the request to complete, and verify that it completed with the
+// indicated failure.
+void VerifyFailure(Error expected_error, CertNetFetcher::Request* request) {
+ Error actual_error;
+ std::vector<uint8_t> actual_body;
+ request->WaitForResult(&actual_error, &actual_body);
- private:
- const Error net_error_;
- const std::vector<uint8_t> response_body_;
+ EXPECT_EQ(expected_error, actual_error);
+ EXPECT_EQ(0u, actual_body.size());
+}
+
+struct NetworkThreadState {
+ TestNetworkDelegate network_delegate;
+ RequestContext context;
};
-// Helper to synchronously wait for the fetch completion. This is similar to
-// net's TestCompletionCallback, but built around FetchCallback.
-class TestFetchCallback {
+class CertNetFetcherImplTest : public PlatformTest {
public:
- TestFetchCallback()
- : callback_(base::Bind(&TestFetchCallback::OnCallback,
- base::Unretained(this))) {}
-
- const CertNetFetcher::FetchCallback& callback() const { return callback_; }
-
- std::unique_ptr<FetchResult> WaitForResult() {
- DCHECK(quit_closure_.is_null());
- while (!HasResult()) {
- base::RunLoop run_loop;
- quit_closure_ = run_loop.QuitClosure();
- run_loop.Run();
- quit_closure_.Reset();
- }
- return std::move(result_);
+ CertNetFetcherImplTest() {
+ test_server_.AddDefaultHandlers(base::FilePath(kDocRoot));
+ StartNetworkThread();
}
- bool HasResult() const { return result_.get(); }
-
- // Sets an extra action (in addition to recording the result) that is run when
- // the FetchCallback is invoked.
- void set_extra_closure(const base::Closure& closure) {
- extra_closure_ = closure;
+ ~CertNetFetcherImplTest() override {
+ network_thread_->task_runner()->PostTask(
+ FROM_HERE, base::Bind(&CertNetFetcherImplTest::TeardownOnNetworkThread,
+ base::Unretained(this)));
+ network_thread_->Stop();
}
- private:
- void OnCallback(Error net_error, const std::vector<uint8_t>& response_body) {
- DCHECK(!HasResult());
- result_.reset(new FetchResult(net_error, response_body));
+ protected:
+ std::unique_ptr<CertNetFetcher> CreateFetcher() {
+ scoped_refptr<TrivialURLRequestContextGetter> context_getter(
+ new TrivialURLRequestContextGetter(&state_->context,
+ network_thread_->task_runner()));
+ return CreateCertNetFetcher(context_getter.get());
+ }
- if (!extra_closure_.is_null())
- extra_closure_.Run();
+ int NumCreatedRequests() {
+ int count = 0;
+ base::WaitableEvent done(base::WaitableEvent::ResetPolicy::MANUAL,
+ base::WaitableEvent::InitialState::NOT_SIGNALED);
+ network_thread_->task_runner()->PostTask(
+ FROM_HERE, base::Bind(&CertNetFetcherImplTest::CountCreatedRequests,
+ base::Unretained(this), &count, &done));
+ done.Wait();
+ return count;
+ }
- if (!quit_closure_.is_null())
- quit_closure_.Run();
+ void StartNetworkThread() {
+ // Start the network thread.
+ network_thread_.reset(new base::Thread("network thread"));
+ base::Thread::Options options(base::MessageLoop::TYPE_IO, 0);
+ EXPECT_TRUE(network_thread_->StartWithOptions(options));
+
+ // Initialize the URLRequestContext (and wait till it has completed).
+ base::WaitableEvent done(base::WaitableEvent::ResetPolicy::MANUAL,
+ base::WaitableEvent::InitialState::NOT_SIGNALED);
+ network_thread_->task_runner()->PostTask(
+ FROM_HERE, base::Bind(&CertNetFetcherImplTest::InitOnNetworkThread,
+ base::Unretained(this), &done));
+ done.Wait();
}
- CertNetFetcher::FetchCallback callback_;
- std::unique_ptr<FetchResult> result_;
- base::Closure quit_closure_;
- base::Closure extra_closure_;
-};
+ void InitOnNetworkThread(base::WaitableEvent* done) {
+ state_.reset(new NetworkThreadState);
+ state_->context.set_network_delegate(&state_->network_delegate);
+ done->Signal();
+ }
-} // namespace
+ void TeardownOnNetworkThread() { state_.reset(); }
-class CertNetFetcherImplTest : public PlatformTest {
- public:
- CertNetFetcherImplTest() {
- test_server_.AddDefaultHandlers(base::FilePath(kDocRoot));
- context_.set_network_delegate(&network_delegate_);
+ void CountCreatedRequests(int* count, base::WaitableEvent* done) {
+ *count = state_->network_delegate.created_requests();
+ done->Signal();
}
- protected:
EmbeddedTestServer test_server_;
- TestNetworkDelegate network_delegate_;
- RequestContext context_;
+ std::unique_ptr<base::Thread> network_thread_;
+
+ std::unique_ptr<NetworkThreadState> state_;
};
// Helper to start an AIA fetch using default parameters.
WARN_UNUSED_RESULT std::unique_ptr<CertNetFetcher::Request> StartRequest(
CertNetFetcher* fetcher,
- const GURL& url,
- const TestFetchCallback& callback) {
+ const GURL& url) {
return fetcher->FetchCaIssuers(url, CertNetFetcher::DEFAULT,
- CertNetFetcher::DEFAULT, callback.callback());
+ CertNetFetcher::DEFAULT);
}
// Flaky on Android. See http://crbug.com/646147.
@@ -180,37 +191,29 @@ WARN_UNUSED_RESULT std::unique_ptr<CertNetFetcher::Request> StartRequest(
TEST_F(CertNetFetcherImplTest, MAYBE_ParallelFetchNoDuplicates) {
ASSERT_TRUE(test_server_.Start());
- CertNetFetcherImpl fetcher(&context_);
- TestFetchCallback callback1;
- TestFetchCallback callback2;
- TestFetchCallback callback3;
+ auto fetcher = CreateFetcher();
// Request a URL with Content-Type "application/pkix-cert"
GURL url1 = test_server_.GetURL("/cert.crt");
std::unique_ptr<CertNetFetcher::Request> request1 =
- StartRequest(&fetcher, url1, callback1);
+ StartRequest(fetcher.get(), url1);
// Request a URL with Content-Type "application/pkix-crl"
GURL url2 = test_server_.GetURL("/root.crl");
std::unique_ptr<CertNetFetcher::Request> request2 =
- StartRequest(&fetcher, url2, callback2);
+ StartRequest(fetcher.get(), url2);
// Request a URL with Content-Type "application/pkcs7-mime"
GURL url3 = test_server_.GetURL("/certs.p7c");
std::unique_ptr<CertNetFetcher::Request> request3 =
- StartRequest(&fetcher, url3, callback3);
+ StartRequest(fetcher.get(), url3);
- // Wait for all of the requests to complete.
- std::unique_ptr<FetchResult> result1 = callback1.WaitForResult();
- std::unique_ptr<FetchResult> result2 = callback2.WaitForResult();
- std::unique_ptr<FetchResult> result3 = callback3.WaitForResult();
+ // Wait for all of the requests to complete and verify the fetch results.
+ VerifySuccess("-cert.crt-\n", request1.get());
+ VerifySuccess("-root.crl-\n", request2.get());
+ VerifySuccess("-certs.p7c-\n", request3.get());
- // Verify the fetch results.
- result1->VerifySuccess("-cert.crt-\n");
- result2->VerifySuccess("-root.crl-\n");
- result3->VerifySuccess("-certs.p7c-\n");
-
- EXPECT_EQ(3, network_delegate_.created_requests());
+ EXPECT_EQ(3, NumCreatedRequests());
}
// Fetch a caIssuers URL which has an unexpected extension and Content-Type.
@@ -220,14 +223,12 @@ TEST_F(CertNetFetcherImplTest, MAYBE_ParallelFetchNoDuplicates) {
TEST_F(CertNetFetcherImplTest, ContentTypeDoesntMatter) {
ASSERT_TRUE(test_server_.Start());
- CertNetFetcherImpl fetcher(&context_);
+ auto fetcher = CreateFetcher();
- TestFetchCallback callback;
GURL url = test_server_.GetURL("/foo.txt");
std::unique_ptr<CertNetFetcher::Request> request =
- StartRequest(&fetcher, url, callback);
- std::unique_ptr<FetchResult> result = callback.WaitForResult();
- result->VerifySuccess("-foo.txt-\n");
+ StartRequest(fetcher.get(), url);
+ VerifySuccess("-foo.txt-\n", request.get());
}
// Fetch a URLs whose HTTP response code is not 200. These are considered
@@ -235,26 +236,22 @@ TEST_F(CertNetFetcherImplTest, ContentTypeDoesntMatter) {
TEST_F(CertNetFetcherImplTest, HttpStatusCode) {
ASSERT_TRUE(test_server_.Start());
- CertNetFetcherImpl fetcher(&context_);
+ auto fetcher = CreateFetcher();
// Response was HTTP status 404.
{
- TestFetchCallback callback;
GURL url = test_server_.GetURL("/404.html");
std::unique_ptr<CertNetFetcher::Request> request =
- StartRequest(&fetcher, url, callback);
- std::unique_ptr<FetchResult> result = callback.WaitForResult();
- result->VerifyFailure(ERR_FAILED);
+ StartRequest(fetcher.get(), url);
+ VerifyFailure(ERR_FAILED, request.get());
}
// Response was HTTP status 500.
{
- TestFetchCallback callback;
GURL url = test_server_.GetURL("/500.html");
std::unique_ptr<CertNetFetcher::Request> request =
- StartRequest(&fetcher, url, callback);
- std::unique_ptr<FetchResult> result = callback.WaitForResult();
- result->VerifyFailure(ERR_FAILED);
+ StartRequest(fetcher.get(), url);
+ VerifyFailure(ERR_FAILED, request.get());
}
}
@@ -262,14 +259,12 @@ TEST_F(CertNetFetcherImplTest, HttpStatusCode) {
TEST_F(CertNetFetcherImplTest, ContentDisposition) {
ASSERT_TRUE(test_server_.Start());
- CertNetFetcherImpl fetcher(&context_);
+ auto fetcher = CreateFetcher();
- TestFetchCallback callback;
GURL url = test_server_.GetURL("/downloadable.js");
std::unique_ptr<CertNetFetcher::Request> request =
- StartRequest(&fetcher, url, callback);
- std::unique_ptr<FetchResult> result = callback.WaitForResult();
- result->VerifySuccess("-downloadable.js-\n");
+ StartRequest(fetcher.get(), url);
+ VerifySuccess("-downloadable.js-\n", request.get());
}
// Verifies that a cachable request will be served from the HTTP cache the
@@ -277,34 +272,29 @@ TEST_F(CertNetFetcherImplTest, ContentDisposition) {
TEST_F(CertNetFetcherImplTest, Cache) {
ASSERT_TRUE(test_server_.Start());
- CertNetFetcherImpl fetcher(&context_);
+ auto fetcher = CreateFetcher();
// Fetch a URL whose HTTP headers make it cacheable for 1 hour.
GURL url(test_server_.GetURL("/cacheable_1hr.crt"));
{
- TestFetchCallback callback;
-
std::unique_ptr<CertNetFetcher::Request> request =
- StartRequest(&fetcher, url, callback);
- std::unique_ptr<FetchResult> result = callback.WaitForResult();
- result->VerifySuccess("-cacheable_1hr.crt-\n");
+ StartRequest(fetcher.get(), url);
+ VerifySuccess("-cacheable_1hr.crt-\n", request.get());
}
- EXPECT_EQ(1, network_delegate_.created_requests());
+ EXPECT_EQ(1, NumCreatedRequests());
// Kill the HTTP server.
ASSERT_TRUE(test_server_.ShutdownAndWaitUntilComplete());
// Fetch again -- will fail unless served from cache.
{
- TestFetchCallback callback;
std::unique_ptr<CertNetFetcher::Request> request =
- StartRequest(&fetcher, url, callback);
- std::unique_ptr<FetchResult> result = callback.WaitForResult();
- result->VerifySuccess("-cacheable_1hr.crt-\n");
+ StartRequest(fetcher.get(), url);
+ VerifySuccess("-cacheable_1hr.crt-\n", request.get());
}
- EXPECT_EQ(2, network_delegate_.created_requests());
+ EXPECT_EQ(2, NumCreatedRequests());
}
// Verify that the maximum response body constraints are enforced by fetching a
@@ -312,17 +302,15 @@ TEST_F(CertNetFetcherImplTest, Cache) {
TEST_F(CertNetFetcherImplTest, TooLarge) {
ASSERT_TRUE(test_server_.Start());
- CertNetFetcherImpl fetcher(&context_);
+ auto fetcher = CreateFetcher();
// This file has a response body 12 bytes long. So setting the maximum to 11
// bytes will cause it to fail.
GURL url(test_server_.GetURL("/certs.p7c"));
- TestFetchCallback callback;
- std::unique_ptr<CertNetFetcher::Request> request = fetcher.FetchCaIssuers(
- url, CertNetFetcher::DEFAULT, 11, callback.callback());
+ std::unique_ptr<CertNetFetcher::Request> request =
+ fetcher->FetchCaIssuers(url, CertNetFetcher::DEFAULT, 11);
- std::unique_ptr<FetchResult> result = callback.WaitForResult();
- result->VerifyFailure(ERR_FILE_TOO_BIG);
+ VerifyFailure(ERR_FILE_TOO_BIG, request.get());
}
// Set the timeout to 10 milliseconds, and try fetching a URL that takes 5
@@ -330,14 +318,12 @@ TEST_F(CertNetFetcherImplTest, TooLarge) {
TEST_F(CertNetFetcherImplTest, Hang) {
ASSERT_TRUE(test_server_.Start());
- CertNetFetcherImpl fetcher(&context_);
+ auto fetcher = CreateFetcher();
GURL url(test_server_.GetURL("/slow/certs.p7c?5"));
- TestFetchCallback callback;
- std::unique_ptr<CertNetFetcher::Request> request = fetcher.FetchCaIssuers(
- url, 10, CertNetFetcher::DEFAULT, callback.callback());
- std::unique_ptr<FetchResult> result = callback.WaitForResult();
- result->VerifyFailure(ERR_TIMED_OUT);
+ std::unique_ptr<CertNetFetcher::Request> request =
+ fetcher->FetchCaIssuers(url, 10, CertNetFetcher::DEFAULT);
+ VerifyFailure(ERR_TIMED_OUT, request.get());
}
// Verify that if a response is gzip-encoded it gets inflated before being
@@ -345,51 +331,42 @@ TEST_F(CertNetFetcherImplTest, Hang) {
TEST_F(CertNetFetcherImplTest, Gzip) {
ASSERT_TRUE(test_server_.Start());
- CertNetFetcherImpl fetcher(&context_);
+ auto fetcher = CreateFetcher();
GURL url(test_server_.GetURL("/gzipped_crl"));
- TestFetchCallback callback;
std::unique_ptr<CertNetFetcher::Request> request =
- StartRequest(&fetcher, url, callback);
- std::unique_ptr<FetchResult> result = callback.WaitForResult();
- result->VerifySuccess("-gzipped_crl-\n");
+ StartRequest(fetcher.get(), url);
+ VerifySuccess("-gzipped_crl-\n", request.get());
}
// Try fetching an unsupported URL scheme (https).
TEST_F(CertNetFetcherImplTest, HttpsNotAllowed) {
ASSERT_TRUE(test_server_.Start());
- CertNetFetcherImpl fetcher(&context_);
+ auto fetcher = CreateFetcher();
GURL url("https://foopy/foo.crt");
- TestFetchCallback callback;
std::unique_ptr<CertNetFetcher::Request> request =
- StartRequest(&fetcher, url, callback);
- // Should NOT complete synchronously despite being a test that could be done
- // immediately.
- EXPECT_FALSE(callback.HasResult());
- std::unique_ptr<FetchResult> result = callback.WaitForResult();
- result->VerifyFailure(ERR_DISALLOWED_URL_SCHEME);
+ StartRequest(fetcher.get(), url);
+ VerifyFailure(ERR_DISALLOWED_URL_SCHEME, request.get());
// No request was created because the URL scheme was unsupported.
- EXPECT_EQ(0, network_delegate_.created_requests());
+ EXPECT_EQ(0, NumCreatedRequests());
}
// Try fetching a URL which redirects to https.
TEST_F(CertNetFetcherImplTest, RedirectToHttpsNotAllowed) {
ASSERT_TRUE(test_server_.Start());
- CertNetFetcherImpl fetcher(&context_);
+ auto fetcher = CreateFetcher();
GURL url(test_server_.GetURL("/redirect_https"));
- TestFetchCallback callback;
std::unique_ptr<CertNetFetcher::Request> request =
- StartRequest(&fetcher, url, callback);
- std::unique_ptr<FetchResult> result = callback.WaitForResult();
- result->VerifyFailure(ERR_DISALLOWED_URL_SCHEME);
+ StartRequest(fetcher.get(), url);
+ VerifyFailure(ERR_DISALLOWED_URL_SCHEME, request.get());
- EXPECT_EQ(1, network_delegate_.created_requests());
+ EXPECT_EQ(1, NumCreatedRequests());
}
// Try fetching an unsupported URL scheme (https) and then immediately
@@ -397,24 +374,15 @@ TEST_F(CertNetFetcherImplTest, RedirectToHttpsNotAllowed) {
TEST_F(CertNetFetcherImplTest, CancelHttpsNotAllowed) {
ASSERT_TRUE(test_server_.Start());
- CertNetFetcherImpl fetcher(&context_);
+ auto fetcher = CreateFetcher();
GURL url("https://foopy/foo.crt");
- TestFetchCallback callback;
std::unique_ptr<CertNetFetcher::Request> request =
- StartRequest(&fetcher, url, callback);
+ StartRequest(fetcher.get(), url);
- // Cancel the request.
+ // Cancel the request (May or may not have started yet, as the request is
+ // running on another thread).
request.reset();
-
- // Spin the message loop to increase chance of catching a bug.
- base::RunLoop().RunUntilIdle();
-
- // Should NOT complete synchronously despite being a test that could be done
- // immediately.
- EXPECT_FALSE(callback.HasResult());
-
- EXPECT_EQ(0, network_delegate_.created_requests());
}
// Flaky on Android. See http://crbug.com/646147.
@@ -429,41 +397,28 @@ TEST_F(CertNetFetcherImplTest, CancelHttpsNotAllowed) {
TEST_F(CertNetFetcherImplTest, MAYBE_CancelBeforeRunningMessageLoop) {
ASSERT_TRUE(test_server_.Start());
- CertNetFetcherImpl fetcher(&context_);
- TestFetchCallback callback1;
- TestFetchCallback callback2;
- TestFetchCallback callback3;
+ auto fetcher = CreateFetcher();
GURL url1 = test_server_.GetURL("/cert.crt");
std::unique_ptr<CertNetFetcher::Request> request1 =
- StartRequest(&fetcher, url1, callback1);
+ StartRequest(fetcher.get(), url1);
GURL url2 = test_server_.GetURL("/root.crl");
std::unique_ptr<CertNetFetcher::Request> request2 =
- StartRequest(&fetcher, url2, callback2);
+ StartRequest(fetcher.get(), url2);
GURL url3 = test_server_.GetURL("/certs.p7c");
std::unique_ptr<CertNetFetcher::Request> request3 =
- StartRequest(&fetcher, url3, callback3);
-
- EXPECT_EQ(3, network_delegate_.created_requests());
- EXPECT_FALSE(callback1.HasResult());
- EXPECT_FALSE(callback2.HasResult());
- EXPECT_FALSE(callback3.HasResult());
+ StartRequest(fetcher.get(), url3);
// Cancel the second request.
request2.reset();
- // Wait for the non-cancelled requests to complete.
- std::unique_ptr<FetchResult> result1 = callback1.WaitForResult();
- std::unique_ptr<FetchResult> result3 = callback3.WaitForResult();
-
- // Verify the fetch results.
- result1->VerifySuccess("-cert.crt-\n");
- result3->VerifySuccess("-certs.p7c-\n");
-
- EXPECT_FALSE(callback2.HasResult());
+ // Wait for the non-cancelled requests to complete, and verify the fetch
+ // results.
+ VerifySuccess("-cert.crt-\n", request1.get());
+ VerifySuccess("-certs.p7c-\n", request3.get());
}
// Start several requests, and cancel one of them after the first has completed.
@@ -478,60 +433,34 @@ TEST_F(CertNetFetcherImplTest, MAYBE_CancelBeforeRunningMessageLoop) {
// To work around this, the last request is cancelled, and hope that the
// requests are given opened sockets in a FIFO order.
// TODO(eroman): Make this more robust.
+// TODO(eroman): Rename this test.
TEST_F(CertNetFetcherImplTest, CancelAfterRunningMessageLoop) {
ASSERT_TRUE(test_server_.Start());
- CertNetFetcherImpl fetcher(&context_);
- TestFetchCallback callback1;
- TestFetchCallback callback2;
- TestFetchCallback callback3;
+ auto fetcher = CreateFetcher();
GURL url1 = test_server_.GetURL("/cert.crt");
std::unique_ptr<CertNetFetcher::Request> request1 =
- StartRequest(&fetcher, url1, callback1);
+ StartRequest(fetcher.get(), url1);
GURL url2 = test_server_.GetURL("/certs.p7c");
std::unique_ptr<CertNetFetcher::Request> request2 =
- StartRequest(&fetcher, url2, callback2);
+ StartRequest(fetcher.get(), url2);
GURL url3("ftp://www.not.supported.com/foo");
std::unique_ptr<CertNetFetcher::Request> request3 =
- StartRequest(&fetcher, url3, callback3);
-
- EXPECT_FALSE(callback1.HasResult());
- EXPECT_FALSE(callback2.HasResult());
- EXPECT_FALSE(callback3.HasResult());
+ StartRequest(fetcher.get(), url3);
// Wait for the ftp request to complete (it should complete right away since
// it doesn't even try to connect to the server).
- std::unique_ptr<FetchResult> result3 = callback3.WaitForResult();
- result3->VerifyFailure(ERR_DISALLOWED_URL_SCHEME);
+ VerifyFailure(ERR_DISALLOWED_URL_SCHEME, request3.get());
// Cancel the second outstanding request.
request2.reset();
- // Wait for the first request to complete.
- std::unique_ptr<FetchResult> result2 = callback1.WaitForResult();
-
- // Verify the fetch results.
- result2->VerifySuccess("-cert.crt-\n");
-}
-
-// Delete a CertNetFetcherImpl with outstanding requests on it.
-TEST_F(CertNetFetcherImplTest, DeleteCancels) {
- ASSERT_TRUE(test_server_.Start());
-
- std::unique_ptr<CertNetFetcherImpl> fetcher(
- new CertNetFetcherImpl(&context_));
-
- GURL url(test_server_.GetURL("/slow/certs.p7c?20"));
- TestFetchCallback callback;
- std::unique_ptr<CertNetFetcher::Request> request =
- StartRequest(fetcher.get(), url, callback);
-
- // Destroy the fetcher before the outstanding request.
- fetcher.reset();
+ // Wait for the first request to complete and verify the fetch result.
+ VerifySuccess("-cert.crt-\n", request1.get());
}
// Flaky on Android. See http://crbug.com/646147.
@@ -545,60 +474,43 @@ TEST_F(CertNetFetcherImplTest, DeleteCancels) {
TEST_F(CertNetFetcherImplTest, MAYBE_ParallelFetchDuplicates) {
ASSERT_TRUE(test_server_.Start());
- CertNetFetcherImpl fetcher(&context_);
+ auto fetcher = CreateFetcher();
GURL url1 = test_server_.GetURL("/cert.crt");
GURL url2 = test_server_.GetURL("/root.crl");
// Issue 3 requests for url1, and 3 requests for url2
- TestFetchCallback callback1;
std::unique_ptr<CertNetFetcher::Request> request1 =
- StartRequest(&fetcher, url1, callback1);
+ StartRequest(fetcher.get(), url1);
- TestFetchCallback callback2;
std::unique_ptr<CertNetFetcher::Request> request2 =
- StartRequest(&fetcher, url2, callback2);
+ StartRequest(fetcher.get(), url2);
- TestFetchCallback callback3;
std::unique_ptr<CertNetFetcher::Request> request3 =
- StartRequest(&fetcher, url1, callback3);
+ StartRequest(fetcher.get(), url1);
- TestFetchCallback callback4;
std::unique_ptr<CertNetFetcher::Request> request4 =
- StartRequest(&fetcher, url2, callback4);
+ StartRequest(fetcher.get(), url2);
- TestFetchCallback callback5;
std::unique_ptr<CertNetFetcher::Request> request5 =
- StartRequest(&fetcher, url2, callback5);
+ StartRequest(fetcher.get(), url2);
- TestFetchCallback callback6;
std::unique_ptr<CertNetFetcher::Request> request6 =
- StartRequest(&fetcher, url1, callback6);
+ StartRequest(fetcher.get(), url1);
// Cancel all but one of the requests for url1.
request1.reset();
request3.reset();
- // Wait for the remaining requests to finish.
- std::unique_ptr<FetchResult> result2 = callback2.WaitForResult();
- std::unique_ptr<FetchResult> result4 = callback4.WaitForResult();
- std::unique_ptr<FetchResult> result5 = callback5.WaitForResult();
- std::unique_ptr<FetchResult> result6 = callback6.WaitForResult();
-
- // Verify that none of the cancelled requests for url1 completed (since they
- // were cancelled).
- EXPECT_FALSE(callback1.HasResult());
- EXPECT_FALSE(callback3.HasResult());
-
- // Verify the fetch results.
- result2->VerifySuccess("-root.crl-\n");
- result4->VerifySuccess("-root.crl-\n");
- result5->VerifySuccess("-root.crl-\n");
- result6->VerifySuccess("-cert.crt-\n");
+ // Wait for the remaining requests to finish and verify the fetch results.
+ VerifySuccess("-root.crl-\n", request2.get());
+ VerifySuccess("-root.crl-\n", request4.get());
+ VerifySuccess("-root.crl-\n", request5.get());
+ VerifySuccess("-cert.crt-\n", request6.get());
// Verify that only 2 URLRequests were started even though 6 requests were
// issued.
- EXPECT_EQ(2, network_delegate_.created_requests());
+ EXPECT_EQ(2, NumCreatedRequests());
}
// Flaky on Android. See http://crbug.com/646147.
@@ -611,200 +523,45 @@ TEST_F(CertNetFetcherImplTest, MAYBE_ParallelFetchDuplicates) {
TEST_F(CertNetFetcherImplTest, MAYBE_CancelThenStart) {
ASSERT_TRUE(test_server_.Start());
- CertNetFetcherImpl fetcher(&context_);
- TestFetchCallback callback1;
- TestFetchCallback callback2;
- TestFetchCallback callback3;
+ auto fetcher = CreateFetcher();
GURL url = test_server_.GetURL("/cert.crt");
std::unique_ptr<CertNetFetcher::Request> request1 =
- StartRequest(&fetcher, url, callback1);
+ StartRequest(fetcher.get(), url);
request1.reset();
std::unique_ptr<CertNetFetcher::Request> request2 =
- StartRequest(&fetcher, url, callback2);
+ StartRequest(fetcher.get(), url);
std::unique_ptr<CertNetFetcher::Request> request3 =
- StartRequest(&fetcher, url, callback3);
+ StartRequest(fetcher.get(), url);
request3.reset();
// All but |request2| were canceled.
- std::unique_ptr<FetchResult> result = callback2.WaitForResult();
-
- result->VerifySuccess("-cert.crt-\n");
-
- EXPECT_FALSE(callback1.HasResult());
- EXPECT_FALSE(callback3.HasResult());
-
- // One URLRequest that was cancelled, then another right afterwards.
- EXPECT_EQ(2, network_delegate_.created_requests());
+ VerifySuccess("-cert.crt-\n", request2.get());
}
// Start duplicate requests and then cancel all of them.
TEST_F(CertNetFetcherImplTest, CancelAll) {
ASSERT_TRUE(test_server_.Start());
- CertNetFetcherImpl fetcher(&context_);
- TestFetchCallback callback[3];
+ auto fetcher = CreateFetcher();
std::unique_ptr<CertNetFetcher::Request> request[3];
GURL url = test_server_.GetURL("/cert.crt");
- for (size_t i = 0; i < arraysize(callback); ++i) {
- request[i] = StartRequest(&fetcher, url, callback[i]);
+ for (size_t i = 0; i < arraysize(request); ++i) {
+ request[i] = StartRequest(fetcher.get(), url);
}
// Cancel all the requests.
for (size_t i = 0; i < arraysize(request); ++i)
request[i].reset();
- EXPECT_EQ(1, network_delegate_.created_requests());
-
- for (size_t i = 0; i < arraysize(request); ++i)
- EXPECT_FALSE(callback[i].HasResult());
-}
-
-void DeleteCertNetFetcher(CertNetFetcher* fetcher) {
- delete fetcher;
-}
-
-// Delete the CertNetFetcherImpl within a request callback.
-TEST_F(CertNetFetcherImplTest, DeleteWithinCallback) {
- ASSERT_TRUE(test_server_.Start());
-
- // Deleted by callback2.
- CertNetFetcher* fetcher = new CertNetFetcherImpl(&context_);
-
- GURL url = test_server_.GetURL("/cert.crt");
-
- TestFetchCallback callback[4];
- std::unique_ptr<CertNetFetcher::Request> reqs[4];
- callback[1].set_extra_closure(base::Bind(DeleteCertNetFetcher, fetcher));
-
- for (size_t i = 0; i < arraysize(callback); ++i)
- reqs[i] = StartRequest(fetcher, url, callback[i]);
-
- EXPECT_EQ(1, network_delegate_.created_requests());
-
- callback[1].WaitForResult();
-
- // Assume requests for the same URL are executed in FIFO order.
- EXPECT_TRUE(callback[0].HasResult());
- EXPECT_FALSE(callback[2].HasResult());
- EXPECT_FALSE(callback[3].HasResult());
-}
-
-void FetchRequest(CertNetFetcher* fetcher,
- const GURL& url,
- TestFetchCallback* callback,
- std::unique_ptr<CertNetFetcher::Request>* request) {
- *request = StartRequest(fetcher, url, *callback);
-}
-
-// Flaky on Android. See http://crbug.com/646147.
-#if defined(OS_ANDROID)
-#define MAYBE_FetchWithinCallback DISABLED_FetchWithinCallback
-#else
-#define MAYBE_FetchWithinCallback FetchWithinCallback
-#endif
-// Make a request during callback for the same URL.
-TEST_F(CertNetFetcherImplTest, MAYBE_FetchWithinCallback) {
- ASSERT_TRUE(test_server_.Start());
-
- CertNetFetcherImpl fetcher(&context_);
-
- GURL url = test_server_.GetURL("/cert.crt");
-
- TestFetchCallback callback[5];
- std::unique_ptr<CertNetFetcher::Request> req[5];
- callback[1].set_extra_closure(
- base::Bind(FetchRequest, &fetcher, url, &callback[4], &req[4]));
-
- for (size_t i = 0; i < arraysize(callback) - 1; ++i)
- req[i] = StartRequest(&fetcher, url, callback[i]);
-
- EXPECT_EQ(1, network_delegate_.created_requests());
-
- for (size_t i = 0; i < arraysize(callback); ++i) {
- std::unique_ptr<FetchResult> result = callback[i].WaitForResult();
- result->VerifySuccess("-cert.crt-\n");
- }
-
- // The fetch started within a callback should have started a new request
- // rather than attaching to the current job.
- EXPECT_EQ(2, network_delegate_.created_requests());
-}
-
-void CancelRequest(std::unique_ptr<CertNetFetcher::Request>* request) {
- request->reset();
+ EXPECT_EQ(1, NumCreatedRequests());
}
-// Cancel a request while executing a callback for the same job.
-TEST_F(CertNetFetcherImplTest, CancelWithinCallback) {
- ASSERT_TRUE(test_server_.Start());
-
- CertNetFetcherImpl fetcher(&context_);
-
- GURL url = test_server_.GetURL("/cert.crt");
-
- TestFetchCallback callback[4];
- std::unique_ptr<CertNetFetcher::Request> request[4];
-
- for (size_t i = 0; i < arraysize(callback); ++i)
- request[i] = StartRequest(&fetcher, url, callback[i]);
-
- // Cancel request[2] when the callback for request[1] runs.
- callback[1].set_extra_closure(base::Bind(CancelRequest, &request[2]));
-
- EXPECT_EQ(1, network_delegate_.created_requests());
-
- for (size_t i = 0; i < arraysize(request); ++i) {
- if (i == 2)
- continue;
-
- std::unique_ptr<FetchResult> result = callback[i].WaitForResult();
- result->VerifySuccess("-cert.crt-\n");
- }
-
- // request[2] was cancelled.
- EXPECT_FALSE(callback[2].HasResult());
-}
-
-// Flaky on Android. See http://crbug.com/646147.
-#if defined(OS_ANDROID)
-#define MAYBE_CancelLastRequestWithinCallback \
- DISABLED_CancelLastRequestWithinCallback
-#else
-#define MAYBE_CancelLastRequestWithinCallback CancelLastRequestWithinCallback
-#endif
-// Cancel the final request while executing a callback for the same job. Ensure
-// that the job is not deleted twice.
-TEST_F(CertNetFetcherImplTest, MAYBE_CancelLastRequestWithinCallback) {
- ASSERT_TRUE(test_server_.Start());
-
- CertNetFetcherImpl fetcher(&context_);
-
- GURL url = test_server_.GetURL("/cert.crt");
-
- TestFetchCallback callback1;
- std::unique_ptr<CertNetFetcher::Request> request1 =
- StartRequest(&fetcher, url, callback1);
-
- TestFetchCallback callback2;
- std::unique_ptr<CertNetFetcher::Request> request2 =
- StartRequest(&fetcher, url, callback1);
-
- // Cancel request2 when the callback for request1 runs.
- callback1.set_extra_closure(base::Bind(CancelRequest, &request2));
-
- EXPECT_EQ(1, network_delegate_.created_requests());
-
- std::unique_ptr<FetchResult> result = callback1.WaitForResult();
- result->VerifySuccess("-cert.crt-\n");
-
- // request2 was cancelled.
- EXPECT_FALSE(callback2.HasResult());
-}
+} // namespace
} // namespace net
« no previous file with comments | « net/cert_net/cert_net_fetcher_impl.cc ('k') | net/net.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698