testing/mozbase/mozprofile/tests/permissions.py

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rwxr-xr-x

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()

mercurial