Skip to content
Snippets Groups Projects
Commit d1dc2286 authored by Tristan Maat's avatar Tristan Maat
Browse files

Fix tests

parent 22968fe8
No related branches found
No related tags found
Loading
Pipeline #
......@@ -97,7 +97,8 @@ def test_commands(cli, cmd, word_idx, expected):
('bst --l', 1, ['--log-file ']),
# Test that options of subcommands also complete
('bst --no-colors build -', 3, ['--all ', '--track ']),
('bst --no-colors build -', 3, ['--all ', '--track ',
'--track-except ', '--track-save ']),
# Test the behavior of completing after an option that has a
# parameter that cannot be completed, vs an option that has
......
import os
import shutil
import itertools
import pytest
from tests.testutils import cli, create_repo
from buildstream import _yaml
# Project directory
DATA_DIR = os.path.join(
os.path.dirname(os.path.realpath(__file__)),
"project",
)
def create_element(repo, name, path, dependencies, ref=None):
element = {
'kind': 'import',
'sources': [
repo.source_config(ref=ref)
],
'depends': dependencies
}
_yaml.dump(element, os.path.join(path, name))
@pytest.mark.parametrize("save", [([True]), ([False])])
@pytest.mark.datafiles(os.path.join(DATA_DIR))
@pytest.mark.parametrize("exceptions,excepted", [
# Test with no exceptions
([], []),
# Test excepting '2.bst'
(['2.bst'], ['2.bst', '7.bst']),
# Test excepting '2.bst' and '3.bst'
(['2.bst', '3.bst'], [
'2.bst', '3.bst', '4.bst',
'5.bst', '6.bst', '7.bst'
])
])
@pytest.mark.parametrize("track_targets,tracked", [
# Test tracking the main target element
(['0.bst'], [
'0.bst', '2.bst', '3.bst',
'4.bst', '5.bst', '6.bst', '7.bst'
]),
# Test tracking a child element
(['3.bst'], [
'3.bst', '4.bst', '5.bst',
'6.bst'
]),
# Test tracking multiple children
(['2.bst', '3.bst'], [
'2.bst', '3.bst', '4.bst',
'5.bst', '6.bst', '7.bst'
])
])
def test_build_track(cli, datafiles, tmpdir, track_targets,
exceptions, tracked, excepted, save):
project = os.path.join(datafiles.dirname, datafiles.basename)
dev_files_path = os.path.join(project, 'files', 'dev-files')
element_path = os.path.join(project, 'elements')
repo = create_repo('git', str(tmpdir))
ref = repo.create(dev_files_path)
create_elements = {
'0.bst': [
'2.bst',
'3.bst'
],
'2.bst': [
'3.bst',
'7.bst'
],
'3.bst': [
'4.bst',
'5.bst',
'6.bst'
],
'4.bst': [],
'5.bst': [],
'6.bst': [
'5.bst'
],
'7.bst': []
}
for element, dependencies in create_elements.items():
if element in set(tracked) - set(excepted):
create_element(repo, element, element_path, dependencies)
else:
create_element(repo, element, element_path, dependencies, ref=ref)
args = ['build']
if save:
args += ['--track-save']
args += itertools.chain.from_iterable(zip(itertools.repeat('--track'), track_targets))
args += itertools.chain.from_iterable(zip(itertools.repeat('--track-except'), exceptions))
args += ['0.bst']
result = cli.get_tracked(project, args)
assert set(result) == set(tracked) - set(excepted)
for target in set(tracked) - set(excepted):
cli.remove_artifact_from_cache(project, target)
# Delete element sources
source_dir = os.path.join(project, 'cache', 'sources')
shutil.rmtree(source_dir)
if not save:
assert cli.get_element_state(project, target) == 'no reference'
else:
assert cli.get_element_state(project, target) == 'fetch needed'
......@@ -126,6 +126,8 @@ def test_iterate_no_recurse(cli, datafiles, tmpdir):
'third-level-1.bst',
'fourth-level-2.bst',
'third-level-2.bst',
'fourth-level-3.bst',
'third-level-3.bst',
'second-level-1.bst',
'first-level-1.bst',
'first-level-2.bst',
......@@ -137,6 +139,8 @@ def test_iterate_no_recurse(cli, datafiles, tmpdir):
(['build.bst'], ['third-level-1.bst'], [
'fourth-level-2.bst',
'third-level-2.bst',
'fourth-level-3.bst',
'third-level-3.bst',
'second-level-1.bst',
'first-level-1.bst',
'first-level-2.bst',
......
kind: autotools
description: Should not be removed
kind: autotools
description: Depends uniquely on one dependency, shares another
description: Depends uniquely on one dependency, shares another, has another unique nested dependency
depends:
- third-level-1.bst
- third-level-2.bst
- third-level-3.bst
kind: autotools
description: Should be an explicit dependency, and *not* remove its children
depends:
- fourth-level-3.bst
import os
import re
import sys
import shutil
import itertools
import traceback
from contextlib import contextmanager, ExitStack
......@@ -7,6 +9,8 @@ from click.testing import CliRunner
from ruamel import yaml
import pytest
from tests.testutils.site import IS_LINUX
# Import the main cli entrypoint
from buildstream._frontend.main import cli as bst_cli
from buildstream import _yaml
......@@ -44,6 +48,17 @@ class Cli():
def configure(self, config):
self.config = config
def remove_artifact_from_cache(self, project, element_name):
cache_dir = os.path.join(project, 'cache', 'artifacts')
if IS_LINUX:
cache_dir = os.path.join(cache_dir, 'ostree', 'refs', 'heads')
else:
cache_dir = os.path.join(cache_dir, 'tar')
cache_dir = os.path.splitext(os.path.join(cache_dir, 'test', element_name))[0]
shutil.rmtree(cache_dir)
# run():
#
# Runs buildstream with the given arguments, additionally
......@@ -160,6 +175,16 @@ class Cli():
assert result.exit_code == 0
return result.output.splitlines()
def get_tracked(self, project, args):
result = self.run(project=project, silent=True, args=args)
assert result.exit_code == 0
tracked = re.findall(r'\[track:(\S+)\s*] SUCCESS +Tracking master from',
result.output)
assert tracked is not None
return list(tracked)
# Main fixture
#
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment