summaryrefslogtreecommitdiffstats
path: root/testing/marionette/harness/marionette_harness/tests/unit/test_proxy.py
diff options
context:
space:
mode:
Diffstat (limited to 'testing/marionette/harness/marionette_harness/tests/unit/test_proxy.py')
-rw-r--r--testing/marionette/harness/marionette_harness/tests/unit/test_proxy.py252
1 files changed, 252 insertions, 0 deletions
diff --git a/testing/marionette/harness/marionette_harness/tests/unit/test_proxy.py b/testing/marionette/harness/marionette_harness/tests/unit/test_proxy.py
new file mode 100644
index 000000000..887d69b76
--- /dev/null
+++ b/testing/marionette/harness/marionette_harness/tests/unit/test_proxy.py
@@ -0,0 +1,252 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+from marionette_driver.errors import InvalidArgumentException
+
+from marionette_harness import MarionetteTestCase
+
+
+class TestProxy(MarionetteTestCase):
+
+ def setUp(self):
+ super(TestProxy, self).setUp()
+ self.marionette.delete_session()
+
+ def test_that_we_can_set_a_autodetect_proxy(self):
+ capabilities = {"requiredCapabilities":
+ {
+ "proxy":{
+ "proxyType": "autodetect",
+ }
+ }
+ }
+ self.marionette.start_session(capabilities)
+ result = None
+ with self.marionette.using_context('chrome'):
+ result = self.marionette.execute_script("""return {
+ "proxyType" : Services.prefs.getIntPref('network.proxy.type'),
+ }
+ """)
+
+ self.assertEqual(result["proxyType"], 4)
+
+ def test_that_capabilities_returned_have_proxy_details(self):
+ capabilities = {"requiredCapabilities":
+ {
+ "proxy":{
+ "proxyType": "autodetect",
+ }
+ }
+ }
+ self.marionette.start_session(capabilities)
+ result = self.marionette.session_capabilities
+
+ self.assertEqual(result["proxy"]["proxyType"], "autodetect")
+
+ def test_that_we_can_set_a_system_proxy(self):
+ capabilities = {"requiredCapabilities":
+ {
+ "proxy":{
+ "proxyType": "system",
+ }
+ }
+ }
+ self.marionette.start_session(capabilities)
+ result = None
+ with self.marionette.using_context('chrome'):
+ result = self.marionette.execute_script("""return {
+ "proxyType" : Services.prefs.getIntPref('network.proxy.type'),
+ }
+ """)
+
+ self.assertEqual(result["proxyType"], 5)
+
+ def test_we_can_set_a_pac_proxy(self):
+ url = "http://marionette.test"
+ capabilities = {"requiredCapabilities":
+ {
+ "proxy":{
+ "proxyType": "pac",
+ "proxyAutoconfigUrl": url,
+ }
+ }
+ }
+ self.marionette.start_session(capabilities)
+ result = None
+ with self.marionette.using_context('chrome'):
+ result = self.marionette.execute_script("""return {
+ "proxyType" : Services.prefs.getIntPref('network.proxy.type'),
+ "proxyAutoconfigUrl" : Services.prefs.getCharPref('network.proxy.autoconfig_url'),
+ }
+ """)
+
+ self.assertEqual(result["proxyType"], 2)
+ self.assertEqual(result["proxyAutoconfigUrl"], url, 'proxyAutoconfigUrl was not set')
+
+ def test_that_we_can_set_a_manual_proxy(self):
+ port = 4444
+ url = "http://marionette.test"
+ capabilities = {"requiredCapabilities":
+ {
+ "proxy":{
+ "proxyType": "manual",
+ "ftpProxy": url,
+ "ftpProxyPort": port,
+ "httpProxy": url,
+ "httpProxyPort": port,
+ "sslProxy": url,
+ "sslProxyPort": port,
+ }
+ }
+ }
+ self.marionette.start_session(capabilities)
+ result = None
+ with self.marionette.using_context('chrome'):
+ result = self.marionette.execute_script("""return {
+ "proxyType" : Services.prefs.getIntPref('network.proxy.type'),
+ "httpProxy" : Services.prefs.getCharPref('network.proxy.http'),
+ "httpProxyPort": Services.prefs.getIntPref('network.proxy.http_port'),
+ "sslProxy": Services.prefs.getCharPref('network.proxy.ssl'),
+ "sslProxyPort": Services.prefs.getIntPref('network.proxy.ssl_port'),
+ "ftpProxy": Services.prefs.getCharPref('network.proxy.ftp'),
+ "ftpProxyPort": Services.prefs.getIntPref('network.proxy.ftp_port'),
+ }
+ """)
+
+ self.assertEqual(result["proxyType"], 1)
+ self.assertEqual(result["httpProxy"], url, 'httpProxy was not set')
+ self.assertEqual(result["httpProxyPort"], port, 'httpProxyPort was not set')
+ self.assertEqual(result["sslProxy"], url, 'sslProxy url was not set')
+ self.assertEqual(result["sslProxyPort"], port, 'sslProxyPort was not set')
+ self.assertEqual(result["ftpProxy"], url, 'ftpProxy was not set')
+ self.assertEqual(result["ftpProxyPort"], port, 'ftpProxyPort was not set')
+
+ def test_we_can_set_a_manual_proxy_with_a_socks_proxy_with_socks_version(self):
+ port = 4444
+ url = "http://marionette.test"
+ capabilities = {"requiredCapabilities":
+ {
+ "proxy":{
+ "proxyType": "manual",
+ "socksProxy": url,
+ "socksProxyPort": port,
+ "socksVersion": 4,
+ "socksUsername": "cake",
+ "socksPassword": "made with cake"
+ }
+ }
+ }
+ self.marionette.start_session(capabilities)
+ result = None
+ with self.marionette.using_context('chrome'):
+ result = self.marionette.execute_script("""return {
+ "proxyType" : Services.prefs.getIntPref('network.proxy.type'),
+ "socksProxy" : Services.prefs.getCharPref('network.proxy.socks'),
+ "socksProxyPort": Services.prefs.getIntPref('network.proxy.socks_port'),
+ "socksVersion": Services.prefs.getIntPref('network.proxy.socks_version'),
+ }
+ """)
+ self.assertEqual(result["socksProxy"], url, 'socksProxy was not set')
+ self.assertEqual(result["socksProxyPort"], port, 'socksProxyPort was not set')
+ self.assertEqual(result["socksVersion"], 4, 'socksVersion was not set to 4')
+
+ def test_we_can_set_a_manual_proxy_with_a_socks_proxy_with_no_socks_version(self):
+ port = 4444
+ url = "http://marionette.test"
+ capabilities = {"requiredCapabilities":
+ {
+ "proxy":{
+ "proxyType": "manual",
+ "socksProxy": url,
+ "socksProxyPort": port,
+ "socksUsername": "cake",
+ "socksPassword": "made with cake"
+ }
+ }
+ }
+ self.marionette.start_session(capabilities)
+ result = None
+ with self.marionette.using_context('chrome'):
+ result = self.marionette.execute_script("""return {
+ "proxyType" : Services.prefs.getIntPref('network.proxy.type'),
+ "socksProxy" : Services.prefs.getCharPref('network.proxy.socks'),
+ "socksProxyPort": Services.prefs.getIntPref('network.proxy.socks_port'),
+ "socksVersion": Services.prefs.getIntPref('network.proxy.socks_version'),
+
+ }
+ """)
+ self.assertEqual(result["socksProxy"], url, 'socksProxy was not set')
+ self.assertEqual(result["socksProxyPort"], port, 'socksProxyPort was not set')
+ self.assertEqual(result["socksVersion"], 5, 'socksVersion was not set to 5')
+
+ def test_when_not_all_manual_proxy_details_are_in_capabilities(self):
+ port = 4444
+ url = "http://marionette.test"
+ capabilities = {"requiredCapabilities":
+ {
+ "proxy":{
+ "proxyType": "manual",
+ "ftpProxy": url,
+ "ftpProxyPort": port,
+ }
+ }
+ }
+ self.marionette.start_session(capabilities)
+ result = None
+ with self.marionette.using_context('chrome'):
+ result = self.marionette.execute_script("""return {
+ "proxyType" : Services.prefs.getIntPref('network.proxy.type'),
+ "httpProxy" : Services.prefs.getCharPref('network.proxy.http'),
+ "httpProxyPort": Services.prefs.getIntPref('network.proxy.http_port'),
+ "sslProxy": Services.prefs.getCharPref('network.proxy.ssl'),
+ "sslProxyPort": Services.prefs.getIntPref('network.proxy.ssl_port'),
+ "ftpProxy": Services.prefs.getCharPref('network.proxy.ftp'),
+ "ftpProxyPort": Services.prefs.getIntPref('network.proxy.ftp_port'),
+ }
+ """)
+
+ self.assertEqual(result["proxyType"], 1)
+ self.assertNotEqual(result["httpProxy"], url,
+ 'httpProxy was set. {}'.format(result["httpProxy"]))
+ self.assertNotEqual(result["httpProxyPort"], port, 'httpProxyPort was set')
+ self.assertNotEqual(result["sslProxy"], url, 'sslProxy url was set')
+ self.assertNotEqual(result["sslProxyPort"], port, 'sslProxyPort was set')
+ self.assertEqual(result["ftpProxy"], url, 'ftpProxy was set')
+ self.assertEqual(result["ftpProxyPort"], port, 'ftpProxyPort was set')
+
+
+
+ def test_proxy_is_a_string_should_throw_invalid_argument(self):
+ capabilities = {"requiredCapabilities":
+ {
+ "proxy":"I really should be a dictionary"
+ }
+ }
+ try:
+ self.marionette.start_session(capabilities)
+ self.fail("We should have started a session because proxy should be a dict")
+ except InvalidArgumentException as e:
+ assert e.message == "Value of 'proxy' should be an object"
+
+ def test_proxy_is_passed_in_with_no_proxy_doesnt_set_it(self):
+ capabilities = {"requiredCapabilities":
+ {
+ "proxy": {"proxyType": "NOPROXY"},
+ }
+ }
+ self.marionette.start_session(capabilities)
+ result = None
+ with self.marionette.using_context('chrome'):
+ result = self.marionette.execute_script("""return {
+ "proxyType": Services.prefs.getIntPref('network.proxy.type'),
+ };
+ """)
+
+ self.assertEqual(result["proxyType"], 0)
+
+ def tearDown(self):
+ if not self.marionette.session:
+ self.marionette.start_session()
+ else:
+ self.marionette.restart(clean=True)