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

Unified Diff: components/update_client/test/request_sender_unittest.cc

Issue 808773005: Move most of the component updater artifacts to update_client. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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
Index: components/update_client/test/request_sender_unittest.cc
diff --git a/components/update_client/test/request_sender_unittest.cc b/components/update_client/test/request_sender_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..f8ad042fc6c2a33696312aa27657b4a28eb778ad
--- /dev/null
+++ b/components/update_client/test/request_sender_unittest.cc
@@ -0,0 +1,205 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/compiler_specific.h"
+#include "base/macros.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
+#include "components/update_client/request_sender.h"
+#include "components/update_client/test/test_configurator.h"
+#include "components/update_client/test/url_request_post_interceptor.h"
+#include "net/url_request/url_fetcher.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace update_client {
+
+namespace {
+
+const char kUrl1[] = "https://localhost2/path1";
+const char kUrl2[] = "https://localhost2/path2";
+const char kUrlPath1[] = "path1";
+const char kUrlPath2[] = "path2";
+
+} // namespace
+
+class RequestSenderTest : public testing::Test {
+ public:
+ RequestSenderTest();
+ ~RequestSenderTest() override;
+
+ // Overrides from testing::Test.
+ void SetUp() override;
+ void TearDown() override;
+
+ void RequestSenderComplete(const net::URLFetcher* source);
+
+ protected:
+ void Quit();
+ void RunThreads();
+ void RunThreadsUntilIdle();
+
+ scoped_ptr<TestConfigurator> config_;
+ scoped_ptr<RequestSender> request_sender_;
+ scoped_ptr<InterceptorFactory> interceptor_factory_;
+
+ URLRequestPostInterceptor* post_interceptor_1; // Owned by the factory.
+ URLRequestPostInterceptor* post_interceptor_2; // Owned by the factory.
+
+ const net::URLFetcher* url_fetcher_source_;
+
+ private:
+ base::MessageLoopForIO loop_;
+ base::Closure quit_closure_;
+
+ DISALLOW_COPY_AND_ASSIGN(RequestSenderTest);
+};
+
+RequestSenderTest::RequestSenderTest()
+ : post_interceptor_1(NULL),
+ post_interceptor_2(NULL),
+ url_fetcher_source_(NULL) {
+}
+
+RequestSenderTest::~RequestSenderTest() {
+}
+
+void RequestSenderTest::SetUp() {
+ config_.reset(new TestConfigurator(base::MessageLoopProxy::current(),
+ base::MessageLoopProxy::current()));
+ interceptor_factory_.reset(
+ new InterceptorFactory(base::MessageLoopProxy::current()));
+ post_interceptor_1 =
+ interceptor_factory_->CreateInterceptorForPath(kUrlPath1);
+ post_interceptor_2 =
+ interceptor_factory_->CreateInterceptorForPath(kUrlPath2);
+ EXPECT_TRUE(post_interceptor_1);
+ EXPECT_TRUE(post_interceptor_2);
+
+ request_sender_.reset();
+}
+
+void RequestSenderTest::TearDown() {
+ request_sender_.reset();
+
+ post_interceptor_1 = NULL;
+ post_interceptor_2 = NULL;
+
+ interceptor_factory_.reset();
+
+ config_.reset();
+
+ RunThreadsUntilIdle();
+}
+
+void RequestSenderTest::RunThreads() {
+ base::RunLoop runloop;
+ quit_closure_ = runloop.QuitClosure();
+ runloop.Run();
+
+ // Since some tests need to drain currently enqueued tasks such as network
+ // intercepts on the IO thread, run the threads until they are
+ // idle. The component updater service won't loop again until the loop count
+ // is set and the service is started.
+ RunThreadsUntilIdle();
+}
+
+void RequestSenderTest::RunThreadsUntilIdle() {
+ base::RunLoop().RunUntilIdle();
+}
+
+void RequestSenderTest::Quit() {
+ if (!quit_closure_.is_null())
+ quit_closure_.Run();
+}
+
+void RequestSenderTest::RequestSenderComplete(const net::URLFetcher* source) {
+ url_fetcher_source_ = source;
+ Quit();
+}
+
+// Tests that when a request to the first url succeeds, the subsequent urls are
+// not tried.
+TEST_F(RequestSenderTest, RequestSendSuccess) {
+ EXPECT_TRUE(post_interceptor_1->ExpectRequest(new PartialMatch("test")));
+
+ std::vector<GURL> urls;
+ urls.push_back(GURL(kUrl1));
+ urls.push_back(GURL(kUrl2));
+ request_sender_.reset(new RequestSender(*config_));
+ request_sender_->Send("test", urls,
+ base::Bind(&RequestSenderTest::RequestSenderComplete,
+ base::Unretained(this)));
+ RunThreads();
+
+ EXPECT_EQ(1, post_interceptor_1->GetHitCount())
+ << post_interceptor_1->GetRequestsAsString();
+ EXPECT_EQ(1, post_interceptor_1->GetCount())
+ << post_interceptor_1->GetRequestsAsString();
+
+ EXPECT_STREQ("test", post_interceptor_1->GetRequests()[0].c_str());
+ EXPECT_EQ(GURL(kUrl1), url_fetcher_source_->GetOriginalURL());
+ EXPECT_EQ(200, url_fetcher_source_->GetResponseCode());
+}
+
+// Tests that the request succeeds using the second url after the first url
+// has failed.
+TEST_F(RequestSenderTest, RequestSendSuccessWithFallback) {
+ EXPECT_TRUE(post_interceptor_1->ExpectRequest(new PartialMatch("test"), 403));
+ EXPECT_TRUE(post_interceptor_2->ExpectRequest(new PartialMatch("test")));
+
+ std::vector<GURL> urls;
+ urls.push_back(GURL(kUrl1));
+ urls.push_back(GURL(kUrl2));
+ request_sender_.reset(new RequestSender(*config_));
+ request_sender_->Send("test", urls,
+ base::Bind(&RequestSenderTest::RequestSenderComplete,
+ base::Unretained(this)));
+ RunThreads();
+
+ EXPECT_EQ(1, post_interceptor_1->GetHitCount())
+ << post_interceptor_1->GetRequestsAsString();
+ EXPECT_EQ(1, post_interceptor_1->GetCount())
+ << post_interceptor_1->GetRequestsAsString();
+ EXPECT_EQ(1, post_interceptor_2->GetHitCount())
+ << post_interceptor_2->GetRequestsAsString();
+ EXPECT_EQ(1, post_interceptor_2->GetCount())
+ << post_interceptor_2->GetRequestsAsString();
+
+ EXPECT_STREQ("test", post_interceptor_1->GetRequests()[0].c_str());
+ EXPECT_STREQ("test", post_interceptor_2->GetRequests()[0].c_str());
+ EXPECT_EQ(GURL(kUrl2), url_fetcher_source_->GetOriginalURL());
+ EXPECT_EQ(200, url_fetcher_source_->GetResponseCode());
+}
+
+// Tests that the request fails when both urls have failed.
+TEST_F(RequestSenderTest, RequestSendFailed) {
+ EXPECT_TRUE(post_interceptor_1->ExpectRequest(new PartialMatch("test"), 403));
+ EXPECT_TRUE(post_interceptor_2->ExpectRequest(new PartialMatch("test"), 403));
+
+ std::vector<GURL> urls;
+ urls.push_back(GURL(kUrl1));
+ urls.push_back(GURL(kUrl2));
+ request_sender_.reset(new RequestSender(*config_));
+ request_sender_->Send("test", urls,
+ base::Bind(&RequestSenderTest::RequestSenderComplete,
+ base::Unretained(this)));
+ RunThreads();
+
+ EXPECT_EQ(1, post_interceptor_1->GetHitCount())
+ << post_interceptor_1->GetRequestsAsString();
+ EXPECT_EQ(1, post_interceptor_1->GetCount())
+ << post_interceptor_1->GetRequestsAsString();
+ EXPECT_EQ(1, post_interceptor_2->GetHitCount())
+ << post_interceptor_2->GetRequestsAsString();
+ EXPECT_EQ(1, post_interceptor_2->GetCount())
+ << post_interceptor_2->GetRequestsAsString();
+
+ EXPECT_STREQ("test", post_interceptor_1->GetRequests()[0].c_str());
+ EXPECT_STREQ("test", post_interceptor_2->GetRequests()[0].c_str());
+ EXPECT_EQ(GURL(kUrl2), url_fetcher_source_->GetOriginalURL());
+ EXPECT_EQ(403, url_fetcher_source_->GetResponseCode());
+}
+
+} // namespace update_client
« no previous file with comments | « components/update_client/test/ping_manager_unittest.cc ('k') | components/update_client/test/test_configurator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698