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

Side by Side Diff: chrome/browser/devtools/devtools_network_controller_unittest.cc

Issue 324953002: DevToolsNetworkController: support "limit throughput" network condition. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed nits Created 6 years, 6 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <string> 5 #include <string>
6 6
7 #include "base/memory/ref_counted.h" 7 #include "base/memory/ref_counted.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
11 #include "chrome/browser/devtools/devtools_network_conditions.h" 11 #include "chrome/browser/devtools/devtools_network_conditions.h"
12 #include "chrome/browser/devtools/devtools_network_controller.h" 12 #include "chrome/browser/devtools/devtools_network_controller.h"
13 #include "chrome/browser/devtools/devtools_network_transaction.h" 13 #include "chrome/browser/devtools/devtools_network_transaction.h"
14 #include "net/http/http_transaction_test_util.h" 14 #include "net/http/http_transaction_test_util.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "url/gurl.h" 16 #include "url/gurl.h"
17 17
18 namespace test { 18 namespace test {
19 19
20 const char kClientId[] = "42";
21 const char kAnotherClientId[] = "24";
22
23 const char kHttpDotCom[] = "http://dot.com"; 20 const char kHttpDotCom[] = "http://dot.com";
24 const char kHttpDotOrg[] = "http://dot.org"; 21 const char kHttpDotOrg[] = "http://dot.org";
25 const char kCom[] = "com"; 22 const char kCom[] = "com";
26 23
27 class TestCallback { 24 class TestCallback {
28 public: 25 public:
29 TestCallback() : run_count_(0), value_(0) {} 26 TestCallback() : run_count_(0), value_(0) {}
30 void Run(int value) { 27 void Run(int value) {
31 run_count_++; 28 run_count_++;
32 value_ = value; 29 value_ = value;
(...skipping 23 matching lines...) Expand all
56 transaction_.reset(new DevToolsNetworkTransaction( 53 transaction_.reset(new DevToolsNetworkTransaction(
57 &controller_, network_transaction.Pass())); 54 &controller_, network_transaction.Pass()));
58 } 55 }
59 56
60 net::HttpRequestInfo* GetRequest() { 57 net::HttpRequestInfo* GetRequest() {
61 if (!request_) 58 if (!request_)
62 request_.reset(new MockHttpRequest(mock_transaction_)); 59 request_.reset(new MockHttpRequest(mock_transaction_));
63 return request_.get(); 60 return request_.get();
64 } 61 }
65 62
66 void SetNetworkState(const std::string& client_id, bool offline) { 63 void SetNetworkState(bool offline) {
67 std::vector<std::string> domains; 64 std::vector<std::string> domains;
68 domains.push_back(kCom); 65 domains.push_back(kCom);
69 scoped_refptr<DevToolsNetworkConditions> conditions; 66 scoped_refptr<DevToolsNetworkConditions> conditions;
70 if (offline) 67 if (offline)
71 conditions = new DevToolsNetworkConditions(domains, 0.0); 68 conditions = new DevToolsNetworkConditions(domains, 0.0);
72 controller_.SetNetworkStateOnIO(client_id, conditions); 69 controller_.SetNetworkStateOnIO(conditions);
73 } 70 }
74 71
75 int Start() { 72 int Start() {
76 return transaction_->Start( 73 return transaction_->Start(
77 GetRequest(), completion_callback_, net::BoundNetLog()); 74 GetRequest(), completion_callback_, net::BoundNetLog());
78 } 75 }
79 76
80 int Read() { 77 int Read() {
81 return transaction_->Read(buffer_.get(), 64, completion_callback_); 78 return transaction_->Read(buffer_.get(), 64, completion_callback_);
82 } 79 }
(...skipping 18 matching lines...) Expand all
101 scoped_refptr<net::IOBuffer> buffer_; 98 scoped_refptr<net::IOBuffer> buffer_;
102 scoped_ptr<MockHttpRequest> request_; 99 scoped_ptr<MockHttpRequest> request_;
103 }; 100 };
104 101
105 TEST(DevToolsNetworkControllerTest, SingleDisableEnable) { 102 TEST(DevToolsNetworkControllerTest, SingleDisableEnable) {
106 DevToolsNetworkControllerHelper helper; 103 DevToolsNetworkControllerHelper helper;
107 DevToolsNetworkController* controller = helper.controller(); 104 DevToolsNetworkController* controller = helper.controller();
108 net::HttpRequestInfo* request = helper.GetRequest(); 105 net::HttpRequestInfo* request = helper.GetRequest();
109 106
110 EXPECT_FALSE(controller->ShouldFail(request)); 107 EXPECT_FALSE(controller->ShouldFail(request));
111 helper.SetNetworkState(kClientId, true); 108 helper.SetNetworkState(true);
112 EXPECT_TRUE(controller->ShouldFail(request)); 109 EXPECT_TRUE(controller->ShouldFail(request));
113 helper.SetNetworkState(kClientId, false); 110 helper.SetNetworkState(false);
114 EXPECT_FALSE(controller->ShouldFail(request));
115 }
116
117 TEST(DevToolsNetworkControllerTest, DoubleDisableEnable) {
118 DevToolsNetworkControllerHelper helper;
119 DevToolsNetworkController* controller = helper.controller();
120 net::HttpRequestInfo* request = helper.GetRequest();
121
122 EXPECT_FALSE(controller->ShouldFail(request));
123 helper.SetNetworkState(kClientId, true);
124 EXPECT_TRUE(controller->ShouldFail(request));
125 helper.SetNetworkState(kAnotherClientId, true);
126 EXPECT_TRUE(controller->ShouldFail(request));
127 helper.SetNetworkState(kClientId, false);
128 EXPECT_TRUE(controller->ShouldFail(request));
129 helper.SetNetworkState(kAnotherClientId, false);
130 EXPECT_FALSE(controller->ShouldFail(request)); 111 EXPECT_FALSE(controller->ShouldFail(request));
131 } 112 }
132 113
133 TEST(DevToolsNetworkControllerTest, FailOnStart) { 114 TEST(DevToolsNetworkControllerTest, FailOnStart) {
134 DevToolsNetworkControllerHelper helper; 115 DevToolsNetworkControllerHelper helper;
135 helper.SetNetworkState(kClientId, true); 116 helper.SetNetworkState(true);
136 117
137 int rv = helper.Start(); 118 int rv = helper.Start();
138 EXPECT_EQ(rv, net::ERR_INTERNET_DISCONNECTED); 119 EXPECT_EQ(rv, net::ERR_INTERNET_DISCONNECTED);
139 120
140 base::RunLoop().RunUntilIdle(); 121 base::RunLoop().RunUntilIdle();
141 EXPECT_EQ(helper.callback()->run_count(), 0); 122 EXPECT_EQ(helper.callback()->run_count(), 0);
142 } 123 }
143 124
144 TEST(DevToolsNetworkControllerTest, FailRunningTransaction) { 125 TEST(DevToolsNetworkControllerTest, FailRunningTransaction) {
145 DevToolsNetworkControllerHelper helper; 126 DevToolsNetworkControllerHelper helper;
146 TestCallback* callback = helper.callback(); 127 TestCallback* callback = helper.callback();
147 128
148 int rv = helper.Start(); 129 int rv = helper.Start();
149 EXPECT_EQ(rv, net::OK); 130 EXPECT_EQ(rv, net::OK);
150 131
151 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(64)); 132 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(64));
152 rv = helper.Read(); 133 rv = helper.Read();
153 EXPECT_EQ(rv, net::ERR_IO_PENDING); 134 EXPECT_EQ(rv, net::ERR_IO_PENDING);
154 EXPECT_EQ(callback->run_count(), 0); 135 EXPECT_EQ(callback->run_count(), 0);
155 136
156 helper.SetNetworkState(kClientId, true); 137 helper.SetNetworkState(true);
157 EXPECT_EQ(callback->run_count(), 1); 138 EXPECT_EQ(callback->run_count(), 1);
158 EXPECT_EQ(callback->value(), net::ERR_INTERNET_DISCONNECTED); 139 EXPECT_EQ(callback->value(), net::ERR_INTERNET_DISCONNECTED);
159 140
160 // Wait until HttpTrancation completes reading and invokes callback. 141 // Wait until HttpTrancation completes reading and invokes callback.
161 // DevToolsNetworkTransaction should ignore callback, because it has 142 // DevToolsNetworkTransaction should ignore callback, because it has
162 // reported network error already. 143 // reported network error already.
163 base::RunLoop().RunUntilIdle(); 144 base::RunLoop().RunUntilIdle();
164 EXPECT_EQ(callback->run_count(), 1); 145 EXPECT_EQ(callback->run_count(), 1);
165 146
166 // Check that transaction in not failed second time. 147 // Check that transaction in not failed second time.
167 helper.SetNetworkState(kClientId, false); 148 helper.SetNetworkState(false);
168 helper.SetNetworkState(kClientId, true); 149 helper.SetNetworkState(true);
169 EXPECT_EQ(callback->run_count(), 1); 150 EXPECT_EQ(callback->run_count(), 1);
170 } 151 }
171 152
172 TEST(DevToolsNetworkControllerTest, ReadAfterFail) { 153 TEST(DevToolsNetworkControllerTest, ReadAfterFail) {
173 DevToolsNetworkControllerHelper helper; 154 DevToolsNetworkControllerHelper helper;
174 155
175 int rv = helper.Start(); 156 int rv = helper.Start();
176 EXPECT_EQ(rv, net::OK); 157 EXPECT_EQ(rv, net::OK);
177 EXPECT_TRUE(helper.transaction()->request()); 158 EXPECT_TRUE(helper.transaction()->request());
178 159
179 helper.SetNetworkState(kClientId, true); 160 helper.SetNetworkState(true);
180 EXPECT_TRUE(helper.transaction()->failed()); 161 EXPECT_TRUE(helper.transaction()->failed());
181 162
182 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(64)); 163 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(64));
183 rv = helper.Read(); 164 rv = helper.Read();
184 EXPECT_EQ(rv, net::ERR_INTERNET_DISCONNECTED); 165 EXPECT_EQ(rv, net::ERR_INTERNET_DISCONNECTED);
185 166
186 // Check that callback is never invoked. 167 // Check that callback is never invoked.
187 base::RunLoop().RunUntilIdle(); 168 base::RunLoop().RunUntilIdle();
188 EXPECT_EQ(helper.callback()->run_count(), 0); 169 EXPECT_EQ(helper.callback()->run_count(), 0);
189 } 170 }
190 171
191 TEST(DevToolsNetworkControllerTest, AllowsDevToolsRequests) { 172 TEST(DevToolsNetworkControllerTest, AllowsDevToolsRequests) {
192 DevToolsNetworkControllerHelper helper; 173 DevToolsNetworkControllerHelper helper;
193 helper.mock_transaction()->request_headers = 174 helper.mock_transaction()->request_headers =
194 "X-DevTools-Request-Initiator: frontend\r\n"; 175 "X-DevTools-Request-Initiator: frontend\r\n";
195 DevToolsNetworkController* controller = helper.controller(); 176 DevToolsNetworkController* controller = helper.controller();
196 net::HttpRequestInfo* request = helper.GetRequest(); 177 net::HttpRequestInfo* request = helper.GetRequest();
197 178
198 EXPECT_FALSE(controller->ShouldFail(request)); 179 EXPECT_FALSE(controller->ShouldFail(request));
199 helper.SetNetworkState(kClientId, true); 180 helper.SetNetworkState(true);
200 EXPECT_FALSE(controller->ShouldFail(request)); 181 EXPECT_FALSE(controller->ShouldFail(request));
201 } 182 }
202 183
203 TEST(DevToolsNetworkControllerTest, AllowsNotMatchingRequests) { 184 TEST(DevToolsNetworkControllerTest, AllowsNotMatchingRequests) {
204 DevToolsNetworkControllerHelper helper; 185 DevToolsNetworkControllerHelper helper;
205 helper.mock_transaction()->url = kHttpDotOrg; 186 helper.mock_transaction()->url = kHttpDotOrg;
206 DevToolsNetworkController* controller = helper.controller(); 187 DevToolsNetworkController* controller = helper.controller();
207 net::HttpRequestInfo* request = helper.GetRequest(); 188 net::HttpRequestInfo* request = helper.GetRequest();
208 189
209 EXPECT_FALSE(controller->ShouldFail(request)); 190 EXPECT_FALSE(controller->ShouldFail(request));
210 helper.SetNetworkState(kClientId, true); 191 helper.SetNetworkState(true);
211 EXPECT_FALSE(controller->ShouldFail(request)); 192 EXPECT_FALSE(controller->ShouldFail(request));
212 } 193 }
213 194
214 } // namespace test 195 } // namespace test
OLDNEW
« no previous file with comments | « chrome/browser/devtools/devtools_network_controller.cc ('k') | chrome/browser/devtools/devtools_network_transaction.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698