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

Side by Side Diff: chrome/test/chromedriver/chrome/network_conditions_override_manager_unittest.cc

Issue 883083002: [chromedriver] Add Network Conditions Override Manager and tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Working implementation of emulating network conditions with chromedriver Created 5 years, 10 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
(Empty)
1 // Copyright (c) 2015 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 <string>
6 #include <vector>
7
8 #include "base/compiler_specific.h"
9 #include "base/values.h"
10 #include "chrome/test/chromedriver/chrome/network_conditions.h"
11 #include "chrome/test/chromedriver/chrome/network_conditions_override_manager.h"
12 #include "chrome/test/chromedriver/chrome/status.h"
13 #include "chrome/test/chromedriver/chrome/stub_devtools_client.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 namespace {
17
18 struct Command {
19 Command() {}
20 Command(const std::string& method, const base::DictionaryValue& params)
21 : method(method) {
22 this->params.MergeDictionary(&params);
23 }
24 Command(const Command& command) {
25 *this = command;
26 }
27 Command& operator=(const Command& command) {
28 method = command.method;
29 params.Clear();
30 params.MergeDictionary(&command.params);
31 return *this;
32 }
33 ~Command() {}
34
35 std::string method;
36 base::DictionaryValue params;
37 };
38
39 class RecorderDevToolsClient : public StubDevToolsClient {
40 public:
41 RecorderDevToolsClient() {}
42 ~RecorderDevToolsClient() override {}
43
44 // Overridden from StubDevToolsClient:
45 Status SendCommandAndGetResult(
46 const std::string& method,
47 const base::DictionaryValue& params,
48 scoped_ptr<base::DictionaryValue>* result) override {
49 commands_.push_back(Command(method, params));
50
51 // For results of "canEmulateNetworkConditions", always true.
52 (*result).reset(new base::DictionaryValue);
53 (*result)->SetBoolean("result", true);
54 return Status(kOk);
55 }
56
57 std::vector<Command> commands_;
58 };
samuong 2015/02/11 23:22:14 Copies of Command and RecorderDevToolsClient are d
srawlins 2015/02/25 22:40:57 Great idea. Done. I pulled it out of 4 different u
59
60 void AssertNetworkConditionsCommand(
61 const Command& command,
62 const NetworkConditions& network_conditions) {
63 ASSERT_EQ("Network.emulateNetworkConditions", command.method);
64 bool offline;
65 double latency, download_throughput, upload_throughput;
66 ASSERT_TRUE(command.params.GetBoolean("offline", &offline));
67 ASSERT_TRUE(command.params.GetDouble("latency", &latency));
68 ASSERT_TRUE(command.params.GetDouble("downloadThroughput",
69 &download_throughput));
70 ASSERT_TRUE(command.params.GetDouble("uploadThroughput",
71 &upload_throughput));
72 ASSERT_EQ(network_conditions.offline, offline);
73 ASSERT_EQ(network_conditions.latency, latency);
74 ASSERT_EQ(network_conditions.download_throughput, download_throughput);
75 ASSERT_EQ(network_conditions.upload_throughput, upload_throughput);
76 }
77
78 } // namespace
79
80 TEST(NetworkConditionsOverrideManager, OverrideSendsCommand) {
81 RecorderDevToolsClient client;
82 NetworkConditionsOverrideManager manager(&client);
83 NetworkConditions network_conditions = {false, 100, 750*1024, 750*1024};
84 manager.OverrideNetworkConditions(network_conditions);
85 ASSERT_EQ(3u, client.commands_.size());
86 ASSERT_NO_FATAL_FAILURE(
87 AssertNetworkConditionsCommand(client.commands_[2], network_conditions));
88
89 network_conditions.latency = 200;
90 manager.OverrideNetworkConditions(network_conditions);
91 ASSERT_EQ(6u, client.commands_.size());
92 ASSERT_NO_FATAL_FAILURE(
93 AssertNetworkConditionsCommand(client.commands_[5], network_conditions));
94 }
95
96 TEST(NetworkConditionsOverrideManager, SendsCommandOnConnect) {
97 RecorderDevToolsClient client;
98 NetworkConditionsOverrideManager manager(&client);
99 ASSERT_EQ(0u, client.commands_.size());
100 ASSERT_EQ(kOk, manager.OnConnected(&client).code());
101
102 NetworkConditions network_conditions = {false, 100, 750*1024, 750*1024};
103 manager.OverrideNetworkConditions(network_conditions);
104 ASSERT_EQ(3u, client.commands_.size());
105 ASSERT_EQ(kOk, manager.OnConnected(&client).code());
106 ASSERT_EQ(6u, client.commands_.size());
107 ASSERT_NO_FATAL_FAILURE(
108 AssertNetworkConditionsCommand(client.commands_[5], network_conditions));
109 }
110
111 TEST(NetworkConditionsOverrideManager, SendsCommandOnNavigation) {
112 RecorderDevToolsClient client;
113 NetworkConditionsOverrideManager manager(&client);
114 base::DictionaryValue main_frame_params;
115 ASSERT_EQ(kOk,
116 manager.OnEvent(&client, "Page.frameNavigated", main_frame_params)
117 .code());
118 ASSERT_EQ(0u, client.commands_.size());
119
120 NetworkConditions network_conditions = {false, 100, 750*1024, 750*1024};
121 manager.OverrideNetworkConditions(network_conditions);
122 ASSERT_EQ(3u, client.commands_.size());
123 ASSERT_EQ(kOk,
124 manager.OnEvent(&client, "Page.frameNavigated", main_frame_params)
125 .code());
126 ASSERT_EQ(6u, client.commands_.size());
127 ASSERT_NO_FATAL_FAILURE(
128 AssertNetworkConditionsCommand(client.commands_[2], network_conditions));
129
130 base::DictionaryValue sub_frame_params;
131 sub_frame_params.SetString("frame.parentId", "id");
132 ASSERT_EQ(
133 kOk,
134 manager.OnEvent(&client, "Page.frameNavigated", sub_frame_params).code());
135 ASSERT_EQ(6u, client.commands_.size());
136 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698