[Notes] [Git][BuildStream/buildstream][phil/external-plugin-testing] Allow testing of external plugins via tox



Title: GitLab

Phil Dawson pushed to branch phil/external-plugin-testing at BuildStream / buildstream

Commits:

3 changed files:

Changes:

  • setup.cfg
    ... ... @@ -12,7 +12,7 @@ test=pytest
    12 12
     
    
    13 13
     [tool:pytest]
    
    14 14
     addopts = --verbose --basetemp ./tmp --cov=buildstream --cov-config .coveragerc --durations=20
    
    15
    -norecursedirs = tests/integration/project integration-cache tmp __pycache__ .eggs
    
    15
    +norecursedirs = tests/integration/project integration-cache tmp __pycache__ .eggs tests/external_plugins/
    
    16 16
     python_files = tests/*/*.py
    
    17 17
     env =
    
    18 18
         D:BST_TEST_SUITE=True
    

  • tests/external_plugins.py
    1
    +import pytest
    
    2
    +import subprocess
    
    3
    +import os
    
    4
    +import sys
    
    5
    +import shutil
    
    6
    +import time
    
    7
    +
    
    8
    +ALL_EXTERNAL_PLUGINS = [
    
    9
    +    ExternalPluginRepo(
    
    10
    +        name='bst-external',
    
    11
    +        url='https://gitlab.com/BuildStream/bst-external.git',
    
    12
    +        ref='master'
    
    13
    +    ),
    
    14
    +]
    
    15
    +BST_SOURCE_PATH = ''
    
    16
    +PYTEST_ARGS = ['--cov-append', '--cov=buildstream']
    
    17
    +TEST_COMMAND = ['pytest', *PYTEST_ARGS]
    
    18
    +
    
    19
    +
    
    20
    +class ExternalPluginRepo():
    
    21
    +    def __init__(self, name=None, url=None, ref=None):
    
    22
    +        self.name = name
    
    23
    +        self.url = url
    
    24
    +        self.ref = ref
    
    25
    +        self._clone_location = None
    
    26
    +
    
    27
    +    def clone(self, location):
    
    28
    +        self._clone_location = os.path.join(location, self.name)
    
    29
    +        subprocess.run(['git', 'clone',
    
    30
    +                        '--single-branch',
    
    31
    +                        '--branch', 'master',
    
    32
    +                        '--depth', '1',
    
    33
    +                        self.url,
    
    34
    +                        self._clone_location,
    
    35
    +                        ])
    
    36
    +        return self._clone_location
    
    37
    +
    
    38
    +    def install(self):
    
    39
    +        subprocess.run(['pip3', 'install', self._clone_location])
    
    40
    +
    
    41
    +    def test(self, pytest_args):
    
    42
    +        return pytest.main(PYTEST_ARGS
    
    43
    +                           + pytest_args
    
    44
    +                           + [os.path.join(self._clone_location, 'tests')]
    
    45
    +                           )
    
    46
    +
    
    47
    +
    
    48
    +def run_repo_tests(repo, tmpdir, pytest_args):
    
    49
    +    print("Cloning repo {} to {}...".format(repo.name, tmpdir))
    
    50
    +    repo.clone(tmpdir)
    
    51
    +
    
    52
    +    print("Installing {}...".format(repo.name))
    
    53
    +    repo.install()
    
    54
    +
    
    55
    +    print("Testing {}...".format(repo.name))
    
    56
    +    return repo.test(pytest_args)
    
    57
    +
    
    58
    +
    
    59
    +if __name__ == "__main__":
    
    60
    +    from sys import argv
    
    61
    +
    
    62
    +    _, tmpdir, *pytest_args = argv
    
    63
    +
    
    64
    +    bst_external = ExternalPluginRepo(
    
    65
    +        name='bst-external',
    
    66
    +        url='https://gitlab.com/BuildStream/bst-external.git',
    
    67
    +        ref='master'
    
    68
    +    )
    
    69
    +
    
    70
    +    exit_code = 0
    
    71
    +    for plugin in ALL_EXTERNAL_PLUGINS:
    
    72
    +        exit_code = run_repo_tests(bst_external, tmpdir, pytest_args)
    
    73
    +        if exit_code != 0:
    
    74
    +            sys.exit(exit_code)

  • tox.ini
    ... ... @@ -13,6 +13,8 @@ skip_missing_interpreters = true
    13 13
     [testenv]
    
    14 14
     commands =
    
    15 15
         pytest --basetemp {envtmpdir} {posargs}
    
    16
    +    pip3 install -e {toxinidir}
    
    17
    +    {envpython} {toxinidir}/tests/external_plugins.py {envtmpdir} {posargs}
    
    16 18
         mkdir -p .coverage-reports
    
    17 19
         mv {envtmpdir}/.coverage {toxinidir}/.coverage-reports/.coverage.{env:COVERAGE_PREFIX:}{envname}
    
    18 20
     deps =
    
    ... ... @@ -59,6 +61,7 @@ deps =
    59 61
         -rrequirements/dev-requirements.txt
    
    60 62
         -rrequirements/plugin-requirements.txt
    
    61 63
     
    
    64
    +
    
    62 65
     #
    
    63 66
     # Building documentation
    
    64 67
     #
    



  • [Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]