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

Side by Side Diff: chrome/browser/net/http_server_properties_manager_unittest.cc

Issue 7827033: Introduce net::HttpServerPropertiesManager to manage server-specific properties. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/net/http_server_properties_manager.h"
6
7 #include <ostream>
willchan no longer on Chromium 2011/10/04 05:55:02 What's this for? Do you really need it?
ramant (doing other things) 2011/10/06 06:17:52 Done.
8
9 #include "base/basictypes.h"
10 #include "base/message_loop.h"
11 #include "chrome/common/pref_names.h"
12 #include "chrome/test/base/testing_pref_service.h"
13 #include "content/browser/browser_thread.h"
14 #include "content/common/notification_service.h"
15 #include "googleurl/src/gurl.h"
16 #include "testing/gmock/include/gmock/gmock.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18
19 namespace chrome_browser_net {
20
21 namespace {
22
23 using ::testing::_;
24 using ::testing::Invoke;
25 using ::testing::Mock;
26
27 class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager {
28 public:
29 explicit TestingHttpServerPropertiesManager(PrefService* pref_service)
30 : HttpServerPropertiesManager(pref_service) {
31 InitializeOnIOThread();
32 }
33
34 virtual ~TestingHttpServerPropertiesManager() {
35 }
36
37 // Make this method public for testing.
38 using HttpServerPropertiesManager::ScheduleUpdateOnUI;
39 using HttpServerPropertiesManager::ScheduleUpdateOnIO;
40
41 // Post tasks without a delay during tests.
42 virtual void PostUpdateTaskOnUI(Task* task) OVERRIDE {
43 MessageLoop::current()->PostTask(FROM_HERE, task);
44 }
45
46 // Makes a direct call to UpdateCacheFromPrefsOnIO during tests.
47 void UpdateCacheFromPrefsOnIO() {
48 StringVector* spdy_servers = new StringVector;
49 spdy_servers->push_back("www.google.com:443");
50 HttpServerPropertiesManager::UpdateCacheFromPrefsOnIO(spdy_servers, true);
51 }
52
53 void UpdateNotMocked() {
54 HttpServerPropertiesManager::UpdateCacheFromPrefs();
55 }
56
57 MOCK_METHOD0(UpdateCacheFromPrefs, void());
58
59 private:
60 DISALLOW_COPY_AND_ASSIGN(TestingHttpServerPropertiesManager);
61 };
62
63 class HttpServerPropertiesManagerTest : public testing::Test {
64 protected:
65 HttpServerPropertiesManagerTest()
66 : ui_thread_(BrowserThread::UI, &loop_),
67 file_thread_(BrowserThread::FILE, &loop_),
68 io_thread_(BrowserThread::IO, &loop_) {
69 }
70
71 virtual void SetUp() OVERRIDE {
72 pref_service_.RegisterListPref(prefs::kSpdyServers);
73 http_server_props_manager_.reset(
74 new TestingHttpServerPropertiesManager(&pref_service_));
75 loop_.RunAllPending();
76 }
77
78 virtual void TearDown() OVERRIDE {
79 if (http_server_props_manager_.get())
80 http_server_props_manager_->ShutdownOnUIThread();
81 loop_.RunAllPending();
82 // Delete |http_server_props_manager_| while |io_thread_| is mapping IO to
83 // |loop_|.
84 http_server_props_manager_.reset();
85 }
86
87 void ExpectUpdate() {
88 EXPECT_CALL(*http_server_props_manager_, UpdateCacheFromPrefs())
89 .WillOnce(Invoke(http_server_props_manager_.get(),
90 &TestingHttpServerPropertiesManager::UpdateNotMocked));
91 }
92
93 MessageLoop loop_;
94 TestingPrefService pref_service_;
95 scoped_ptr<TestingHttpServerPropertiesManager> http_server_props_manager_;
96
97 private:
98 BrowserThread ui_thread_;
99 BrowserThread file_thread_;
100 BrowserThread io_thread_;
101
102 DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesManagerTest);
103 };
104
105 TEST_F(HttpServerPropertiesManagerTest, SingleUpdateForTwoPrefChanges) {
106 ExpectUpdate();
107
108 ListValue* http_server_props = new ListValue;
109 http_server_props->Append(new StringValue("www.google.com:443"));
110 pref_service_.SetManagedPref(prefs::kSpdyServers, http_server_props);
111 loop_.RunAllPending();
112
113 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
114 }
115
116 TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingTask0) {
117 // Post an update task to the UI thread.
118 http_server_props_manager_->ScheduleUpdateOnUI();
119 // Shutdown comes before the task is executed.
120 http_server_props_manager_->ShutdownOnUIThread();
121 http_server_props_manager_.reset();
122 // Run the task after shutdown and deletion.
123 loop_.RunAllPending();
124 }
125
126 TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingTask1) {
127 EXPECT_CALL(*http_server_props_manager_, UpdateCacheFromPrefs()).Times(0);
128 // Post an update task.
129 http_server_props_manager_->ScheduleUpdateOnUI();
130 // Shutdown comes before the task is executed.
131 http_server_props_manager_->ShutdownOnUIThread();
132 // Run the task after shutdown, but before deletion.
133 loop_.RunAllPending();
134 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
135 http_server_props_manager_.reset();
136 loop_.RunAllPending();
137 }
138
139 TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingTask2) {
140 // Update posts a BuildHttpServerPropetiesTask to the FILE thread.
141 http_server_props_manager_->UpdateNotMocked();
142 // Shutdown comes before the task is executed.
143 http_server_props_manager_->ShutdownOnUIThread();
144 // Run the task after shutdown, but before deletion.
145 loop_.RunAllPending();
146 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
147 http_server_props_manager_.reset();
148 loop_.RunAllPending();
149 }
150
151 TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingTask3) {
152 // This posts a task to the FILE thread.
153 http_server_props_manager_->UpdateCacheFromPrefsOnIO();
154 // But shutdown happens before it is done.
155 http_server_props_manager_->ShutdownOnUIThread();
156 http_server_props_manager_.reset();
157 loop_.RunAllPending();
158
159 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
160 }
161
162 TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingTask4) {
163 // This posts a task to the FILE thread.
164 http_server_props_manager_->UpdateCacheFromPrefsOnIO();
165 // But shutdown happens before it is done.
166 http_server_props_manager_->ShutdownOnUIThread();
167 // This time, shutdown on UI is done but the object is still alive.
168 loop_.RunAllPending();
169 http_server_props_manager_.reset();
170 loop_.RunAllPending();
171
172 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
173 }
174
175 TEST_F(HttpServerPropertiesManagerTest, SupportsSpdy) {
176 net::HostPortPair host_port_pair("mail.google.com", 443);
177 EXPECT_FALSE(http_server_props_manager_->SupportsSpdy(host_port_pair));
178 http_server_props_manager_->SetSupportsSpdy(host_port_pair, true);
179 EXPECT_TRUE(http_server_props_manager_->SupportsSpdy(host_port_pair));
180 http_server_props_manager_->SetSupportsSpdy(host_port_pair, false);
181 EXPECT_FALSE(http_server_props_manager_->SupportsSpdy(host_port_pair));
182 }
183
184 } // namespace
185
186 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698