1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/chromedriver/capabilities.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/values.h" 8c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#include "chrome/test/chromedriver/chrome/log.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/chromedriver/chrome/status.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(Switches, Empty) { 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches; 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CommandLine cmd(CommandLine::NO_PROGRAM); 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.AppendToCommandLine(&cmd); 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(0u, cmd.GetSwitches().size()); 1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("", switches.ToString()); 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(Switches, NoValue) { 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches; 2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetSwitch("hello"); 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(switches.HasSwitch("hello")); 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("", switches.GetSwitchValue("hello")); 2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CommandLine cmd(CommandLine::NO_PROGRAM); 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.AppendToCommandLine(&cmd); 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(cmd.HasSwitch("hello")); 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(FILE_PATH_LITERAL(""), cmd.GetSwitchValueNative("hello")); 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("--hello", switches.ToString()); 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(Switches, Value) { 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches; 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetSwitch("hello", "there"); 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(switches.HasSwitch("hello")); 3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("there", switches.GetSwitchValue("hello")); 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CommandLine cmd(CommandLine::NO_PROGRAM); 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.AppendToCommandLine(&cmd); 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(cmd.HasSwitch("hello")); 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(FILE_PATH_LITERAL("there"), cmd.GetSwitchValueNative("hello")); 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("--hello=there", switches.ToString()); 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(Switches, FromOther) { 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches; 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetSwitch("a", "1"); 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetSwitch("b", "1"); 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches2; 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches2.SetSwitch("b", "2"); 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches2.SetSwitch("c", "2"); 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetFromSwitches(switches2); 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("--a=1 --b=2 --c=2", switches.ToString()); 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(Switches, Remove) { 6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches; 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetSwitch("a", "1"); 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.RemoveSwitch("a"); 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_FALSE(switches.HasSwitch("a")); 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(Switches, Quoting) { 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches; 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetSwitch("hello", "a b"); 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetSwitch("hello2", " '\" "); 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("--hello=\"a b\" --hello2=\" '\\\" \"", switches.ToString()); 7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(Switches, Multiple) { 7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches; 7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetSwitch("switch"); 7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetSwitch("hello", "there"); 8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CommandLine cmd(CommandLine::NO_PROGRAM); 8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.AppendToCommandLine(&cmd); 8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(cmd.HasSwitch("switch")); 8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(cmd.HasSwitch("hello")); 8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(FILE_PATH_LITERAL("there"), cmd.GetSwitchValueNative("hello")); 8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("--hello=there --switch", switches.ToString()); 8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(Switches, Unparsed) { 9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Switches switches; 9158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetUnparsedSwitch("a"); 9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetUnparsedSwitch("--b"); 9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetUnparsedSwitch("--c=1"); 9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetUnparsedSwitch("d=1"); 9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switches.SetUnparsedSwitch("-e=--1=1"); 9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("---e=--1=1 --a --b --c=1 --d=1", switches.ToString()); 9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, WithAndroidPackage) { 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.SetString("chromeOptions.androidPackage", "abc"); 10458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(capabilities.IsAndroid()); 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ("abc", capabilities.android_package); 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, EmptyAndroidPackage) { 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.SetString("chromeOptions.androidPackage", std::string()); 11458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(status.IsOk()); 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, IllegalAndroidPackage) { 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.SetInteger("chromeOptions.androidPackage", 123); 12258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(status.IsOk()); 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, LogPath) { 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.SetString("chromeOptions.logPath", "path/to/logfile"); 13058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_STREQ("path/to/logfile", capabilities.log_path.c_str()); 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 13558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(ParseCapabilities, Args) { 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::ListValue args; 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) args.AppendString("arg1"); 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) args.AppendString("arg2=val"); 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("chromeOptions.args", args.DeepCopy()); 14258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 14358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 14558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 14658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(2u, capabilities.switches.GetSize()); 14758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(capabilities.switches.HasSwitch("arg1")); 14858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(capabilities.switches.HasSwitch("arg2")); 14958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("", capabilities.switches.GetSwitchValue("arg1")); 15058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("val", capabilities.switches.GetSwitchValue("arg2")); 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, Prefs) { 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue prefs; 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs.SetString("key1", "value1"); 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs.SetString("key2.k", "value2"); 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("chromeOptions.prefs", prefs.DeepCopy()); 16058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(capabilities.prefs->Equals(&prefs)); 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, LocalState) { 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue local_state; 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) local_state.SetString("s1", "v1"); 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) local_state.SetString("s2.s", "v2"); 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("chromeOptions.localState", local_state.DeepCopy()); 17258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(capabilities.local_state->Equals(&local_state)); 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, Extensions) { 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::ListValue extensions; 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions.AppendString("ext1"); 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions.AppendString("ext2"); 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("chromeOptions.extensions", extensions.DeepCopy()); 18458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(2u, capabilities.extensions.size()); 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ("ext1", capabilities.extensions[0]); 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ("ext2", capabilities.extensions[1]); 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, UnrecognizedProxyType) { 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue proxy; 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("proxyType", "unknown proxy type"); 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("proxy", proxy.DeepCopy()); 19758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(status.IsOk()); 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, IllegalProxyType) { 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue proxy; 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetInteger("proxyType", 123); 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("proxy", proxy.DeepCopy()); 20758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(status.IsOk()); 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, DirectProxy) { 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue proxy; 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("proxyType", "DIRECT"); 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("proxy", proxy.DeepCopy()); 21758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 21958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(1u, capabilities.switches.GetSize()); 22058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(capabilities.switches.HasSwitch("no-proxy-server")); 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, SystemProxy) { 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue proxy; 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("proxyType", "system"); 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("proxy", proxy.DeepCopy()); 22958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 23158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(0u, capabilities.switches.GetSize()); 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, PacProxy) { 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue proxy; 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("proxyType", "PAC"); 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("proxyAutoconfigUrl", "test.wpad"); 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("proxy", proxy.DeepCopy()); 24158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 24358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(1u, capabilities.switches.GetSize()); 24458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("test.wpad", capabilities.switches.GetSwitchValue("proxy-pac-url")); 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, MissingProxyAutoconfigUrl) { 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue proxy; 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("proxyType", "PAC"); 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("httpProxy", "http://localhost:8001"); 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("proxy", proxy.DeepCopy()); 25458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(status.IsOk()); 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, AutodetectProxy) { 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue proxy; 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("proxyType", "autodetect"); 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("proxy", proxy.DeepCopy()); 26458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 26658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(1u, capabilities.switches.GetSize()); 26758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(capabilities.switches.HasSwitch("proxy-auto-detect")); 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, ManualProxy) { 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue proxy; 273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("proxyType", "manual"); 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("ftpProxy", "localhost:9001"); 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("httpProxy", "localhost:8001"); 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("sslProxy", "localhost:10001"); 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("noProxy", "google.com, youtube.com"); 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("proxy", proxy.DeepCopy()); 28058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 28258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(2u, capabilities.switches.GetSize()); 28358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ( 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "ftp=localhost:9001;http=localhost:8001;https=localhost:10001", 28558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) capabilities.switches.GetSwitchValue("proxy-server")); 28658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ( 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "google.com, youtube.com", 28858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) capabilities.switches.GetSwitchValue("proxy-bypass-list")); 289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, MissingSettingForManualProxy) { 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue proxy; 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("proxyType", "manual"); 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("proxy", proxy.DeepCopy()); 29758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(status.IsOk()); 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, IgnoreNullValueForManualProxy) { 302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue proxy; 304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("proxyType", "manual"); 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.SetString("ftpProxy", "localhost:9001"); 306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.Set("sslProxy", base::Value::CreateNullValue()); 307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy.Set("noProxy", base::Value::CreateNullValue()); 308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("proxy", proxy.DeepCopy()); 31058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 31258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(1u, capabilities.switches.GetSize()); 31358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(capabilities.switches.HasSwitch("proxy-server")); 31458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ( 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "ftp=localhost:9001", 31658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) capabilities.switches.GetSwitchValue("proxy-server")); 317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, LoggingPrefsOk) { 320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue logging_prefs; 322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) logging_prefs.SetString("Network", "INFO"); 323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.Set("loggingPrefs", logging_prefs.DeepCopy()); 32558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(status.IsOk()); 32758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(1u, capabilities.logging_prefs.size()); 32858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(Log::kInfo, capabilities.logging_prefs["Network"]); 329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(ParseCapabilities, LoggingPrefsNotDict) { 332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Capabilities capabilities; 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue caps; 334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) caps.SetString("loggingPrefs", "INFO"); 33558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(status.IsOk()); 337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 3383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST(ParseCapabilities, ExcludeSwitches) { 3403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) Capabilities capabilities; 3413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::ListValue exclude_switches; 3423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) exclude_switches.AppendString("switch1"); 3433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) exclude_switches.AppendString("switch2"); 3443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::DictionaryValue caps; 3453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) caps.Set("chromeOptions.excludeSwitches", exclude_switches.DeepCopy()); 34658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 3473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(status.IsOk()); 3483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_EQ(2u, capabilities.exclude_switches.size()); 3493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::set<std::string>& switches = capabilities.exclude_switches; 3503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(switches.find("switch1") != switches.end()); 3513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(switches.find("switch2") != switches.end()); 3523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 353424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 354424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST(ParseCapabilities, UseExistingBrowser) { 355424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Capabilities capabilities; 356424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::DictionaryValue caps; 35758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) caps.SetString("chromeOptions.debuggerAddress", "abc:123"); 35858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Status status = capabilities.Parse(caps); 359424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(status.IsOk()); 360424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(capabilities.IsExistingBrowser()); 36158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("abc", capabilities.debugger_address.host()); 36258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(123, capabilities.debugger_address.port()); 363424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 364