aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/conftest.py (renamed from test/unit/conftest.py)23
-rw-r--r--test/data/pages/scripts_to_block_1.html1
-rw-r--r--test/test_integration.py29
-rw-r--r--test/unit/test_basic.py4
-rw-r--r--test/unit/test_broadcast.py3
-rw-r--r--test/unit/test_content.py8
-rw-r--r--test/unit/test_indexeddb.py2
-rw-r--r--test/unit/test_patterns_query_manager.py19
-rw-r--r--test/unit/test_repo_query_cacher.py11
9 files changed, 78 insertions, 22 deletions
diff --git a/test/unit/conftest.py b/test/conftest.py
index a3064f1..4eea714 100644
--- a/test/unit/conftest.py
+++ b/test/conftest.py
@@ -27,22 +27,24 @@ Common fixtures for Haketilo unit tests
import pytest
from pathlib import Path
+from tempfile import TemporaryDirectory
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
-from ..profiles import firefox_safe_mode
-from ..server import do_an_internet
-from ..extension_crafting import make_extension
-from ..world_wide_library import start_serving_script, dump_scripts
+from .profiles import firefox_safe_mode
+from .server import do_an_internet
+from .extension_crafting import make_extension
+from .world_wide_library import start_serving_script, dump_scripts
+from .misc_constants import here
-@pytest.fixture(scope="package")
+@pytest.fixture(scope="session")
def proxy():
httpd = do_an_internet()
yield httpd
httpd.shutdown()
-@pytest.fixture(scope="package")
+@pytest.fixture(scope="session")
def _driver(proxy):
with firefox_safe_mode() as driver:
yield driver
@@ -91,6 +93,15 @@ def webextension(driver, request):
driver.uninstall_addon(addon_id)
ext_path.unlink()
+@pytest.fixture()
+def haketilo(driver):
+ addon_id = driver.install_addon(str(here.parent / 'mozilla-build.zip'),
+ temporary=True)
+
+ yield
+
+ driver.uninstall_addon(addon_id)
+
script_injector_script = '''\
/*
* Selenium by default executes scripts in some weird one-time context. We want
diff --git a/test/data/pages/scripts_to_block_1.html b/test/data/pages/scripts_to_block_1.html
index 6d868dd..1aa49ee 100644
--- a/test/data/pages/scripts_to_block_1.html
+++ b/test/data/pages/scripts_to_block_1.html
@@ -19,6 +19,7 @@
-->
<html>
<head>
+ <meta name="charset" value="latin1">
<script>
window.__run = [...(window.__run || []), 'inline'];
</script>
diff --git a/test/test_integration.py b/test/test_integration.py
new file mode 100644
index 0000000..db5ae43
--- /dev/null
+++ b/test/test_integration.py
@@ -0,0 +1,29 @@
+# SPDX-License-Identifier: CC0-1.0
+
+"""
+Haketilo integration tests
+"""
+
+# This file is part of Haketilo
+#
+# Copyright (C) 2022 Wojtek Kosior <koszko@koszko.org>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the CC0 1.0 Universal License as published by
+# the Creative Commons Corporation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# CC0 1.0 Universal License for more details.
+
+import pytest
+from selenium.webdriver.support.ui import WebDriverWait
+
+@pytest.mark.usefixtures('haketilo')
+def test_integration(driver):
+ #from time import sleep
+ #sleep(100000)
+
+ # TODO!!!
+ pass
diff --git a/test/unit/test_basic.py b/test/unit/test_basic.py
index 5f42f5d..6ec54cc 100644
--- a/test/unit/test_basic.py
+++ b/test/unit/test_basic.py
@@ -40,9 +40,9 @@ def test_script_loader(execute_in_page):
A trivial test case that verifies Haketilo's .js files can be properly
loaded into a test page together with their dependencies.
"""
- execute_in_page(load_script('common/stored_types.js'))
+ execute_in_page(load_script('common/indexeddb.js'))
- assert execute_in_page('returnval(TYPE_PREFIX.VAR);') == '_'
+ assert 'mapping' in execute_in_page('returnval(stores.map(s => s[0]));')
@pytest.mark.ext_data({})
@pytest.mark.usefixtures('webextension')
diff --git a/test/unit/test_broadcast.py b/test/unit/test_broadcast.py
index 7de6c80..7c2c051 100644
--- a/test/unit/test_broadcast.py
+++ b/test/unit/test_broadcast.py
@@ -18,6 +18,7 @@ Haketilo unit tests - message broadcasting
# CC0 1.0 Universal License for more details.
import pytest
+from selenium.webdriver.support.ui import WebDriverWait
from ..script_loader import load_script
from .utils import broker_js
@@ -55,8 +56,8 @@ def test_broadcast(driver, execute_in_page, wait_elem_text):
window.open(window.location.href, "_blank");
window.open(window.location.href, "_blank");
''')
+ WebDriverWait(driver, 10).until(lambda d: len(d.window_handles) == 3)
windows = [*driver.window_handles]
- assert len(windows) == 3
# Let's first test if a simple message can be successfully broadcasted
driver.switch_to.window(windows[0])
diff --git a/test/unit/test_content.py b/test/unit/test_content.py
index 35ab027..8220160 100644
--- a/test/unit/test_content.py
+++ b/test/unit/test_content.py
@@ -33,7 +33,7 @@ dynamic_script = \
''';
this.haketilo_secret = "abracadabra";
this.haketilo_pattern_tree = {};
- this.haketilo_defualt_allow = false;
+ this.haketilo_default_allow = false;
if (this.haketilo_content_script_main)
this.haketilo_content_script_main();
@@ -69,7 +69,7 @@ content_script = \
async function mock_payload_ok([type, res_id]) {
if (type === "indexeddb_files")
- return [1, 2].map(n => `window.haketilo_injected_${n} = ${n}${n};`);
+ return {files: [1, 2].map(n => `window.hak_injected_${n} = ${n};`)};
}
if (/payload_error/.test(document.URL)) {
@@ -162,7 +162,7 @@ def test_content_unprivileged_page(driver, execute_in_page, target1, target2):
def vars_made_by_payload(driver):
vars_values = driver.execute_script(
- 'return [1, 2].map(n => window[`haketilo_injected_${n}`]);'
+ 'return [1, 2].map(n => window[`hak_injected_${n}`]);'
)
if vars_values != [None, None]:
return vars_values
@@ -174,7 +174,7 @@ def test_content_unprivileged_page(driver, execute_in_page, target1, target2):
}
elif target2 == 'payload_ok':
vars_values = WebDriverWait(driver, 10).until(vars_made_by_payload)
- assert vars_values == [11, 22]
+ assert vars_values == [1, 2]
@pytest.mark.ext_data({'content_script': content_script})
@pytest.mark.usefixtures('webextension')
diff --git a/test/unit/test_indexeddb.py b/test/unit/test_indexeddb.py
index b320cff..550b923 100644
--- a/test/unit/test_indexeddb.py
+++ b/test/unit/test_indexeddb.py
@@ -318,8 +318,8 @@ def test_haketilodb_track(driver, execute_in_page, wait_elem_text):
# will be used to make changes to IndexedDB and window 0 to "track" those
# changes.
driver.execute_script('window.open(window.location.href, "_blank");')
+ WebDriverWait(driver, 10).until(lambda d: len(d.window_handles) == 2)
windows = [*driver.window_handles]
- assert len(windows) == 2
# Create elements that will have tracked data inserted under them.
driver.switch_to.window(windows[0])
diff --git a/test/unit/test_patterns_query_manager.py b/test/unit/test_patterns_query_manager.py
index c6ebb81..5daf3a0 100644
--- a/test/unit/test_patterns_query_manager.py
+++ b/test/unit/test_patterns_query_manager.py
@@ -150,14 +150,14 @@ def test_pqm_tree_building(driver, execute_in_page):
all([m['identifier'] in last_script for m in sample_mappings]))
execute_in_page(
- '''
+ '''{
const new_setting_val = {name: "default_allow", value: false};
settingchange({key: "default_allow", new_val: new_setting_val});
for (const mapping of arguments[0])
mappingchange({key: mapping.identifier, new_val: mapping});
for (const blocking of arguments[1])
blockingchange({key: blocking.pattern, new_val: blocking});
- ''',
+ }''',
sample_mappings[2:], sample_blocking[2:])
WebDriverWait(driver, 10).until(condition_all_added)
@@ -201,6 +201,19 @@ def test_pqm_tree_building(driver, execute_in_page):
WebDriverWait(driver, 10).until(condition_all_removed)
+ def condition_default_allowed_again(driver):
+ content_script = execute_in_page('returnval(last_script);')
+ cs_values = get_content_script_values(driver, content_script)
+ return cs_values['haketilo_default_allow'] == True
+
+ execute_in_page(
+ '''{
+ const new_setting_val = {name: "default_allow", value: true};
+ settingchange({key: "default_allow", new_val: new_setting_val});
+ }''')
+
+ WebDriverWait(driver, 10).until(condition_default_allowed_again)
+
content_js = '''
let already_run = false;
this.haketilo_content_script_main = function() {
@@ -229,8 +242,8 @@ def test_pqm_script_injection(driver, execute_in_page):
# Let's open a normal page in a second window. Window 0 will be used to make
# changed to IndexedDB and window 1 to test the working of content scripts.
driver.execute_script('window.open("about:blank", "_blank");')
+ WebDriverWait(driver, 10).until(lambda d: len(d.window_handles) == 2)
windows = [*driver.window_handles]
- assert len(windows) == 2
def run_content_script():
driver.switch_to.window(windows[1])
diff --git a/test/unit/test_repo_query_cacher.py b/test/unit/test_repo_query_cacher.py
index b1ce4c8..5fbc5cd 100644
--- a/test/unit/test_repo_query_cacher.py
+++ b/test/unit/test_repo_query_cacher.py
@@ -65,18 +65,19 @@ def run_content_script_in_new_window(driver, url):
Open the provided url in a new tab, find its tab id and return it, with
current window changed back to the initial one.
"""
- initial_handle = driver.current_window_handle
- handles = driver.window_handles
+ handle0 = driver.current_window_handle
+ initial_handles = [*driver.window_handles]
driver.execute_script('window.open(arguments[0], "_blank");', url)
- WebDriverWait(driver, 10).until(lambda d: d.window_handles is not handles)
- new_handle = [h for h in driver.window_handles if h not in handles][0]
+ window_added = lambda d: set(d.window_handles) != set(initial_handles)
+ WebDriverWait(driver, 10).until(window_added)
+ new_handle = [*set(driver.window_handles).difference(initial_handles)][0]
driver.switch_to.window(new_handle)
get_tab_id = lambda d: d.execute_script('return window.haketilo_tab;')
tab_id = WebDriverWait(driver, 10).until(get_tab_id)
- driver.switch_to.window(initial_handle)
+ driver.switch_to.window(handle0)
return tab_id
@pytest.mark.ext_data({