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

Unified Diff: chrome/test/chromedriver/capabilities_parser_unittest.cc

Issue 13185004: [chromedriver] Implement proxy capability. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Check unexpected capabilities failed java tests. Created 7 years, 8 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/capabilities_parser_unittest.cc
diff --git a/chrome/test/chromedriver/capabilities_parser_unittest.cc b/chrome/test/chromedriver/capabilities_parser_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..bfaf242e4f6004bc56134f8c8a59aaf8e3ac2af6
--- /dev/null
+++ b/chrome/test/chromedriver/capabilities_parser_unittest.cc
@@ -0,0 +1,285 @@
+// Copyright (c) 2013 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 "chrome/test/chromedriver/capabilities_parser.h"
+
+#include "base/bind.h"
+#include "base/values.h"
+#include "chrome/test/chromedriver/chrome/status.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+bool FileAlwaysExists(const base::FilePath& file) {
+ return true;
+}
+
+bool FileNotExists(const base::FilePath& file) {
+ return false;
+}
+
+} // namespace
+
+TEST(ParseCapabilities, WithAndroidPackage) {
+ Capabilities capabilities;
+ base::DictionaryValue caps;
+ caps.SetString("chromeOptions.android_package", "abc");
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_TRUE(status.IsOk());
+ ASSERT_TRUE(capabilities.IsAndroid());
+ ASSERT_EQ("abc", capabilities.android_package);
+}
+
+TEST(ParseCapabilities, EmptyAndroidPackage) {
+ Capabilities capabilities;
+ base::DictionaryValue caps;
+ caps.SetString("chromeOptions.android_package", "");
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_FALSE(status.IsOk());
+}
+
+TEST(ParseCapabilities, IllegalAndroidPackage) {
+ Capabilities capabilities;
+ base::DictionaryValue caps;
+ caps.SetInteger("chromeOptions.android_package", 123);
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_FALSE(status.IsOk());
+}
+
+TEST(ParseCapabilities, ChromeBinaryExists) {
+ Capabilities capabilities;
+ base::DictionaryValue caps;
+ caps.SetString("chromeOptions.binary", "exist/binary");
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_TRUE(status.IsOk());
+ ASSERT_EQ(FILE_PATH_LITERAL("exist/binary"),
+ capabilities.command.GetProgram().value());
+}
+
+TEST(ParseCapabilities, ChromeBinaryNotExists) {
+ Capabilities capabilities;
+ base::DictionaryValue caps;
+ caps.SetString("chromeOptions.binary", "not/exist/binary");
+ Status status = capabilities.Parse(caps, base::Bind(&FileNotExists));
+ ASSERT_FALSE(status.IsOk());
+}
+
+TEST(ParseCapabilities, LogPath) {
+ Capabilities capabilities;
+ base::DictionaryValue caps;
+ caps.SetString("chromeOptions.logPath", "path/to/logfile");
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_TRUE(status.IsOk());
+ ASSERT_STREQ("path/to/logfile", capabilities.log_path.c_str());
+}
+
+TEST(ParseCapabilities, NoArgs) {
+ Capabilities capabilities;
+ base::ListValue args;
+ ASSERT_TRUE(args.empty());
+ base::DictionaryValue caps;
+ caps.Set("chromeOptions.args", args.DeepCopy());
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_TRUE(status.IsOk());
+ ASSERT_TRUE(capabilities.command.GetSwitches().empty());
+}
+
+TEST(ParseCapabilities, SingleArgWithoutValue) {
+ Capabilities capabilities;
+ base::ListValue args;
+ args.AppendString("enable-nacl");
+ ASSERT_EQ(1u, args.GetSize());
+ base::DictionaryValue caps;
+ caps.Set("chromeOptions.args", args.DeepCopy());
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_TRUE(status.IsOk());
+ ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
+ ASSERT_TRUE(capabilities.command.HasSwitch("enable-nacl"));
+}
+
+TEST(ParseCapabilities, SingleArgWithValue) {
+ Capabilities capabilities;
+ base::ListValue args;
+ args.AppendString("load-extension=/test/extension");
+ ASSERT_EQ(1u, args.GetSize());
+ base::DictionaryValue caps;
+ caps.Set("chromeOptions.args", args.DeepCopy());
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_TRUE(status.IsOk());
+ ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
+ ASSERT_TRUE(capabilities.command.HasSwitch("load-extension"));
+ ASSERT_STREQ(
+ "/test/extension",
+ capabilities.command.GetSwitchValueASCII("load-extension").c_str());
+}
+
+TEST(ParseCapabilities, MultipleArgs) {
+ Capabilities capabilities;
+ base::ListValue args;
+ args.AppendString("arg1");
+ args.AppendString("arg2=val");
+ args.AppendString("arg3='a space'");
+ ASSERT_EQ(3u, args.GetSize());
+ base::DictionaryValue caps;
+ caps.Set("chromeOptions.args", args.DeepCopy());
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_TRUE(status.IsOk());
+ ASSERT_EQ(3u, capabilities.command.GetSwitches().size());
+ ASSERT_TRUE(capabilities.command.HasSwitch("arg1"));
+ ASSERT_TRUE(capabilities.command.HasSwitch("arg2"));
+ ASSERT_STREQ("val", capabilities.command.GetSwitchValueASCII("arg2").c_str());
+ ASSERT_TRUE(capabilities.command.HasSwitch("arg3"));
+ ASSERT_STREQ("'a space'",
+ capabilities.command.GetSwitchValueASCII("arg3").c_str());
+}
+
+TEST(ParseCapabilities, Prefs) {
+ Capabilities capabilities;
+ base::DictionaryValue prefs;
+ prefs.SetString("key1", "value1");
+ prefs.SetString("key2.k", "value2");
+ base::DictionaryValue caps;
+ caps.Set("chromeOptions.prefs", prefs.DeepCopy());
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_TRUE(status.IsOk());
+ ASSERT_TRUE(capabilities.prefs->Equals(&prefs));
+}
+
+TEST(ParseCapabilities, LocalState) {
+ Capabilities capabilities;
+ base::DictionaryValue local_state;
+ local_state.SetString("s1", "v1");
+ local_state.SetString("s2.s", "v2");
+ base::DictionaryValue caps;
+ caps.Set("chromeOptions.localState", local_state.DeepCopy());
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_TRUE(status.IsOk());
+ ASSERT_TRUE(capabilities.local_state->Equals(&local_state));
+}
+
+TEST(ParseCapabilities, Extensions) {
+ Capabilities capabilities;
+ base::ListValue extensions;
+ extensions.AppendString("ext1");
+ extensions.AppendString("ext2");
+ base::DictionaryValue caps;
+ caps.Set("chromeOptions.extensions", extensions.DeepCopy());
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_TRUE(status.IsOk());
+ ASSERT_EQ(2u, capabilities.extensions.size());
+ ASSERT_EQ("ext1", capabilities.extensions[0]);
+ ASSERT_EQ("ext2", capabilities.extensions[1]);
+}
+
+TEST(ParseCapabilities, UnrecognizedProxyType) {
+ Capabilities capabilities;
+ base::DictionaryValue proxy;
+ proxy.SetString("proxyType", "unknown proxy type");
+ base::DictionaryValue caps;
+ caps.Set("proxy", proxy.DeepCopy());
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_FALSE(status.IsOk());
+}
+
+TEST(ParseCapabilities, IllegalProxyType) {
+ Capabilities capabilities;
+ base::DictionaryValue proxy;
+ proxy.SetInteger("proxyType", 123);
+ base::DictionaryValue caps;
+ caps.Set("proxy", proxy.DeepCopy());
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_FALSE(status.IsOk());
+}
+
+TEST(ParseCapabilities, DirectProxy) {
+ Capabilities capabilities;
+ base::DictionaryValue proxy;
+ proxy.SetString("proxyType", "DIRECT");
+ base::DictionaryValue caps;
+ caps.Set("proxy", proxy.DeepCopy());
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_TRUE(status.IsOk());
+ ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
+ ASSERT_TRUE(capabilities.command.HasSwitch("no-proxy-server"));
+}
+
+TEST(ParseCapabilities, SystemProxy) {
+ Capabilities capabilities;
+ base::DictionaryValue proxy;
+ proxy.SetString("proxyType", "system");
+ base::DictionaryValue caps;
+ caps.Set("proxy", proxy.DeepCopy());
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_TRUE(status.IsOk());
+ ASSERT_TRUE(capabilities.command.GetSwitches().empty());
+}
+
+TEST(ParseCapabilities, PacProxy) {
+ Capabilities capabilities;
+ base::DictionaryValue proxy;
+ proxy.SetString("proxyType", "PAC");
+ proxy.SetString("proxyAutoconfigUrl", "test.wpad");
+ base::DictionaryValue caps;
+ caps.Set("proxy", proxy.DeepCopy());
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_TRUE(status.IsOk());
+ ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
+ ASSERT_STREQ(
+ "test.wpad",
+ capabilities.command.GetSwitchValueASCII("proxy-pac-url").c_str());
+}
+
+TEST(ParseCapabilities, MissingProxyAutoconfigUrl) {
+ Capabilities capabilities;
+ base::DictionaryValue proxy;
+ proxy.SetString("proxyType", "PAC");
+ proxy.SetString("httpProxy", "http://localhost:8001");
+ base::DictionaryValue caps;
+ caps.Set("proxy", proxy.DeepCopy());
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_FALSE(status.IsOk());
+}
+
+TEST(ParseCapabilities, AutodetectProxy) {
+ Capabilities capabilities;
+ base::DictionaryValue proxy;
+ proxy.SetString("proxyType", "autodetect");
+ base::DictionaryValue caps;
+ caps.Set("proxy", proxy.DeepCopy());
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_TRUE(status.IsOk());
+ ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
+ ASSERT_TRUE(capabilities.command.HasSwitch("proxy-auto-detect"));
+}
+
+TEST(ParseCapabilities, ManualProxy) {
+ Capabilities capabilities;
+ base::DictionaryValue proxy;
+ proxy.SetString("proxyType", "manual");
+ proxy.SetString("ftpProxy", "localhost:9001");
+ proxy.SetString("httpProxy", "localhost:8001");
+ proxy.SetString("sslProxy", "localhost:10001");
+ proxy.SetString("noProxy", "google.com, youtube.com");
+ base::DictionaryValue caps;
+ caps.Set("proxy", proxy.DeepCopy());
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_TRUE(status.IsOk());
+ ASSERT_EQ(2u, capabilities.command.GetSwitches().size());
+ ASSERT_STREQ(
+ "ftp=localhost:9001;http=localhost:8001;https=localhost:10001",
+ capabilities.command.GetSwitchValueASCII("proxy-server").c_str());
+ ASSERT_STREQ(
+ "google.com, youtube.com",
+ capabilities.command.GetSwitchValueASCII("proxy-bypass-list").c_str());
+}
+
+TEST(ParseCapabilities, MissingSettingForManualProxy) {
+ Capabilities capabilities;
+ base::DictionaryValue proxy;
+ proxy.SetString("proxyType", "manual");
+ base::DictionaryValue caps;
+ caps.Set("proxy", proxy.DeepCopy());
+ Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
+ ASSERT_FALSE(status.IsOk());
+}

Powered by Google App Engine
This is Rietveld 408576698