From 1c65dd5ca24052ccf9a92939eecd0966c9635c50 Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Wed, 9 Feb 2022 17:09:13 +0100 Subject: adapt to changes in file path format From now on we assume Hydrilla serves file contents at 'file/sha256/' instead of 'file/sha256-'. With this commit we also stop using the "hash_key" property internally. --- test/unit/test_indexeddb.py | 48 ++++++++++++++++++-------------- test/unit/test_indexeddb_files_server.py | 6 ++-- test/unit/test_item_list.py | 8 ++++-- test/unit/test_item_preview.py | 2 +- test/unit/test_payload_create.py | 4 ++- test/unit/utils.py | 19 ++++++------- test/world_wide_library.py | 2 +- 7 files changed, 51 insertions(+), 38 deletions(-) (limited to 'test') diff --git a/test/unit/test_indexeddb.py b/test/unit/test_indexeddb.py index 7ce4781..9041116 100644 --- a/test/unit/test_indexeddb.py +++ b/test/unit/test_indexeddb.py @@ -6,7 +6,7 @@ Haketilo unit tests - IndexedDB access # This file is part of Haketilo # -# Copyright (C) 2021,2022 Wojtek Kosior +# Copyright (C) 2021, 2022 Wojtek Kosior # # 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 @@ -73,19 +73,19 @@ def test_haketilodb_item_modifications(driver, execute_in_page): .then(finalize_transaction); returnval(promise); }''', - sample_item, sample_files_by_hash) + sample_item, {'sha256': sample_files_by_sha256}) database_contents = get_db_contents(execute_in_page) assert len(database_contents['files']) == 4 - assert all([sample_files_by_hash[file['hash_key']] == file['contents'] + assert all([sample_files_by_sha256[file['sha256']] == file['contents'] for file in database_contents['files']]) assert all([len(file) == 2 for file in database_contents['files']]) assert len(database_contents['file_uses']) == 4 assert all([uses['uses'] == 1 for uses in database_contents['file_uses']]) - assert set([uses['hash_key'] for uses in database_contents['file_uses']]) \ - == set([file['hash_key'] for file in database_contents['files']]) + assert set([uses['sha256'] for uses in database_contents['file_uses']]) \ + == set([file['sha256'] for file in database_contents['files']]) assert database_contents['mapping'] == [] assert database_contents['resource'] == [sample_item] @@ -93,8 +93,8 @@ def test_haketilodb_item_modifications(driver, execute_in_page): # See if trying to add an item without providing all its files ends in an # exception and aborts the transaction as it should. sample_item['scripts'].append(sample_file_ref('combined.js')) - incomplete_files = {**sample_files_by_hash} - incomplete_files.pop(sample_files['combined.js']['hash_key']) + incomplete_files = {**sample_files_by_sha256} + incomplete_files.pop(sample_files['combined.js']['sha256']) exception = execute_in_page( '''{ const args = arguments; @@ -112,14 +112,14 @@ def test_haketilodb_item_modifications(driver, execute_in_page): } returnval(try_add_item()); }''', - sample_item, incomplete_files) + sample_item, {'sha256': incomplete_files}) previous_database_contents = database_contents database_contents = get_db_contents(execute_in_page) assert 'file not present' in exception for key, val in database_contents.items(): - keyfun = lambda item: item.get('hash_key') or item['identifier'] + keyfun = lambda item: item.get('sha256') or item['identifier'] assert sorted(previous_database_contents[key], key=keyfun) \ == sorted(val, key=keyfun) @@ -132,7 +132,7 @@ def test_haketilodb_item_modifications(driver, execute_in_page): .then(finalize_transaction); returnval(promise); }''', - sample_item, sample_files_by_hash) + sample_item, {'sha256': sample_files_by_sha256}) database_contents = get_db_contents(execute_in_page) @@ -141,14 +141,14 @@ def test_haketilodb_item_modifications(driver, execute_in_page): sample_files_list = [sample_files[name] for name in names] uses_list = [1, 2, 1, 1, 1] - uses = dict([(uses['hash_key'], uses['uses']) + uses = dict([(uses['sha256'], uses['uses']) for uses in database_contents['file_uses']]) - assert uses == dict([(file['hash_key'], nr) + assert uses == dict([(file['sha256'], nr) for file, nr in zip(sample_files_list, uses_list)]) - files = dict([(file['hash_key'], file['contents']) + files = dict([(file['sha256'], file['contents']) for file in database_contents['files']]) - assert files == dict([(file['hash_key'], file['contents']) + assert files == dict([(file['sha256'], file['contents']) for file in sample_files_list]) del database_contents['resource'][0]['source_copyright'][0]['extra_prop'] @@ -174,13 +174,13 @@ def test_haketilodb_item_modifications(driver, execute_in_page): sample_files_list = [sample_files[name] for name in names] uses_list = [1, 1] - uses = dict([(uses['hash_key'], uses['uses']) + uses = dict([(uses['sha256'], uses['uses']) for uses in results[0]['file_uses']]) - assert uses == dict([(file['hash_key'], 1) for file in sample_files_list]) + assert uses == dict([(file['sha256'], 1) for file in sample_files_list]) - files = dict([(file['hash_key'], file['contents']) + files = dict([(file['sha256'], file['contents']) for file in results[0]['files']]) - assert files == dict([(file['hash_key'], file['contents']) + assert files == dict([(file['sha256'], file['contents']) for file in sample_files_list]) assert results[0]['resource'] == [] @@ -206,7 +206,9 @@ def test_haketilodb_item_modifications(driver, execute_in_page): '0.1.1': sample_mapping } }, - 'files': sample_files_by_hash + 'file': { + 'sha256': sample_files_by_sha256 + } } clear_indexeddb(execute_in_page) @@ -350,7 +352,9 @@ def test_haketilodb_track(driver, execute_in_page, wait_elem_text): '0.1.1': sample_mapping } }, - 'files': sample_files_by_hash + 'file': { + 'sha256': sample_files_by_sha256 + } } driver.switch_to.window(windows[1]) execute_in_page('initial_data = arguments[0];', initial_data) @@ -423,7 +427,9 @@ def test_haketilodb_track(driver, execute_in_page, wait_elem_text): '0.1.1': sample_mapping2 } }, - 'files': sample_files_by_hash + 'file': { + 'sha256': sample_files_by_sha256 + } } execute_in_page('returnval(save_items(arguments[0]));', sample_data) execute_in_page('returnval(set_setting("option22", "abc"));') diff --git a/test/unit/test_indexeddb_files_server.py b/test/unit/test_indexeddb_files_server.py index ab69d9d..390bbe7 100644 --- a/test/unit/test_indexeddb_files_server.py +++ b/test/unit/test_indexeddb_files_server.py @@ -35,7 +35,7 @@ sample_files_list = [(f'file_{n}_{i}', f'contents {n} {i}') sample_files = dict(sample_files_list) -sample_files, sample_files_by_hash = make_sample_files(sample_files) +sample_files, sample_files_by_sha256 = make_sample_files(sample_files) def make_sample_resource_with_deps(n): resource = make_sample_resource(with_files=False) @@ -53,7 +53,9 @@ resources = [make_sample_resource_with_deps(n) for n in range(count)] sample_data = { 'resources': sample_data_dict(resources), 'mapping': {}, - 'files': sample_files_by_hash + 'file': { + 'sha256': sample_files_by_sha256 + } } def prepare_test_page(initial_indexeddb_data, execute_in_page): diff --git a/test/unit/test_item_list.py b/test/unit/test_item_list.py index 0702129..46691c3 100644 --- a/test/unit/test_item_list.py +++ b/test/unit/test_item_list.py @@ -106,7 +106,9 @@ def test_item_list_ordering(driver, execute_in_page, item_type): sample_data = { 'resources': {}, 'mappings': {}, - 'files': sample_files_by_hash + 'file': { + 'sha256': sample_files_by_sha256 + } } indexes_added = set() @@ -189,7 +191,9 @@ def test_item_list_displaying(driver, execute_in_page, item_type): sample_data = { 'resources': {}, 'mappings': {}, - 'files': sample_files_by_hash + 'file': { + 'sha256': sample_files_by_sha256 + } } sample_data[item_type + 's'] = sample_data_dict(items) diff --git a/test/unit/test_item_preview.py b/test/unit/test_item_preview.py index 8b2b161..8787d5d 100644 --- a/test/unit/test_item_preview.py +++ b/test/unit/test_item_preview.py @@ -160,7 +160,7 @@ def test_file_preview_link(driver, execute_in_page): # Cause the "link" to `bye.js` to be invalid. sample_resource = make_sample_resource() - sample_resource['scripts'][1]['hash_key'] = 'dummy nonexistent key' + sample_resource['scripts'][1]['sha256'] = 'dummy nonexistent hash' execute_in_page( ''' diff --git a/test/unit/test_payload_create.py b/test/unit/test_payload_create.py index cee3a9b..9689c37 100644 --- a/test/unit/test_payload_create.py +++ b/test/unit/test_payload_create.py @@ -19,6 +19,8 @@ Haketilo unit tests - using a form to create simple site payload import pytest import re +from hashlib import sha256 + from selenium.webdriver.support.ui import WebDriverWait from ..extension_crafting import ExtraHTML @@ -137,7 +139,7 @@ def test_payload_create_normal_usage(driver, execute_in_page): 'long_name': long_name, 'scripts': [{ 'file': 'payload.js', - 'hash_key': make_hash_key(form_data['script']) + 'sha256': sha256(form_data['script'].encode()).digest().hex() }] }] diff --git a/test/unit/utils.py b/test/unit/utils.py index 56880d5..85dee63 100644 --- a/test/unit/utils.py +++ b/test/unit/utils.py @@ -33,12 +33,9 @@ from ..script_loader import load_script patterns_doc_url = \ 'https://hydrillabugs.koszko.org/projects/haketilo/wiki/URL_patterns' -def make_hash_key(file_contents): - return f'sha256-{sha256(file_contents.encode()).digest().hex()}' - def sample_file(contents): return { - 'hash_key': make_hash_key(contents), + 'sha256': sha256(contents.encode()).digest().hex(), 'contents': contents } @@ -51,12 +48,12 @@ def make_sample_files(names_contents): sample_files = dict([(name, sample_file(contents)) for name, contents in names_contents.items()]) - sample_files_by_hash = dict([[file['hash_key'], file['contents']] - for file in sample_files.values()]) + sample_files_by_sha256 = dict([[file['sha256'], file['contents']] + for file in sample_files.values()]) - return sample_files, sample_files_by_hash + return sample_files, sample_files_by_sha256 -sample_files, sample_files_by_hash = make_sample_files({ +sample_files, sample_files_by_sha256 = make_sample_files({ 'report.spdx': '', 'LICENSES/somelicense.txt': 'Permission is granted...', 'LICENSES/CC0-1.0.txt': 'Dummy Commons...', @@ -73,7 +70,7 @@ def sample_file_ref(file_name, sample_files_dict=sample_files): """ return { 'file': file_name, - 'hash_key': sample_files_dict[file_name]['hash_key'] + 'sha256': sample_files_dict[file_name]['sha256'] } def make_sample_mapping(with_files=True): @@ -154,7 +151,9 @@ def make_complete_sample_data(): return { 'resources': sample_data_dict([make_sample_resource()]), 'mappings': sample_data_dict([make_sample_mapping()]), - 'files': sample_files_by_hash + 'file': { + 'sha256': sample_files_by_sha256 + } } def clear_indexeddb(execute_in_page): diff --git a/test/world_wide_library.py b/test/world_wide_library.py index b3febd7..04f5e8b 100644 --- a/test/world_wide_library.py +++ b/test/world_wide_library.py @@ -114,7 +114,7 @@ sample_contents = [f'Mi povas manĝi vitron, ĝi ne damaĝas min {i}' for i in range(9)] sample_hashes = [sha256(c.encode()).digest().hex() for c in sample_contents] -file_url = lambda hashed: f'https://hydril.la/file/sha256-{hashed}' +file_url = lambda hashed: f'https://hydril.la/file/sha256/{hashed}' sample_files_catalog = dict([(file_url(h), make_handler(c)) for h, c in zip(sample_hashes, sample_contents)]) -- cgit v1.2.3