| ... | ... | @@ -2,7 +2,7 @@ import os | 
| 2 | 2 |  import shutil
 | 
| 3 | 3 |  import pytest
 | 
| 4 | 4 |  
 | 
| 5 |  | -from tests.testutils import cli_integration as cli, create_artifact_share
 | 
|  | 5 | +from tests.testutils import cli, cli_integration as cli2, create_artifact_share
 | 
| 6 | 6 |  from tests.testutils.integration import assert_contains
 | 
| 7 | 7 |  from tests.testutils.site import HAVE_BWRAP, IS_LINUX
 | 
| 8 | 8 |  from buildstream._exceptions import ErrorDomain, LoadErrorReason
 | 
| ... | ... | @@ -32,7 +32,7 @@ def default_state(cli, tmpdir, share): | 
| 32 | 32 |  @pytest.mark.integration
 | 
| 33 | 33 |  @pytest.mark.datafiles(DATA_DIR)
 | 
| 34 | 34 |  @pytest.mark.skipif(IS_LINUX and not HAVE_BWRAP, reason='Only available with bubblewrap on Linux')
 | 
| 35 |  | -def test_pullbuildtrees(cli, tmpdir, datafiles):
 | 
|  | 35 | +def test_pullbuildtrees(cli2, tmpdir, datafiles):
 | 
| 36 | 36 |      project = os.path.join(datafiles.dirname, datafiles.basename)
 | 
| 37 | 37 |      element_name = 'autotools/amhello.bst'
 | 
| 38 | 38 |  
 | 
| ... | ... | @@ -40,115 +40,115 @@ def test_pullbuildtrees(cli, tmpdir, datafiles): | 
| 40 | 40 |      with create_artifact_share(os.path.join(str(tmpdir), 'share1')) as share1,\
 | 
| 41 | 41 |          create_artifact_share(os.path.join(str(tmpdir), 'share2')) as share2,\
 | 
| 42 | 42 |          create_artifact_share(os.path.join(str(tmpdir), 'share3')) as share3:
 | 
| 43 |  | -        cli.configure({
 | 
|  | 43 | +        cli2.configure({
 | 
| 44 | 44 |              'artifacts': {'url': share1.repo, 'push': True},
 | 
| 45 | 45 |              'artifactdir': os.path.join(str(tmpdir), 'artifacts')
 | 
| 46 | 46 |          })
 | 
| 47 | 47 |  
 | 
| 48 | 48 |          # Build autotools element, checked pushed, delete local
 | 
| 49 |  | -        result = cli.run(project=project, args=['build', element_name])
 | 
|  | 49 | +        result = cli2.run(project=project, args=['build', element_name])
 | 
| 50 | 50 |          assert result.exit_code == 0
 | 
| 51 |  | -        assert cli.get_element_state(project, element_name) == 'cached'
 | 
| 52 |  | -        assert share1.has_artifact('test', element_name, cli.get_element_key(project, element_name))
 | 
| 53 |  | -        default_state(cli, tmpdir, share1)
 | 
|  | 51 | +        assert cli2.get_element_state(project, element_name) == 'cached'
 | 
|  | 52 | +        assert share1.has_artifact('test', element_name, cli2.get_element_key(project, element_name))
 | 
|  | 53 | +        default_state(cli2, tmpdir, share1)
 | 
| 54 | 54 |  
 | 
| 55 | 55 |          # Pull artifact with default config, assert that pulling again
 | 
| 56 | 56 |          # doesn't create a pull job, then assert with buildtrees user
 | 
| 57 | 57 |          # config set creates a pull job.
 | 
| 58 |  | -        result = cli.run(project=project, args=['artifact', 'pull', element_name])
 | 
|  | 58 | +        result = cli2.run(project=project, args=['artifact', 'pull', element_name])
 | 
| 59 | 59 |          assert element_name in result.get_pulled_elements()
 | 
| 60 |  | -        result = cli.run(project=project, args=['artifact', 'pull', element_name])
 | 
|  | 60 | +        result = cli2.run(project=project, args=['artifact', 'pull', element_name])
 | 
| 61 | 61 |          assert element_name not in result.get_pulled_elements()
 | 
| 62 |  | -        cli.configure({'cache': {'pull-buildtrees': True}})
 | 
| 63 |  | -        result = cli.run(project=project, args=['artifact', 'pull', element_name])
 | 
|  | 62 | +        cli2.configure({'cache': {'pull-buildtrees': True}})
 | 
|  | 63 | +        result = cli2.run(project=project, args=['artifact', 'pull', element_name])
 | 
| 64 | 64 |          assert element_name in result.get_pulled_elements()
 | 
| 65 |  | -        default_state(cli, tmpdir, share1)
 | 
|  | 65 | +        default_state(cli2, tmpdir, share1)
 | 
| 66 | 66 |  
 | 
| 67 | 67 |          # Pull artifact with default config, then assert that pulling
 | 
| 68 | 68 |          # with buildtrees cli flag set creates a pull job.
 | 
| 69 | 69 |          # Also assert that the buildtree is added to the artifact's
 | 
| 70 | 70 |          # extract dir
 | 
| 71 |  | -        result = cli.run(project=project, args=['artifact', 'pull', element_name])
 | 
|  | 71 | +        result = cli2.run(project=project, args=['artifact', 'pull', element_name])
 | 
| 72 | 72 |          assert element_name in result.get_pulled_elements()
 | 
| 73 |  | -        elementdigest = share1.has_artifact('test', element_name, cli.get_element_key(project, element_name))
 | 
|  | 73 | +        elementdigest = share1.has_artifact('test', element_name, cli2.get_element_key(project, element_name))
 | 
| 74 | 74 |          buildtreedir = os.path.join(str(tmpdir), 'artifacts', 'extract', 'test', 'autotools-amhello',
 | 
| 75 | 75 |                                      elementdigest.hash, 'buildtree')
 | 
| 76 | 76 |          assert not os.path.isdir(buildtreedir)
 | 
| 77 |  | -        result = cli.run(project=project, args=['--pull-buildtrees', 'artifact', 'pull', element_name])
 | 
|  | 77 | +        result = cli2.run(project=project, args=['--pull-buildtrees', 'artifact', 'pull', element_name])
 | 
| 78 | 78 |          assert element_name in result.get_pulled_elements()
 | 
| 79 | 79 |          assert os.path.isdir(buildtreedir)
 | 
| 80 |  | -        default_state(cli, tmpdir, share1)
 | 
|  | 80 | +        default_state(cli2, tmpdir, share1)
 | 
| 81 | 81 |  
 | 
| 82 | 82 |          # Pull artifact with pullbuildtrees set in user config, then assert
 | 
| 83 | 83 |          # that pulling with the same user config doesn't creates a pull job,
 | 
| 84 | 84 |          # or when buildtrees cli flag is set.
 | 
| 85 |  | -        cli.configure({'cache': {'pull-buildtrees': True}})
 | 
| 86 |  | -        result = cli.run(project=project, args=['artifact', 'pull', element_name])
 | 
|  | 85 | +        cli2.configure({'cache': {'pull-buildtrees': True}})
 | 
|  | 86 | +        result = cli2.run(project=project, args=['artifact', 'pull', element_name])
 | 
| 87 | 87 |          assert element_name in result.get_pulled_elements()
 | 
| 88 |  | -        result = cli.run(project=project, args=['artifact', 'pull', element_name])
 | 
|  | 88 | +        result = cli2.run(project=project, args=['artifact', 'pull', element_name])
 | 
| 89 | 89 |          assert element_name not in result.get_pulled_elements()
 | 
| 90 |  | -        result = cli.run(project=project, args=['--pull-buildtrees', 'artifact', 'pull', element_name])
 | 
|  | 90 | +        result = cli2.run(project=project, args=['--pull-buildtrees', 'artifact', 'pull', element_name])
 | 
| 91 | 91 |          assert element_name not in result.get_pulled_elements()
 | 
| 92 |  | -        default_state(cli, tmpdir, share1)
 | 
|  | 92 | +        default_state(cli2, tmpdir, share1)
 | 
| 93 | 93 |  
 | 
| 94 | 94 |          # Pull artifact with default config and buildtrees cli flag set, then assert
 | 
| 95 | 95 |          # that pulling with pullbuildtrees set in user config doesn't create a pull
 | 
| 96 | 96 |          # job.
 | 
| 97 |  | -        result = cli.run(project=project, args=['--pull-buildtrees', 'artifact', 'pull', element_name])
 | 
|  | 97 | +        result = cli2.run(project=project, args=['--pull-buildtrees', 'artifact', 'pull', element_name])
 | 
| 98 | 98 |          assert element_name in result.get_pulled_elements()
 | 
| 99 |  | -        cli.configure({'cache': {'pull-buildtrees': True}})
 | 
| 100 |  | -        result = cli.run(project=project, args=['artifact', 'pull', element_name])
 | 
|  | 99 | +        cli2.configure({'cache': {'pull-buildtrees': True}})
 | 
|  | 100 | +        result = cli2.run(project=project, args=['artifact', 'pull', element_name])
 | 
| 101 | 101 |          assert element_name not in result.get_pulled_elements()
 | 
| 102 |  | -        default_state(cli, tmpdir, share1)
 | 
|  | 102 | +        default_state(cli2, tmpdir, share1)
 | 
| 103 | 103 |  
 | 
| 104 | 104 |          # Assert that a partial build element (not containing a populated buildtree dir)
 | 
| 105 | 105 |          # can't be pushed to an artifact share, then assert that a complete build element
 | 
| 106 | 106 |          # can be. This will attempt a partial pull from share1 and then a partial push
 | 
| 107 | 107 |          # to share2
 | 
| 108 |  | -        result = cli.run(project=project, args=['artifact', 'pull', element_name])
 | 
|  | 108 | +        result = cli2.run(project=project, args=['artifact', 'pull', element_name])
 | 
| 109 | 109 |          assert element_name in result.get_pulled_elements()
 | 
| 110 |  | -        cli.configure({'artifacts': {'url': share2.repo, 'push': True}})
 | 
| 111 |  | -        result = cli.run(project=project, args=['artifact', 'push', element_name])
 | 
|  | 110 | +        cli2.configure({'artifacts': {'url': share2.repo, 'push': True}})
 | 
|  | 111 | +        result = cli2.run(project=project, args=['artifact', 'push', element_name])
 | 
| 112 | 112 |          assert element_name not in result.get_pushed_elements()
 | 
| 113 |  | -        assert not share2.has_artifact('test', element_name, cli.get_element_key(project, element_name))
 | 
|  | 113 | +        assert not share2.has_artifact('test', element_name, cli2.get_element_key(project, element_name))
 | 
| 114 | 114 |  
 | 
| 115 | 115 |          # Assert that after pulling the missing buildtree the element artifact can be
 | 
| 116 | 116 |          # successfully pushed to the remote. This will attempt to pull the buildtree
 | 
| 117 | 117 |          # from share1 and then a 'complete' push to share2
 | 
| 118 |  | -        cli.configure({'artifacts': {'url': share1.repo, 'push': False}})
 | 
| 119 |  | -        result = cli.run(project=project, args=['--pull-buildtrees', 'artifact', 'pull', element_name])
 | 
|  | 118 | +        cli2.configure({'artifacts': {'url': share1.repo, 'push': False}})
 | 
|  | 119 | +        result = cli2.run(project=project, args=['--pull-buildtrees', 'artifact', 'pull', element_name])
 | 
| 120 | 120 |          assert element_name in result.get_pulled_elements()
 | 
| 121 |  | -        cli.configure({'artifacts': {'url': share2.repo, 'push': True}})
 | 
| 122 |  | -        result = cli.run(project=project, args=['artifact', 'push', element_name])
 | 
|  | 121 | +        cli2.configure({'artifacts': {'url': share2.repo, 'push': True}})
 | 
|  | 122 | +        result = cli2.run(project=project, args=['artifact', 'push', element_name])
 | 
| 123 | 123 |          assert element_name in result.get_pushed_elements()
 | 
| 124 |  | -        assert share2.has_artifact('test', element_name, cli.get_element_key(project, element_name))
 | 
| 125 |  | -        default_state(cli, tmpdir, share1)
 | 
|  | 124 | +        assert share2.has_artifact('test', element_name, cli2.get_element_key(project, element_name))
 | 
|  | 125 | +        default_state(cli2, tmpdir, share1)
 | 
| 126 | 126 |  
 | 
| 127 | 127 |          # Assert that bst push will automatically attempt to pull a missing buildtree
 | 
| 128 | 128 |          # if pull-buildtrees is set, however as share3 is the only defined remote and is empty,
 | 
| 129 | 129 |          # assert that no element artifact buildtrees are pulled (no available remote buildtree) and thus the
 | 
| 130 | 130 |          # artifact cannot be pushed.
 | 
| 131 |  | -        result = cli.run(project=project, args=['artifact', 'pull', element_name])
 | 
|  | 131 | +        result = cli2.run(project=project, args=['artifact', 'pull', element_name])
 | 
| 132 | 132 |          assert element_name in result.get_pulled_elements()
 | 
| 133 |  | -        cli.configure({'artifacts': {'url': share3.repo, 'push': True}})
 | 
| 134 |  | -        result = cli.run(project=project, args=['--pull-buildtrees', 'artifact', 'push', element_name])
 | 
|  | 133 | +        cli2.configure({'artifacts': {'url': share3.repo, 'push': True}})
 | 
|  | 134 | +        result = cli2.run(project=project, args=['--pull-buildtrees', 'artifact', 'push', element_name])
 | 
| 135 | 135 |          assert "Attempting to fetch missing artifact buildtrees" in result.stderr
 | 
| 136 | 136 |          assert element_name not in result.get_pulled_elements()
 | 
| 137 | 137 |          assert not os.path.isdir(buildtreedir)
 | 
| 138 | 138 |          assert element_name not in result.get_pushed_elements()
 | 
| 139 |  | -        assert not share3.has_artifact('test', element_name, cli.get_element_key(project, element_name))
 | 
|  | 139 | +        assert not share3.has_artifact('test', element_name, cli2.get_element_key(project, element_name))
 | 
| 140 | 140 |  
 | 
| 141 | 141 |          # Assert that if we add an extra remote that has the buildtree artfact cached, bst push will
 | 
| 142 | 142 |          # automatically attempt to pull it and will be successful, leading to the full artifact being pushed
 | 
| 143 | 143 |          # to the empty share3. This gives the ability to attempt push currently partial artifacts to a remote,
 | 
| 144 | 144 |          # without exlipictly requiring a bst pull.
 | 
| 145 |  | -        cli.configure({'artifacts': [{'url': share1.repo, 'push': False}, {'url': share3.repo, 'push': True}]})
 | 
| 146 |  | -        result = cli.run(project=project, args=['--pull-buildtrees', 'artifact', 'push', element_name])
 | 
|  | 145 | +        cli2.configure({'artifacts': [{'url': share1.repo, 'push': False}, {'url': share3.repo, 'push': True}]})
 | 
|  | 146 | +        result = cli2.run(project=project, args=['--pull-buildtrees', 'artifact', 'push', element_name])
 | 
| 147 | 147 |          assert "Attempting to fetch missing artifact buildtrees" in result.stderr
 | 
| 148 | 148 |          assert element_name in result.get_pulled_elements()
 | 
| 149 | 149 |          assert os.path.isdir(buildtreedir)
 | 
| 150 | 150 |          assert element_name in result.get_pushed_elements()
 | 
| 151 |  | -        assert share3.has_artifact('test', element_name, cli.get_element_key(project, element_name))
 | 
|  | 151 | +        assert share3.has_artifact('test', element_name, cli2.get_element_key(project, element_name))
 | 
| 152 | 152 |  
 | 
| 153 | 153 |  
 | 
| 154 | 154 |  # Ensure that only valid pull-buildtrees boolean options make it through the loading
 |