1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/testing/mozbase/mozprofile/tests/permissions.py Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,165 @@ 1.4 +#!/usr/bin/env python 1.5 + 1.6 +# This Source Code Form is subject to the terms of the Mozilla Public 1.7 +# License, v. 2.0. If a copy of the MPL was not distributed with this file, 1.8 +# You can obtain one at http://mozilla.org/MPL/2.0/. 1.9 + 1.10 +import mozfile 1.11 +import os 1.12 +import shutil 1.13 +import sqlite3 1.14 +import tempfile 1.15 +import unittest 1.16 +from mozprofile.permissions import Permissions 1.17 + 1.18 +class PermissionsTest(unittest.TestCase): 1.19 + 1.20 + locations = """http://mochi.test:8888 primary,privileged 1.21 +http://127.0.0.1:80 noxul 1.22 +http://127.0.0.1:8888 privileged 1.23 +""" 1.24 + 1.25 + profile_dir = None 1.26 + locations_file = None 1.27 + 1.28 + def setUp(self): 1.29 + self.profile_dir = tempfile.mkdtemp() 1.30 + self.locations_file = mozfile.NamedTemporaryFile() 1.31 + self.locations_file.write(self.locations) 1.32 + self.locations_file.flush() 1.33 + 1.34 + def tearDown(self): 1.35 + if self.profile_dir: 1.36 + shutil.rmtree(self.profile_dir) 1.37 + if self.locations_file: 1.38 + self.locations_file.close() 1.39 + 1.40 + def write_perm_db(self, version=3): 1.41 + permDB = sqlite3.connect(os.path.join(self.profile_dir, "permissions.sqlite")) 1.42 + cursor = permDB.cursor() 1.43 + 1.44 + cursor.execute("PRAGMA user_version=%d;" % version) 1.45 + 1.46 + if version == 3: 1.47 + cursor.execute("""CREATE TABLE IF NOT EXISTS moz_hosts ( 1.48 + id INTEGER PRIMARY KEY, 1.49 + host TEXT, 1.50 + type TEXT, 1.51 + permission INTEGER, 1.52 + expireType INTEGER, 1.53 + expireTime INTEGER, 1.54 + appId INTEGER, 1.55 + isInBrowserElement INTEGER)""") 1.56 + elif version == 2: 1.57 + cursor.execute("""CREATE TABLE IF NOT EXISTS moz_hosts ( 1.58 + id INTEGER PRIMARY KEY, 1.59 + host TEXT, 1.60 + type TEXT, 1.61 + permission INTEGER, 1.62 + expireType INTEGER, 1.63 + expireTime INTEGER)""") 1.64 + else: 1.65 + raise Exception("version must be 2 or 3") 1.66 + 1.67 + permDB.commit() 1.68 + cursor.close() 1.69 + 1.70 + def test_create_permissions_db(self): 1.71 + perms = Permissions(self.profile_dir, self.locations_file.name) 1.72 + perms_db_filename = os.path.join(self.profile_dir, 'permissions.sqlite') 1.73 + 1.74 + select_stmt = 'select host, type, permission from moz_hosts' 1.75 + 1.76 + con = sqlite3.connect(perms_db_filename) 1.77 + cur = con.cursor() 1.78 + cur.execute(select_stmt) 1.79 + entries = cur.fetchall() 1.80 + 1.81 + self.assertEqual(len(entries), 3) 1.82 + 1.83 + self.assertEqual(entries[0][0], 'mochi.test') 1.84 + self.assertEqual(entries[0][1], 'allowXULXBL') 1.85 + self.assertEqual(entries[0][2], 1) 1.86 + 1.87 + self.assertEqual(entries[1][0], '127.0.0.1') 1.88 + self.assertEqual(entries[1][1], 'allowXULXBL') 1.89 + self.assertEqual(entries[1][2], 2) 1.90 + 1.91 + self.assertEqual(entries[2][0], '127.0.0.1') 1.92 + self.assertEqual(entries[2][1], 'allowXULXBL') 1.93 + self.assertEqual(entries[2][2], 1) 1.94 + 1.95 + perms._locations.add_host('a.b.c', options='noxul') 1.96 + 1.97 + cur.execute(select_stmt) 1.98 + entries = cur.fetchall() 1.99 + 1.100 + self.assertEqual(len(entries), 4) 1.101 + self.assertEqual(entries[3][0], 'a.b.c') 1.102 + self.assertEqual(entries[3][1], 'allowXULXBL') 1.103 + self.assertEqual(entries[3][2], 2) 1.104 + 1.105 + # when creating a DB we should default to user_version==2 1.106 + cur.execute('PRAGMA user_version') 1.107 + entries = cur.fetchall() 1.108 + self.assertEqual(entries[0][0], 2) 1.109 + 1.110 + perms.clean_db() 1.111 + # table should be removed 1.112 + cur.execute("select * from sqlite_master where type='table'") 1.113 + entries = cur.fetchall() 1.114 + self.assertEqual(len(entries), 0) 1.115 + 1.116 + def test_nw_prefs(self): 1.117 + perms = Permissions(self.profile_dir, self.locations_file.name) 1.118 + 1.119 + prefs, user_prefs = perms.network_prefs(False) 1.120 + 1.121 + self.assertEqual(len(user_prefs), 0) 1.122 + self.assertEqual(len(prefs), 0) 1.123 + 1.124 + prefs, user_prefs = perms.network_prefs(True) 1.125 + self.assertEqual(len(user_prefs), 2) 1.126 + self.assertEqual(user_prefs[0], ('network.proxy.type', 2)) 1.127 + self.assertEqual(user_prefs[1][0], 'network.proxy.autoconfig_url') 1.128 + 1.129 + origins_decl = "var knownOrigins = (function () { return ['http://mochi.test:8888', 'http://127.0.0.1:80', 'http://127.0.0.1:8888'].reduce" 1.130 + self.assertTrue(origins_decl in user_prefs[1][1]) 1.131 + 1.132 + proxy_check = ("'http': 'PROXY mochi.test:8888'", 1.133 + "'https': 'PROXY mochi.test:4443'", 1.134 + "'ws': 'PROXY mochi.test:4443'", 1.135 + "'wss': 'PROXY mochi.test:4443'") 1.136 + self.assertTrue(all(c in user_prefs[1][1] for c in proxy_check)) 1.137 + 1.138 + def verify_user_version(self, version): 1.139 + """Verifies that we call INSERT statements using the correct number 1.140 + of columns for existing databases. 1.141 + """ 1.142 + self.write_perm_db(version=version) 1.143 + Permissions(self.profile_dir, self.locations_file.name) 1.144 + perms_db_filename = os.path.join(self.profile_dir, 'permissions.sqlite') 1.145 + 1.146 + select_stmt = 'select * from moz_hosts' 1.147 + 1.148 + con = sqlite3.connect(perms_db_filename) 1.149 + cur = con.cursor() 1.150 + cur.execute(select_stmt) 1.151 + entries = cur.fetchall() 1.152 + 1.153 + self.assertEqual(len(entries), 3) 1.154 + 1.155 + columns = 8 if version == 3 else 6 1.156 + self.assertEqual(len(entries[0]), columns) 1.157 + for x in range(4, columns): 1.158 + self.assertEqual(entries[0][x], 0) 1.159 + 1.160 + def test_existing_permissions_db_v2(self): 1.161 + self.verify_user_version(2) 1.162 + 1.163 + def test_existing_permissions_db_v3(self): 1.164 + self.verify_user_version(3) 1.165 + 1.166 + 1.167 +if __name__ == '__main__': 1.168 + unittest.main()