Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 #!/usr/bin/env python
3 # This Source Code Form is subject to the terms of the Mozilla Public
4 # License, v. 2.0. If a copy of the MPL was not distributed with this file,
5 # You can obtain one at http://mozilla.org/MPL/2.0/.
7 import mozfile
8 import os
9 import shutil
10 import sqlite3
11 import tempfile
12 import unittest
13 from mozprofile.permissions import Permissions
15 class PermissionsTest(unittest.TestCase):
17 locations = """http://mochi.test:8888 primary,privileged
18 http://127.0.0.1:80 noxul
19 http://127.0.0.1:8888 privileged
20 """
22 profile_dir = None
23 locations_file = None
25 def setUp(self):
26 self.profile_dir = tempfile.mkdtemp()
27 self.locations_file = mozfile.NamedTemporaryFile()
28 self.locations_file.write(self.locations)
29 self.locations_file.flush()
31 def tearDown(self):
32 if self.profile_dir:
33 shutil.rmtree(self.profile_dir)
34 if self.locations_file:
35 self.locations_file.close()
37 def write_perm_db(self, version=3):
38 permDB = sqlite3.connect(os.path.join(self.profile_dir, "permissions.sqlite"))
39 cursor = permDB.cursor()
41 cursor.execute("PRAGMA user_version=%d;" % version)
43 if version == 3:
44 cursor.execute("""CREATE TABLE IF NOT EXISTS moz_hosts (
45 id INTEGER PRIMARY KEY,
46 host TEXT,
47 type TEXT,
48 permission INTEGER,
49 expireType INTEGER,
50 expireTime INTEGER,
51 appId INTEGER,
52 isInBrowserElement INTEGER)""")
53 elif version == 2:
54 cursor.execute("""CREATE TABLE IF NOT EXISTS moz_hosts (
55 id INTEGER PRIMARY KEY,
56 host TEXT,
57 type TEXT,
58 permission INTEGER,
59 expireType INTEGER,
60 expireTime INTEGER)""")
61 else:
62 raise Exception("version must be 2 or 3")
64 permDB.commit()
65 cursor.close()
67 def test_create_permissions_db(self):
68 perms = Permissions(self.profile_dir, self.locations_file.name)
69 perms_db_filename = os.path.join(self.profile_dir, 'permissions.sqlite')
71 select_stmt = 'select host, type, permission from moz_hosts'
73 con = sqlite3.connect(perms_db_filename)
74 cur = con.cursor()
75 cur.execute(select_stmt)
76 entries = cur.fetchall()
78 self.assertEqual(len(entries), 3)
80 self.assertEqual(entries[0][0], 'mochi.test')
81 self.assertEqual(entries[0][1], 'allowXULXBL')
82 self.assertEqual(entries[0][2], 1)
84 self.assertEqual(entries[1][0], '127.0.0.1')
85 self.assertEqual(entries[1][1], 'allowXULXBL')
86 self.assertEqual(entries[1][2], 2)
88 self.assertEqual(entries[2][0], '127.0.0.1')
89 self.assertEqual(entries[2][1], 'allowXULXBL')
90 self.assertEqual(entries[2][2], 1)
92 perms._locations.add_host('a.b.c', options='noxul')
94 cur.execute(select_stmt)
95 entries = cur.fetchall()
97 self.assertEqual(len(entries), 4)
98 self.assertEqual(entries[3][0], 'a.b.c')
99 self.assertEqual(entries[3][1], 'allowXULXBL')
100 self.assertEqual(entries[3][2], 2)
102 # when creating a DB we should default to user_version==2
103 cur.execute('PRAGMA user_version')
104 entries = cur.fetchall()
105 self.assertEqual(entries[0][0], 2)
107 perms.clean_db()
108 # table should be removed
109 cur.execute("select * from sqlite_master where type='table'")
110 entries = cur.fetchall()
111 self.assertEqual(len(entries), 0)
113 def test_nw_prefs(self):
114 perms = Permissions(self.profile_dir, self.locations_file.name)
116 prefs, user_prefs = perms.network_prefs(False)
118 self.assertEqual(len(user_prefs), 0)
119 self.assertEqual(len(prefs), 0)
121 prefs, user_prefs = perms.network_prefs(True)
122 self.assertEqual(len(user_prefs), 2)
123 self.assertEqual(user_prefs[0], ('network.proxy.type', 2))
124 self.assertEqual(user_prefs[1][0], 'network.proxy.autoconfig_url')
126 origins_decl = "var knownOrigins = (function () { return ['http://mochi.test:8888', 'http://127.0.0.1:80', 'http://127.0.0.1:8888'].reduce"
127 self.assertTrue(origins_decl in user_prefs[1][1])
129 proxy_check = ("'http': 'PROXY mochi.test:8888'",
130 "'https': 'PROXY mochi.test:4443'",
131 "'ws': 'PROXY mochi.test:4443'",
132 "'wss': 'PROXY mochi.test:4443'")
133 self.assertTrue(all(c in user_prefs[1][1] for c in proxy_check))
135 def verify_user_version(self, version):
136 """Verifies that we call INSERT statements using the correct number
137 of columns for existing databases.
138 """
139 self.write_perm_db(version=version)
140 Permissions(self.profile_dir, self.locations_file.name)
141 perms_db_filename = os.path.join(self.profile_dir, 'permissions.sqlite')
143 select_stmt = 'select * from moz_hosts'
145 con = sqlite3.connect(perms_db_filename)
146 cur = con.cursor()
147 cur.execute(select_stmt)
148 entries = cur.fetchall()
150 self.assertEqual(len(entries), 3)
152 columns = 8 if version == 3 else 6
153 self.assertEqual(len(entries[0]), columns)
154 for x in range(4, columns):
155 self.assertEqual(entries[0][x], 0)
157 def test_existing_permissions_db_v2(self):
158 self.verify_user_version(2)
160 def test_existing_permissions_db_v3(self):
161 self.verify_user_version(3)
164 if __name__ == '__main__':
165 unittest.main()