test_proxy.py (5488B)
1 # This Source Code Form is subject to the terms of the Mozilla Public 2 # License, v. 2.0. If a copy of the MPL was not distributed with this 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 4 5 from marionette_driver import errors 6 7 from marionette_harness import MarionetteTestCase 8 9 10 class TestProxyCapabilities(MarionetteTestCase): 11 def setUp(self): 12 super(TestProxyCapabilities, self).setUp() 13 14 self.marionette.delete_session() 15 16 def tearDown(self): 17 if not self.marionette.session: 18 self.marionette.start_session() 19 20 with self.marionette.using_context("chrome"): 21 self.marionette.execute_script( 22 """ 23 const { Preferences } = ChromeUtils.importESModule( 24 "resource://gre/modules/Preferences.sys.mjs" 25 ); 26 Preferences.resetBranch("network.proxy"); 27 """ 28 ) 29 30 super(TestProxyCapabilities, self).tearDown() 31 32 def test_proxy_object_in_returned_capabilities(self): 33 capabilities = {"proxy": {"proxyType": "system"}} 34 35 self.marionette.start_session(capabilities) 36 self.assertEqual( 37 self.marionette.session_capabilities["proxy"], capabilities["proxy"] 38 ) 39 40 def test_proxy_type_autodetect(self): 41 capabilities = {"proxy": {"proxyType": "autodetect"}} 42 43 self.marionette.start_session(capabilities) 44 self.assertEqual( 45 self.marionette.session_capabilities["proxy"], capabilities["proxy"] 46 ) 47 48 def test_proxy_type_direct(self): 49 capabilities = {"proxy": {"proxyType": "direct"}} 50 51 self.marionette.start_session(capabilities) 52 self.assertEqual( 53 self.marionette.session_capabilities["proxy"], capabilities["proxy"] 54 ) 55 56 def test_proxy_type_manual(self): 57 proxy_hostname = "marionette.test" 58 capabilities = { 59 "proxy": { 60 "proxyType": "manual", 61 "httpProxy": "{}:80".format(proxy_hostname), 62 "sslProxy": "{}:443".format(proxy_hostname), 63 "socksProxy": proxy_hostname, 64 "socksVersion": 4, 65 } 66 } 67 68 self.marionette.start_session(capabilities) 69 self.assertEqual( 70 self.marionette.session_capabilities["proxy"], capabilities["proxy"] 71 ) 72 73 def test_proxy_type_manual_socks_requires_version(self): 74 proxy_port = 4444 75 proxy_hostname = "marionette.test" 76 proxy_host = "{}:{}".format(proxy_hostname, proxy_port) 77 capabilities = { 78 "proxy": { 79 "proxyType": "manual", 80 "socksProxy": proxy_host, 81 } 82 } 83 84 with self.assertRaises(errors.SessionNotCreatedException): 85 self.marionette.start_session(capabilities) 86 87 def test_proxy_type_manual_no_proxy_on(self): 88 capabilities = { 89 "proxy": { 90 "proxyType": "manual", 91 "noProxy": ["foo", "bar"], 92 } 93 } 94 95 self.marionette.start_session(capabilities) 96 self.assertEqual( 97 self.marionette.session_capabilities["proxy"], capabilities["proxy"] 98 ) 99 100 def test_proxy_type_manual_invalid_no_proxy_on(self): 101 capabilities = { 102 "proxy": { 103 "proxyType": "manual", 104 "noProxy": "foo, bar", 105 } 106 } 107 108 with self.assertRaises(errors.SessionNotCreatedException): 109 self.marionette.start_session(capabilities) 110 111 def test_proxy_type_pac(self): 112 pac_url = "http://marionette.test" 113 capabilities = {"proxy": {"proxyType": "pac", "proxyAutoconfigUrl": pac_url}} 114 115 self.marionette.start_session(capabilities) 116 self.assertEqual( 117 self.marionette.session_capabilities["proxy"], capabilities["proxy"] 118 ) 119 120 def test_proxy_type_system(self): 121 capabilities = {"proxy": {"proxyType": "system"}} 122 123 self.marionette.start_session(capabilities) 124 self.assertEqual( 125 self.marionette.session_capabilities["proxy"], capabilities["proxy"] 126 ) 127 128 def test_invalid_proxy_object(self): 129 capabilities = {"proxy": "I really should be a dictionary"} 130 131 with self.assertRaises(errors.SessionNotCreatedException): 132 self.marionette.start_session(capabilities) 133 134 def test_missing_proxy_type(self): 135 with self.assertRaises(errors.SessionNotCreatedException): 136 self.marionette.start_session({"proxy": {"proxyAutoconfigUrl": "foobar"}}) 137 138 def test_invalid_proxy_type(self): 139 capabilities = {"proxy": {"proxyType": "NOPROXY"}} 140 141 with self.assertRaises(errors.SessionNotCreatedException): 142 self.marionette.start_session(capabilities) 143 144 def test_invalid_autoconfig_url_for_pac(self): 145 with self.assertRaises(errors.SessionNotCreatedException): 146 self.marionette.start_session({"proxy": {"proxyType": "pac"}}) 147 148 with self.assertRaises(errors.SessionNotCreatedException): 149 self.marionette.start_session( 150 {"proxy": {"proxyType": "pac", "proxyAutoconfigUrl": None}} 151 ) 152 153 def test_missing_socks_version_for_manual(self): 154 capabilities = { 155 "proxy": {"proxyType": "manual", "socksProxy": "marionette.test"} 156 } 157 158 with self.assertRaises(errors.SessionNotCreatedException): 159 self.marionette.start_session(capabilities)