summaryrefslogtreecommitdiffstats
path: root/testing/mozbase/mozprofile/tests/test_permissions.py
diff options
context:
space:
mode:
Diffstat (limited to 'testing/mozbase/mozprofile/tests/test_permissions.py')
-rwxr-xr-xtesting/mozbase/mozprofile/tests/test_permissions.py225
1 files changed, 225 insertions, 0 deletions
diff --git a/testing/mozbase/mozprofile/tests/test_permissions.py b/testing/mozbase/mozprofile/tests/test_permissions.py
new file mode 100755
index 0000000000..d943bab66e
--- /dev/null
+++ b/testing/mozbase/mozprofile/tests/test_permissions.py
@@ -0,0 +1,225 @@
+#!/usr/bin/env python
+
+# 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 __future__ import absolute_import
+
+import os
+import sqlite3
+
+import mozunit
+import pytest
+
+from mozprofile.permissions import Permissions
+
+LOCATIONS = """http://mochi.test:8888 primary,privileged
+http://127.0.0.1:80 noxul
+http://127.0.0.1:8888 privileged
+"""
+
+
+@pytest.fixture
+def locations_file(tmpdir):
+ locations_file = tmpdir.join("locations.txt")
+ locations_file.write(LOCATIONS)
+ return locations_file.strpath
+
+
+@pytest.fixture
+def perms(tmpdir, locations_file):
+ return Permissions(tmpdir.mkdir("profile").strpath, locations_file)
+
+
+def test_create_permissions_db(perms):
+ profile_dir = perms._profileDir
+ perms_db_filename = os.path.join(profile_dir, "permissions.sqlite")
+
+ select_stmt = "select origin, type, permission from moz_hosts"
+
+ con = sqlite3.connect(perms_db_filename)
+ cur = con.cursor()
+ cur.execute(select_stmt)
+ entries = cur.fetchall()
+
+ assert len(entries) == 3
+
+ assert entries[0][0] == "http://mochi.test:8888"
+ assert entries[0][1] == "allowXULXBL"
+ assert entries[0][2] == 1
+
+ assert entries[1][0] == "http://127.0.0.1"
+ assert entries[1][1] == "allowXULXBL"
+ assert entries[1][2] == 2
+
+ assert entries[2][0] == "http://127.0.0.1:8888"
+ assert entries[2][1] == "allowXULXBL"
+ assert entries[2][2] == 1
+
+ perms._locations.add_host("a.b.c", port="8081", scheme="https", options="noxul")
+
+ cur.execute(select_stmt)
+ entries = cur.fetchall()
+
+ assert len(entries) == 4
+ assert entries[3][0] == "https://a.b.c:8081"
+ assert entries[3][1] == "allowXULXBL"
+ assert entries[3][2] == 2
+
+ # when creating a DB we should default to user_version==5
+ cur.execute("PRAGMA user_version")
+ entries = cur.fetchall()
+ assert entries[0][0] == 5
+
+ perms.clean_db()
+ # table should be removed
+ cur.execute("select * from sqlite_master where type='table'")
+ entries = cur.fetchall()
+ assert len(entries) == 0
+
+
+def test_nw_prefs(perms):
+ prefs, user_prefs = perms.network_prefs(False)
+
+ assert len(user_prefs) == 0
+ assert len(prefs) == 0
+
+ prefs, user_prefs = perms.network_prefs(True)
+ assert len(user_prefs) == 2
+ assert user_prefs[0] == ("network.proxy.type", 2)
+ assert user_prefs[1][0] == "network.proxy.autoconfig_url"
+
+ origins_decl = (
+ "var knownOrigins = (function () { return ['http://mochi.test:8888', "
+ "'http://127.0.0.1:80', 'http://127.0.0.1:8888'].reduce"
+ )
+ assert origins_decl in user_prefs[1][1]
+
+ proxy_check = (
+ "'http': 'PROXY mochi.test:8888'",
+ "'https': 'PROXY mochi.test:4443'",
+ "'ws': 'PROXY mochi.test:4443'",
+ "'wss': 'PROXY mochi.test:4443'",
+ )
+ assert all(c in user_prefs[1][1] for c in proxy_check)
+
+
+@pytest.fixture
+def perms_db_filename(tmpdir):
+ return tmpdir.join("permissions.sqlite").strpath
+
+
+@pytest.fixture
+def permDB(perms_db_filename):
+ permDB = sqlite3.connect(perms_db_filename)
+ yield permDB
+ permDB.cursor().close()
+
+
+# pylint: disable=W1638
+@pytest.fixture(params=range(2, 6))
+def version(request, perms_db_filename, permDB, locations_file):
+ version = request.param
+
+ cursor = permDB.cursor()
+ cursor.execute("PRAGMA user_version=%d;" % version)
+
+ if version == 5:
+ cursor.execute(
+ """CREATE TABLE IF NOT EXISTS moz_hosts (
+ id INTEGER PRIMARY KEY,
+ origin TEXT,
+ type TEXT,
+ permission INTEGER,
+ expireType INTEGER,
+ expireTime INTEGER,
+ modificationTime INTEGER)"""
+ )
+ elif version == 4:
+ cursor.execute(
+ """CREATE TABLE IF NOT EXISTS moz_hosts (
+ id INTEGER PRIMARY KEY,
+ host TEXT,
+ type TEXT,
+ permission INTEGER,
+ expireType INTEGER,
+ expireTime INTEGER,
+ modificationTime INTEGER,
+ appId INTEGER,
+ isInBrowserElement INTEGER)"""
+ )
+ elif version == 3:
+ cursor.execute(
+ """CREATE TABLE IF NOT EXISTS moz_hosts (
+ id INTEGER PRIMARY KEY,
+ host TEXT,
+ type TEXT,
+ permission INTEGER,
+ expireType INTEGER,
+ expireTime INTEGER,
+ appId INTEGER,
+ isInBrowserElement INTEGER)"""
+ )
+ elif version == 2:
+ cursor.execute(
+ """CREATE TABLE IF NOT EXISTS moz_hosts (
+ id INTEGER PRIMARY KEY,
+ host TEXT,
+ type TEXT,
+ permission INTEGER,
+ expireType INTEGER,
+ expireTime INTEGER)"""
+ )
+ else:
+ raise Exception("version must be 2, 3, 4 or 5")
+ permDB.commit()
+
+ # Create a permissions object to read the db
+ Permissions(os.path.dirname(perms_db_filename), locations_file)
+ return version
+
+
+def test_verify_user_version(version, permDB):
+ """Verifies that we call INSERT statements using the correct number
+ of columns for existing databases.
+ """
+ select_stmt = "select * from moz_hosts"
+
+ cur = permDB.cursor()
+ cur.execute(select_stmt)
+ entries = cur.fetchall()
+
+ assert len(entries) == 3
+
+ columns = {
+ 1: 6,
+ 2: 6,
+ 3: 8,
+ 4: 9,
+ 5: 7,
+ }[version]
+
+ assert len(entries[0]) == columns
+ for x in range(4, columns):
+ assert entries[0][x] == 0
+
+
+def test_schema_version(perms, locations_file):
+ profile_dir = perms._profileDir
+ perms_db_filename = os.path.join(profile_dir, "permissions.sqlite")
+ perms.write_db(open(locations_file, "w+b"))
+
+ stmt = "PRAGMA user_version;"
+
+ con = sqlite3.connect(perms_db_filename)
+ cur = con.cursor()
+ cur.execute(stmt)
+ entries = cur.fetchall()
+
+ schema_version = entries[0][0]
+ assert schema_version == 5
+
+
+if __name__ == "__main__":
+ mozunit.main()