Allow to specify python interpter used for testing IR plugin

Change-Id: I2ea68efed1fe1c0dc22b3c49118cfc5c93c8a037
This commit is contained in:
Federico Ressi 2020-03-26 15:28:28 +01:00
parent b12c5d5d12
commit e116222308
8 changed files with 148 additions and 24 deletions

View File

@ -20,6 +20,11 @@ subparsers:
default: localhost
help: Target host where test cases are deployed and executed
ansible_variable: test_host
ansible-python-interpreter:
type: Value
default: python3
help: Python interpreter executed by ansible on target hosts
ansible_variable: ansible_python_interpreter
- title: Control flow
options:
@ -89,14 +94,22 @@ subparsers:
type: Value
help: command to be executed for tox (typically tox)
ansible_variable: tox_command
tox-environment:
type: Value
help: envitonment variables to be set when running test cases
ansible_variable: tox_environment
tox-envlist:
type: Value
help: tox environment list to be executed
help: Tox environment names to be executed
ansible_variable: tox_envlist
tox-extra-args:
type: Value
help: extra options to be passed to Tox
ansible_variable: tox_extra_args
tox-python:
type: Value
help: Python interpreter to be used for executing test cases
ansible_variable: tox_python
test-report-dir:
type: Value
help: directory where to store test report files

View File

@ -19,7 +19,6 @@ test_git_repo: '{{ tobiko_git_repo | realpath }}'
test_git_refspec: ''
test_git_version: ''
# --- Test configuration options ----------------------------------------------
# Configuration options

View File

@ -4,9 +4,14 @@
tox_dir: '{{ test_dir | realpath }}'
tox_command: tox
tox_environment: {}
tox_envlist: py36
tox_envlist:
tox_extra_args: ''
tox_command_line: >
{{ tox_command }}
{% if tox_envlist %} -e {{ tox_envlist | quote }} {% endif %}
{{ tox_extra_args }}
tox_python: 'python3'
tox_report_dir: '{{ test_report_dir | realpath }}'
tox_report_name: '{{ test_report_name }}_{{ tox_envlist }}'
tox_report_env:

View File

@ -1,10 +1,26 @@
---
- name: "run test Tox envlist '{{ tox_envlist }}' on direcory '{{ tox_dir }}'"
shell:
chdir: "{{ tox_dir }}"
cmd: |
{{ tox_command }} -e "{{ tox_envlist }}" {{ tox_extra_args }}
- name: "set 'PYTHON={{ tox_python }}' in Tox environment variables"
set_fact:
tox_environment: >
{{ tox_environment | combine({ "PYTHON": (tox_python or "") }) }}
when:
- tox_python is defined
- name: "show tox environment"
debug: var=tox_environment
- name: "normalize white spaces from Tox command line"
set_fact:
tox_command_line: '{{ tox_command_line.split() | join(" ") }}'
- name: "run Tox on direcory '{{ tox_dir }}': '{{ tox_command_line }}'"
command:
chdir: '{{ tox_dir }}'
cmd: '{{ tox_command_line }}'
register:
run_tox
environment: '{{ tox_environment }}'

View File

@ -14,7 +14,7 @@ function get_realpath {
(
export PATH=${CI_TOOLS_ORIGINAL_PATH:-${PATH}}
local tools_dir=$(dirname "${BASH_SOURCE[0]}")
local python=$(which python3 || which python2 || wich python)
local python=$(which python3 || which python2 || which python)
if [ -x "${python}" ] && "${python}" --version > /dev/null; then
local script="${tools_dir}/realpath.py"
local script=$("${python}" "${script}" "${script}")

85
tools/setup_infrared.py Normal file
View File

@ -0,0 +1,85 @@
# Copyright 2018 Red Hat
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from __future__ import absolute_import
import logging
import os
import subprocess
import sys
LOG = logging.getLogger(__name__)
def main():
setup_logging()
add_plugin('tobiko', os.environ.get('IR_TOBIKO_PLUGIN'))
import_workspace(os.environ.get('IR_WORKSPACE_FILE'))
def setup_logging(level=logging.DEBUG):
logging.basicConfig(
level=level, stream=sys.stderr,
format='%(name)-s: %(levelname)-7s %(asctime)-15s | %(message)s')
def add_plugin(name, path):
path = path or os.environ.get('IR_TOBIKO_PLUGIN')
if path:
path = normalize_path(path)
if os.path.isdir(path):
remove_plugin(name)
execute('ir plugin add "{}"', path)
def remove_plugin(name):
try:
execute('ir plugin remove "{}"', name)
except subprocess.CalledProcessError:
return False
else:
return True
def import_workspace(filename):
if filename:
filename = normalize_path(filename)
if os.path.isfile(filename):
try:
execute('ir workspace import "{}"', filename)
except subprocess.CalledProcessError:
# If file was already imported before we checkout to its
# workspace
workspace = name_from_path(filename)
execute('ir workspace checkout "{}"', workspace)
def normalize_path(path):
return os.path.realpath(os.path.expanduser(path))
def execute(command, *args, **kwargs):
if args or kwargs:
command = command.format(*args, **kwargs)
LOG.info('%s', command)
return subprocess.check_output(command, shell=True)
def name_from_path(path):
return os.path.splitext(os.path.basename(path))[0]
if __name__ == '__main__':
LOG = logging.getLogger(name_from_path(__file__))
main()

33
tox.ini
View File

@ -1,6 +1,6 @@
[tox]
envlist = linters,py37,docs
envlist = bindep,linters,cover
minversion = 3.4.0
@ -177,11 +177,11 @@ commands = {posargs:bash}
[testenv:infrared]
# Package libselinux-python3 still not available on centos-7
basepython = python
usedevelop = False
skipdist = True
skip_install = True
basepython = {env:PYTHON:python3}
usedevelop = false
skipdist = true
skip_install = true
sitepackages = true
deps =
-r infrared-requirements.txt
passenv =
@ -193,15 +193,20 @@ passenv =
setenv =
{[testenv:venv]setenv}
IR_COMMAND={env:IR_COMMAND:{toxinidir}/tools/ci/ir}
IR_HOME={env:IR_HOME:{envdir}/home/infrared}
ANSIBLE_CONFIG={env:ANSIBLE_CONFIG:{toxinidir}/ansible.cfg}
ANSIBLE_PYTHON_INTERPRETER={env:ANSIBLE_PYTHON_INTERPRETER:python3}
IR_HOME={env:IR_HOME:{envdir}/home/infrared}
IR_TOBIKO_PLUGIN={env:IR_TOBIKO_PLUGIN:{toxinidir}/roles}
IR_WORKSPACE_FILE={env:IR_WORKSPACE_FILE:{toxinidir}/workspace.tgz}
PYTHON={env:PYTHON:python3}
commands_pre =
-ir plugin remove tobiko
ir plugin add {toxinidir}/roles
-ir workspace import {env:IR_WORKSPACE_FILE:{toxinidir}/workspace.tgz}
{envpython} {toxinidir}/tools/setup_infrared.py
commands =
ir tobiko --tobiko-src-dir {toxinidir} {posargs}
ir tobiko \
--ansible-python-interpreter {env:ANSIBLE_PYTHON_INTERPRETER} \
--tobiko-src-dir {toxinidir} {posargs}
# --- documentation environments ----------------------------------------------
@ -257,10 +262,10 @@ commands =
[testenv:bindep]
basepython = python3
basepython = {env:PYTHON:python3}
# Do not install any requirements. We want this to be fast and work even if
# system dependencies are missing, since it's used to tell you what system
# dependencies are missing! This also means that bindep must be installed
# separately, outside of the requirements files.
deps = bindep
commands = bindep test
commands = bindep {posargs:test}

View File

@ -12,7 +12,8 @@
test_results_dir: '{{ zuul_output_dir }}/logs'
tox_envlist: infrared
tox_extra_args: >
-- --collect-dir '{{ test_results_dir }}'
--
--collect-dir '{{ test_results_dir }}'
pre-run: playbooks/infrared/pre.yaml
post-run: playbooks/infrared/post.yaml