diff options
author | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2017-09-04 18:03:45 -0400 |
---|---|---|
committer | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2017-09-05 01:59:34 -0400 |
commit | f1e78b8669ddf0a1fe8749176b9e99992ca21ce0 (patch) | |
tree | bb1bcdd44b5eb41b28809180b3a3f028459eb325 /tests/frontend | |
parent | 9db04b3e29ee3e45712f0f7c2917c9032367f850 (diff) | |
download | buildstream-f1e78b8669ddf0a1fe8749176b9e99992ca21ce0.tar.gz |
tests/frontend/push.py: Adding test for `bst push`
Diffstat (limited to 'tests/frontend')
-rw-r--r-- | tests/frontend/push.py | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/tests/frontend/push.py b/tests/frontend/push.py new file mode 100644 index 000000000..c7de02f54 --- /dev/null +++ b/tests/frontend/push.py @@ -0,0 +1,98 @@ +import os +import pytest +from tests.testutils import cli, create_artifact_share + +from buildstream import _yaml + +# Project directory +DATA_DIR = os.path.join( + os.path.dirname(os.path.realpath(__file__)), + "project", +) + + +# Assert that a given artifact is in the share +# +def assert_shared(cli, share, project, element_name): + # NOTE: 'test' here is the name of the project + # specified in the project.conf we are testing with. + # + cache_key = cli.get_element_key(project, element_name) + if not share.has_artifact('test', element_name, cache_key): + raise AssertionError("Artifact share at {} does not contain the expected element {}" + .format(share.repo, element_name)) + + +@pytest.mark.datafiles(DATA_DIR) +def test_push(cli, tmpdir, datafiles): + project = os.path.join(datafiles.dirname, datafiles.basename) + share = create_artifact_share(os.path.join(str(tmpdir), 'artifactshare')) + + # First build it without the artifact cache configured + result = cli.run(project=project, args=['build', 'target.bst']) + assert result.exit_code == 0 + + # Assert that we are now cached locally + state = cli.get_element_state(project, 'target.bst') + assert state == 'cached' + + # Configure artifact share + cli.configure({ + 'artifacts': { + 'pull-url': share.repo, + 'push-url': share.repo, + } + }) + + # Now try bst push + result = cli.run(project=project, args=['push', 'target.bst']) + assert result.exit_code == 0 + + # And finally assert that the artifact is in the share + assert_shared(cli, share, project, 'target.bst') + + +@pytest.mark.datafiles(DATA_DIR) +def test_push_all(cli, tmpdir, datafiles): + project = os.path.join(datafiles.dirname, datafiles.basename) + share = create_artifact_share(os.path.join(str(tmpdir), 'artifactshare')) + + # First build it without the artifact cache configured + result = cli.run(project=project, args=['build', 'target.bst']) + assert result.exit_code == 0 + + # Assert that we are now cached locally + state = cli.get_element_state(project, 'target.bst') + assert state == 'cached' + + # Configure artifact share + cli.configure({ + # + # FIXME: This test hangs "sometimes" if we allow + # concurrent push. + # + # It's not too bad to ignore since we're + # using the local artifact cache functionality + # only, but it should probably be fixed. + # + 'scheduler': { + 'pushers': 1 + }, + 'artifacts': { + 'pull-url': share.repo, + 'push-url': share.repo, + } + }) + + # Now try bst push all the deps + result = cli.run(project=project, args=[ + 'push', 'target.bst', + '--deps', 'all' + ]) + assert result.exit_code == 0 + + # And finally assert that all the artifacts are in the share + assert_shared(cli, share, project, 'target.bst') + assert_shared(cli, share, project, 'import-bin.bst') + assert_shared(cli, share, project, 'import-dev.bst') + assert_shared(cli, share, project, 'compose-all.bst') |