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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: chrome/test/chromedriver/chrome/network_conditions_override_manager_unittest.cc
diff --git a/chrome/test/chromedriver/chrome/network_conditions_override_manager_unittest.cc b/chrome/test/chromedriver/chrome/network_conditions_override_manager_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..f064f78b102f3c9fc7ce31b96746c218a5b9045a
--- /dev/null
+++ b/chrome/test/chromedriver/chrome/network_conditions_override_manager_unittest.cc
@@ -0,0 +1,136 @@
+// Copyright (c) 2015 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 <string>
+#include <vector>
+
+#include "base/compiler_specific.h"
+#include "base/values.h"
+#include "chrome/test/chromedriver/chrome/network_conditions.h"
+#include "chrome/test/chromedriver/chrome/network_conditions_override_manager.h"
+#include "chrome/test/chromedriver/chrome/status.h"
+#include "chrome/test/chromedriver/chrome/stub_devtools_client.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+struct Command {
+ Command() {}
+ Command(const std::string& method, const base::DictionaryValue& params)
+ : method(method) {
+ this->params.MergeDictionary(&params);
+ }
+ Command(const Command& command) {
+ *this = command;
+ }
+ Command& operator=(const Command& command) {
+ method = command.method;
+ params.Clear();
+ params.MergeDictionary(&command.params);
+ return *this;
+ }
+ ~Command() {}
+
+ std::string method;
+ base::DictionaryValue params;
+};
+
+class RecorderDevToolsClient : public StubDevToolsClient {
+ public:
+ RecorderDevToolsClient() {}
+ ~RecorderDevToolsClient() override {}
+
+ // Overridden from StubDevToolsClient:
+ Status SendCommandAndGetResult(
+ const std::string& method,
+ const base::DictionaryValue& params,
+ scoped_ptr<base::DictionaryValue>* result) override {
+ commands_.push_back(Command(method, params));
+
+ // For results of "canEmulateNetworkConditions", always true.
+ (*result).reset(new base::DictionaryValue);
+ (*result)->SetBoolean("result", true);
+ return Status(kOk);
+ }
+
+ std::vector<Command> commands_;
+};
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
+
+void AssertNetworkConditionsCommand(
+ const Command& command,
+ const NetworkConditions& network_conditions) {
+ ASSERT_EQ("Network.emulateNetworkConditions", command.method);
+ bool offline;
+ double latency, download_throughput, upload_throughput;
+ ASSERT_TRUE(command.params.GetBoolean("offline", &offline));
+ ASSERT_TRUE(command.params.GetDouble("latency", &latency));
+ ASSERT_TRUE(command.params.GetDouble("downloadThroughput",
+ &download_throughput));
+ ASSERT_TRUE(command.params.GetDouble("uploadThroughput",
+ &upload_throughput));
+ ASSERT_EQ(network_conditions.offline, offline);
+ ASSERT_EQ(network_conditions.latency, latency);
+ ASSERT_EQ(network_conditions.download_throughput, download_throughput);
+ ASSERT_EQ(network_conditions.upload_throughput, upload_throughput);
+}
+
+} // namespace
+
+TEST(NetworkConditionsOverrideManager, OverrideSendsCommand) {
+ RecorderDevToolsClient client;
+ NetworkConditionsOverrideManager manager(&client);
+ NetworkConditions network_conditions = {false, 100, 750*1024, 750*1024};
+ manager.OverrideNetworkConditions(network_conditions);
+ ASSERT_EQ(3u, client.commands_.size());
+ ASSERT_NO_FATAL_FAILURE(
+ AssertNetworkConditionsCommand(client.commands_[2], network_conditions));
+
+ network_conditions.latency = 200;
+ manager.OverrideNetworkConditions(network_conditions);
+ ASSERT_EQ(6u, client.commands_.size());
+ ASSERT_NO_FATAL_FAILURE(
+ AssertNetworkConditionsCommand(client.commands_[5], network_conditions));
+}
+
+TEST(NetworkConditionsOverrideManager, SendsCommandOnConnect) {
+ RecorderDevToolsClient client;
+ NetworkConditionsOverrideManager manager(&client);
+ ASSERT_EQ(0u, client.commands_.size());
+ ASSERT_EQ(kOk, manager.OnConnected(&client).code());
+
+ NetworkConditions network_conditions = {false, 100, 750*1024, 750*1024};
+ manager.OverrideNetworkConditions(network_conditions);
+ ASSERT_EQ(3u, client.commands_.size());
+ ASSERT_EQ(kOk, manager.OnConnected(&client).code());
+ ASSERT_EQ(6u, client.commands_.size());
+ ASSERT_NO_FATAL_FAILURE(
+ AssertNetworkConditionsCommand(client.commands_[5], network_conditions));
+}
+
+TEST(NetworkConditionsOverrideManager, SendsCommandOnNavigation) {
+ RecorderDevToolsClient client;
+ NetworkConditionsOverrideManager manager(&client);
+ base::DictionaryValue main_frame_params;
+ ASSERT_EQ(kOk,
+ manager.OnEvent(&client, "Page.frameNavigated", main_frame_params)
+ .code());
+ ASSERT_EQ(0u, client.commands_.size());
+
+ NetworkConditions network_conditions = {false, 100, 750*1024, 750*1024};
+ manager.OverrideNetworkConditions(network_conditions);
+ ASSERT_EQ(3u, client.commands_.size());
+ ASSERT_EQ(kOk,
+ manager.OnEvent(&client, "Page.frameNavigated", main_frame_params)
+ .code());
+ ASSERT_EQ(6u, client.commands_.size());
+ ASSERT_NO_FATAL_FAILURE(
+ AssertNetworkConditionsCommand(client.commands_[2], network_conditions));
+
+ base::DictionaryValue sub_frame_params;
+ sub_frame_params.SetString("frame.parentId", "id");
+ ASSERT_EQ(
+ kOk,
+ manager.OnEvent(&client, "Page.frameNavigated", sub_frame_params).code());
+ ASSERT_EQ(6u, client.commands_.size());
+}

Powered by Google App Engine
This is Rietveld 408576698