From 3315b9a19ab3aec4c509ec711b49ff31209a3e7a Mon Sep 17 00:00:00 2001 From: Tristan Van Berkom Date: Tue, 22 Jan 2019 12:59:40 -0500 Subject: tests/integration/pullbuildtrees.py: Fix the non-integration case. This test has one test case which is marked as an integration test, and the other is not an integration test, but was using the integration cli. The integration cli does not work correctly if not run in integration mode. This was causing an error locally in conftest.py when trying to create a tmpdir inside a nonexisting integration cache directory. --- tests/integration/pullbuildtrees.py | 84 ++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/tests/integration/pullbuildtrees.py b/tests/integration/pullbuildtrees.py index e7ee90eee..3294c9094 100644 --- a/tests/integration/pullbuildtrees.py +++ b/tests/integration/pullbuildtrees.py @@ -2,7 +2,7 @@ import os import shutil import pytest -from tests.testutils import cli_integration as cli, create_artifact_share +from tests.testutils import cli, cli_integration as cli2, create_artifact_share from tests.testutils.integration import assert_contains from tests.testutils.site import HAVE_BWRAP, IS_LINUX from buildstream._exceptions import ErrorDomain, LoadErrorReason @@ -32,7 +32,7 @@ def default_state(cli, tmpdir, share): @pytest.mark.integration @pytest.mark.datafiles(DATA_DIR) @pytest.mark.skipif(IS_LINUX and not HAVE_BWRAP, reason='Only available with bubblewrap on Linux') -def test_pullbuildtrees(cli, tmpdir, datafiles): +def test_pullbuildtrees(cli2, tmpdir, datafiles): project = os.path.join(datafiles.dirname, datafiles.basename) element_name = 'autotools/amhello.bst' @@ -40,115 +40,115 @@ def test_pullbuildtrees(cli, tmpdir, datafiles): with create_artifact_share(os.path.join(str(tmpdir), 'share1')) as share1,\ create_artifact_share(os.path.join(str(tmpdir), 'share2')) as share2,\ create_artifact_share(os.path.join(str(tmpdir), 'share3')) as share3: - cli.configure({ + cli2.configure({ 'artifacts': {'url': share1.repo, 'push': True}, 'artifactdir': os.path.join(str(tmpdir), 'artifacts') }) # Build autotools element, checked pushed, delete local - result = cli.run(project=project, args=['build', element_name]) + result = cli2.run(project=project, args=['build', element_name]) assert result.exit_code == 0 - assert cli.get_element_state(project, element_name) == 'cached' - assert share1.has_artifact('test', element_name, cli.get_element_key(project, element_name)) - default_state(cli, tmpdir, share1) + assert cli2.get_element_state(project, element_name) == 'cached' + assert share1.has_artifact('test', element_name, cli2.get_element_key(project, element_name)) + default_state(cli2, tmpdir, share1) # Pull artifact with default config, assert that pulling again # doesn't create a pull job, then assert with buildtrees user # config set creates a pull job. - result = cli.run(project=project, args=['artifact', 'pull', element_name]) + result = cli2.run(project=project, args=['artifact', 'pull', element_name]) assert element_name in result.get_pulled_elements() - result = cli.run(project=project, args=['artifact', 'pull', element_name]) + result = cli2.run(project=project, args=['artifact', 'pull', element_name]) assert element_name not in result.get_pulled_elements() - cli.configure({'cache': {'pull-buildtrees': True}}) - result = cli.run(project=project, args=['artifact', 'pull', element_name]) + cli2.configure({'cache': {'pull-buildtrees': True}}) + result = cli2.run(project=project, args=['artifact', 'pull', element_name]) assert element_name in result.get_pulled_elements() - default_state(cli, tmpdir, share1) + default_state(cli2, tmpdir, share1) # Pull artifact with default config, then assert that pulling # with buildtrees cli flag set creates a pull job. # Also assert that the buildtree is added to the artifact's # extract dir - result = cli.run(project=project, args=['artifact', 'pull', element_name]) + result = cli2.run(project=project, args=['artifact', 'pull', element_name]) assert element_name in result.get_pulled_elements() - elementdigest = share1.has_artifact('test', element_name, cli.get_element_key(project, element_name)) + elementdigest = share1.has_artifact('test', element_name, cli2.get_element_key(project, element_name)) buildtreedir = os.path.join(str(tmpdir), 'artifacts', 'extract', 'test', 'autotools-amhello', elementdigest.hash, 'buildtree') assert not os.path.isdir(buildtreedir) - result = cli.run(project=project, args=['--pull-buildtrees', 'artifact', 'pull', element_name]) + result = cli2.run(project=project, args=['--pull-buildtrees', 'artifact', 'pull', element_name]) assert element_name in result.get_pulled_elements() assert os.path.isdir(buildtreedir) - default_state(cli, tmpdir, share1) + default_state(cli2, tmpdir, share1) # Pull artifact with pullbuildtrees set in user config, then assert # that pulling with the same user config doesn't creates a pull job, # or when buildtrees cli flag is set. - cli.configure({'cache': {'pull-buildtrees': True}}) - result = cli.run(project=project, args=['artifact', 'pull', element_name]) + cli2.configure({'cache': {'pull-buildtrees': True}}) + result = cli2.run(project=project, args=['artifact', 'pull', element_name]) assert element_name in result.get_pulled_elements() - result = cli.run(project=project, args=['artifact', 'pull', element_name]) + result = cli2.run(project=project, args=['artifact', 'pull', element_name]) assert element_name not in result.get_pulled_elements() - result = cli.run(project=project, args=['--pull-buildtrees', 'artifact', 'pull', element_name]) + result = cli2.run(project=project, args=['--pull-buildtrees', 'artifact', 'pull', element_name]) assert element_name not in result.get_pulled_elements() - default_state(cli, tmpdir, share1) + default_state(cli2, tmpdir, share1) # Pull artifact with default config and buildtrees cli flag set, then assert # that pulling with pullbuildtrees set in user config doesn't create a pull # job. - result = cli.run(project=project, args=['--pull-buildtrees', 'artifact', 'pull', element_name]) + result = cli2.run(project=project, args=['--pull-buildtrees', 'artifact', 'pull', element_name]) assert element_name in result.get_pulled_elements() - cli.configure({'cache': {'pull-buildtrees': True}}) - result = cli.run(project=project, args=['artifact', 'pull', element_name]) + cli2.configure({'cache': {'pull-buildtrees': True}}) + result = cli2.run(project=project, args=['artifact', 'pull', element_name]) assert element_name not in result.get_pulled_elements() - default_state(cli, tmpdir, share1) + default_state(cli2, tmpdir, share1) # Assert that a partial build element (not containing a populated buildtree dir) # can't be pushed to an artifact share, then assert that a complete build element # can be. This will attempt a partial pull from share1 and then a partial push # to share2 - result = cli.run(project=project, args=['artifact', 'pull', element_name]) + result = cli2.run(project=project, args=['artifact', 'pull', element_name]) assert element_name in result.get_pulled_elements() - cli.configure({'artifacts': {'url': share2.repo, 'push': True}}) - result = cli.run(project=project, args=['artifact', 'push', element_name]) + cli2.configure({'artifacts': {'url': share2.repo, 'push': True}}) + result = cli2.run(project=project, args=['artifact', 'push', element_name]) assert element_name not in result.get_pushed_elements() - assert not share2.has_artifact('test', element_name, cli.get_element_key(project, element_name)) + assert not share2.has_artifact('test', element_name, cli2.get_element_key(project, element_name)) # Assert that after pulling the missing buildtree the element artifact can be # successfully pushed to the remote. This will attempt to pull the buildtree # from share1 and then a 'complete' push to share2 - cli.configure({'artifacts': {'url': share1.repo, 'push': False}}) - result = cli.run(project=project, args=['--pull-buildtrees', 'artifact', 'pull', element_name]) + cli2.configure({'artifacts': {'url': share1.repo, 'push': False}}) + result = cli2.run(project=project, args=['--pull-buildtrees', 'artifact', 'pull', element_name]) assert element_name in result.get_pulled_elements() - cli.configure({'artifacts': {'url': share2.repo, 'push': True}}) - result = cli.run(project=project, args=['artifact', 'push', element_name]) + cli2.configure({'artifacts': {'url': share2.repo, 'push': True}}) + result = cli2.run(project=project, args=['artifact', 'push', element_name]) assert element_name in result.get_pushed_elements() - assert share2.has_artifact('test', element_name, cli.get_element_key(project, element_name)) - default_state(cli, tmpdir, share1) + assert share2.has_artifact('test', element_name, cli2.get_element_key(project, element_name)) + default_state(cli2, tmpdir, share1) # Assert that bst push will automatically attempt to pull a missing buildtree # if pull-buildtrees is set, however as share3 is the only defined remote and is empty, # assert that no element artifact buildtrees are pulled (no available remote buildtree) and thus the # artifact cannot be pushed. - result = cli.run(project=project, args=['artifact', 'pull', element_name]) + result = cli2.run(project=project, args=['artifact', 'pull', element_name]) assert element_name in result.get_pulled_elements() - cli.configure({'artifacts': {'url': share3.repo, 'push': True}}) - result = cli.run(project=project, args=['--pull-buildtrees', 'artifact', 'push', element_name]) + cli2.configure({'artifacts': {'url': share3.repo, 'push': True}}) + result = cli2.run(project=project, args=['--pull-buildtrees', 'artifact', 'push', element_name]) assert "Attempting to fetch missing artifact buildtrees" in result.stderr assert element_name not in result.get_pulled_elements() assert not os.path.isdir(buildtreedir) assert element_name not in result.get_pushed_elements() - assert not share3.has_artifact('test', element_name, cli.get_element_key(project, element_name)) + assert not share3.has_artifact('test', element_name, cli2.get_element_key(project, element_name)) # Assert that if we add an extra remote that has the buildtree artfact cached, bst push will # automatically attempt to pull it and will be successful, leading to the full artifact being pushed # to the empty share3. This gives the ability to attempt push currently partial artifacts to a remote, # without exlipictly requiring a bst pull. - cli.configure({'artifacts': [{'url': share1.repo, 'push': False}, {'url': share3.repo, 'push': True}]}) - result = cli.run(project=project, args=['--pull-buildtrees', 'artifact', 'push', element_name]) + cli2.configure({'artifacts': [{'url': share1.repo, 'push': False}, {'url': share3.repo, 'push': True}]}) + result = cli2.run(project=project, args=['--pull-buildtrees', 'artifact', 'push', element_name]) assert "Attempting to fetch missing artifact buildtrees" in result.stderr assert element_name in result.get_pulled_elements() assert os.path.isdir(buildtreedir) assert element_name in result.get_pushed_elements() - assert share3.has_artifact('test', element_name, cli.get_element_key(project, element_name)) + assert share3.has_artifact('test', element_name, cli2.get_element_key(project, element_name)) # Ensure that only valid pull-buildtrees boolean options make it through the loading -- cgit v1.2.1