This is an automated email from the ASF dual-hosted git repository. github-bot pushed a commit to branch jonathan/mirror-client in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit 77424cdb28130ea3405cf6cedcfd1b411b7eac50 Author: Jonathan Maw <[email protected]> AuthorDate: Wed May 16 14:12:30 2018 +0100 tests: Add default-mirror tests --- tests/frontend/mirror.py | 206 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 164 insertions(+), 42 deletions(-) diff --git a/tests/frontend/mirror.py b/tests/frontend/mirror.py index 9fdbd38..592e499 100644 --- a/tests/frontend/mirror.py +++ b/tests/frontend/mirror.py @@ -11,6 +11,74 @@ TOP_DIR = os.path.dirname(os.path.realpath(__file__)) DATA_DIR = os.path.join(TOP_DIR, 'project') +def generate_element(output_file): + element = { + 'kind': 'import', + 'sources': [ + { + 'kind': 'fetch_source', + "output-text": output_file, + "urls": ["foo:repo1", "bar:repo2"], + "fetch-succeeds": { + "FOO/repo1": True, + "BAR/repo2": False, + "OOF/repo1": False, + "RAB/repo2": True, + "OFO/repo1": False, + "RBA/repo2": False, + "ooF/repo1": False, + "raB/repo2": False, + } + } + ] + } + return element + + +def generate_project(): + project = { + 'name': 'test', + 'element-path': 'elements', + 'aliases': { + 'foo': 'FOO/', + 'bar': 'BAR/', + }, + 'mirrors': [ + { + 'location-name': 'middle-earth', + 'aliases': { + 'foo': ['OOF/'], + 'bar': ['RAB/'], + }, + }, + { + 'location-name': 'arrakis', + 'aliases': { + 'foo': ['OFO/'], + 'bar': ['RBA/'], + }, + }, + { + 'location-name': 'oz', + 'aliases': { + 'foo': ['ooF/'], + 'bar': ['raB/'], + } + }, + ], + 'plugins': [ + { + 'origin': 'local', + 'path': 'sources', + 'sources': { + 'fetch_source': 0 + } + } + ] + } + return project + + @pytest.mark.datafiles(DATA_DIR) @pytest.mark.parametrize("kind", [(kind) for kind in ALL_REPO_KINDS]) def test_mirror_fetch(cli, tmpdir, datafiles, kind): @@ -78,51 +146,11 @@ def test_mirror_fetch_multi(cli, tmpdir, datafiles): os.makedirs(element_dir, exist_ok=True) element_name = "test.bst" element_path = os.path.join(element_dir, element_name) - element = { - 'kind': 'import', - 'sources': [ - { - 'kind': 'fetch_source', - "output-text": output_file, - "urls": ["foo:repo1", "bar:repo2"], - "fetch-succeeds": { - "FOO/repo1": True, - "BAR/repo2": False, - "OOF/repo1": False, - "RAB/repo2": True - } - } - ] - } + element = generate_element(output_file) _yaml.dump(element, element_path) project_file = os.path.join(project_dir, 'project.conf') - project = { - 'name': 'test', - 'element-path': 'elements', - 'aliases': { - "foo": "FOO/", - "bar": "BAR/" - }, - 'mirrors': [ - { - 'location-name': 'middle-earth', - 'aliases': { - "foo": ["OOF/"], - "bar": ["RAB/"] - }, - }, - ], - 'plugins': [ - { - 'origin': 'local', - 'path': 'sources', - 'sources': { - 'fetch_source': 0 - } - } - ] - } + project = generate_project() _yaml.dump(project, project_file) result = cli.run(project=project_dir, args=['fetch', element_name]) @@ -131,3 +159,97 @@ def test_mirror_fetch_multi(cli, tmpdir, datafiles): contents = f.read() assert "Fetch foo:repo1 succeeded from FOO/repo1" in contents assert "Fetch bar:repo2 succeeded from RAB/repo2" in contents + + [email protected](DATA_DIR) +def test_mirror_fetch_default_cmdline(cli, tmpdir, datafiles): + output_file = os.path.join(str(tmpdir), "output.txt") + project_dir = str(tmpdir) + element_dir = os.path.join(project_dir, 'elements') + os.makedirs(element_dir, exist_ok=True) + element_name = "test.bst" + element_path = os.path.join(element_dir, element_name) + element = generate_element(output_file) + _yaml.dump(element, element_path) + + project_file = os.path.join(project_dir, 'project.conf') + project = generate_project() + _yaml.dump(project, project_file) + + result = cli.run(project=project_dir, args=['--default-mirror', 'arrakis', 'fetch', element_name]) + result.assert_success() + with open(output_file) as f: + contents = f.read() + print(contents) + # Success if fetching from arrakis' mirror happened before middle-earth's + arrakis_str = "OFO/repo1" + arrakis_pos = contents.find(arrakis_str) + assert arrakis_pos != -1, "'{}' wasn't found".format(arrakis_str) + me_str = "OOF/repo1" + me_pos = contents.find(me_str) + assert me_pos != -1, "'{}' wasn't found".format(me_str) + assert arrakis_pos < me_pos, "'{}' wasn't found before '{}'".format(arrakis_str, me_str) + + [email protected](DATA_DIR) +def test_mirror_fetch_default_userconfig(cli, tmpdir, datafiles): + output_file = os.path.join(str(tmpdir), "output.txt") + project_dir = str(tmpdir) + element_dir = os.path.join(project_dir, 'elements') + os.makedirs(element_dir, exist_ok=True) + element_name = "test.bst" + element_path = os.path.join(element_dir, element_name) + element = generate_element(output_file) + _yaml.dump(element, element_path) + + project_file = os.path.join(project_dir, 'project.conf') + project = generate_project() + _yaml.dump(project, project_file) + + cli.configure({'default-mirror': 'oz'}) + + result = cli.run(project=project_dir, args=['fetch', element_name]) + result.assert_success() + with open(output_file) as f: + contents = f.read() + print(contents) + # Success if fetching from Oz' mirror happened before middle-earth's + oz_str = "ooF/repo1" + oz_pos = contents.find(oz_str) + assert oz_pos != -1, "'{}' wasn't found".format(oz_str) + me_str = "OOF/repo1" + me_pos = contents.find(me_str) + assert me_pos != -1, "'{}' wasn't found".format(me_str) + assert oz_pos < me_pos, "'{}' wasn't found before '{}'".format(oz_str, me_str) + + [email protected](DATA_DIR) +def test_mirror_fetch_default_cmdline_overrides_config(cli, tmpdir, datafiles): + output_file = os.path.join(str(tmpdir), "output.txt") + project_dir = str(tmpdir) + element_dir = os.path.join(project_dir, 'elements') + os.makedirs(element_dir, exist_ok=True) + element_name = "test.bst" + element_path = os.path.join(element_dir, element_name) + element = generate_element(output_file) + _yaml.dump(element, element_path) + + project_file = os.path.join(project_dir, 'project.conf') + project = generate_project() + _yaml.dump(project, project_file) + + cli.configure({'default-mirror': 'oz'}) + + result = cli.run(project=project_dir, args=['--default-mirror', 'arrakis', 'fetch', element_name]) + result.assert_success() + with open(output_file) as f: + contents = f.read() + print(contents) + # Success if fetching from arrakis' mirror happened before middle-earth's + arrakis_str = "OFO/repo1" + arrakis_pos = contents.find(arrakis_str) + assert arrakis_pos != -1, "'{}' wasn't found".format(arrakis_str) + me_str = "OOF/repo1" + me_pos = contents.find(me_str) + assert me_pos != -1, "'{}' wasn't found".format(me_str) + assert arrakis_pos < me_pos, "'{}' wasn't found before '{}'".format(arrakis_str, me_str)
