diff --git a/.gitignore b/.gitignore index 00ef136..c102fa6 100644 --- a/.gitignore +++ b/.gitignore @@ -7,29 +7,3 @@ /avocado-51.0.tar.gz /avocado-52.0.tar.gz /avocado-52.1.tar.gz -/avocado-61.0.tar.gz -/avocado-62.0.tar.gz -/avocado-63.0.tar.gz -/avocado-64.0.tar.gz -/avocado-65.0.tar.gz -/avocado-66.0.tar.gz -/avocado-67.0.tar.gz -/avocado-68.0.tar.gz -/avocado-69.0.tar.gz -/avocado-70.0.tar.gz -/avocado-71.0.tar.gz -/avocado-72.0.tar.gz -/avocado-73.0.tar.gz -/avocado-74.0.tar.gz -/avocado-75.1.tar.gz -/avocado-76.0.tar.gz -/avocado-77.0.tar.gz -/avocado-78.0.tar.gz -/avocado-79.0.tar.gz -/avocado-80.0.tar.gz -/avocado-82.0.tar.gz -/avocado-92.0.tar.gz -/avocado-92.1.tar.gz -/avocado-92.1-python312.patch -/avocado-92.3.tar.gz -/avocado-112.0.tar.gz diff --git a/avocado-selftest-doublefree-disable.patch b/avocado-selftest-doublefree-disable.patch new file mode 100644 index 0000000..075de2b --- /dev/null +++ b/avocado-selftest-doublefree-disable.patch @@ -0,0 +1,11 @@ +diff -r -u avocado-52.0.orig/selftests/functional/test_output.py avocado-52.0/selftests/functional/test_output.py +--- avocado-52.0.orig/selftests/functional/test_output.py 2017-06-26 19:26:48.000000000 -0500 ++++ avocado-52.0/selftests/functional/test_output.py 2017-08-09 07:40:41.636928188 -0500 +@@ -67,6 +67,7 @@ + def setUp(self): + self.tmpdir = tempfile.mkdtemp(prefix='avocado_' + __name__) + ++ @unittest.skip("Test is producing a false failure due to platform/compiler changes") + @unittest.skipIf(missing_binary('cc'), + "C compiler is required by the underlying doublefree.py test") + def test_output_doublefree(self): diff --git a/avocado-selftest-fix-cmdline-check.patch b/avocado-selftest-fix-cmdline-check.patch new file mode 100644 index 0000000..525a869 --- /dev/null +++ b/avocado-selftest-fix-cmdline-check.patch @@ -0,0 +1,15 @@ +diff -ru ../avocado-52.1.orig/selftests/functional/test_plugin_diff.py ./selftests/functional/test_plugin_diff.py +--- ../avocado-52.1.orig/selftests/functional/test_plugin_diff.py 2018-03-01 12:05:02.000000000 -0600 ++++ ./selftests/functional/test_plugin_diff.py 2018-03-13 16:50:33.662490323 -0500 +@@ -52,9 +52,9 @@ + result = self.run_and_check(cmd_line, expected_rc) + msg = "# COMMAND LINE" + self.assertIn(msg, result.stdout) +- msg = "-./scripts/avocado run" ++ msg = "-%s run" % AVOCADO + self.assertIn(msg, result.stdout) +- msg = "+./scripts/avocado run" ++ msg = "+%s run" % AVOCADO + self.assertIn(msg, result.stdout) + + def test_diff_nocmdline(self): diff --git a/python-avocado.spec b/python-avocado.spec index 8dd8cf4..84e605b 100644 --- a/python-avocado.spec +++ b/python-avocado.spec @@ -1,3 +1,6 @@ +%global srcname avocado +%global pkgname avocado + # Conditional for release vs. snapshot builds. Set to 1 for release build. %if ! 0%{?rel_build:1} %global rel_build 1 @@ -5,530 +8,436 @@ # Settings used for build from snapshots. %if 0%{?rel_build} - %global gitref %{version} - %global gittar avocado-%{version}.tar.gz + %global gittar %{srcname}-%{version}.tar.gz %else %if ! 0%{?commit:1} - %global commit e4ede79f097dcc1dbd30e43ffe3b7daf52d2204d + %global commit 0ddd3c7b92f18c85157766e9e0ec810e6b3dd37e %endif %if ! 0%{?commit_date:1} - %global commit_date 20251010 + %global commit_date 20180301 %endif - %global shortcommit %(c=%{commit};echo ${c:0:9}) - %global gitrel .%{commit_date}git%{shortcommit} - %global gitref %{commit} - %global gittar avocado-%{shortcommit}.tar.gz + %global shortcommit %(c=%{commit};echo ${c:0:7}) + %global gitrel .%{commit_date}git%{shortcommit} + %global gittar %{srcname}-%{shortcommit}.tar.gz %endif # Selftests are provided but may need to be skipped because many of # the functional tests are time and resource sensitive and can # cause race conditions and random build failures. They are # enabled by default. -# You can disable them with rpmbuild ... --without tests -%bcond_without tests +# However, selftests need to be disabled when libvirt is not available. +%global with_tests 1 +%if 0%{?rhel} && 0%{?rhel} <= 7 + # libvirt is not available for all RHEL builder architectures + %global with_tests 0 +%endif -# Only Fedora 36 and later have a suitable python3-resutlsdb_api -# package -%if 0%{?fedora} >= 36 +# Python2 binary packages are being removed +# See https://fedoraproject.org/wiki/Changes/Mass_Python_2_Package_Removal +%if (0%{?fedora} && 0%{?fedora} <= 29) || (0%{?rhel} && 0%{?rhel} <= 7) %global with_resultsdb 1 %else %global with_resultsdb 0 %endif -Name: python-avocado -Version: 112.0 -Release: 1%{?gitrel}%{?dist} +Name: python-%{pkgname} +Version: 52.1 +Release: 9%{?gitrel}%{?dist} Summary: Framework with tools and libraries for Automated Testing + # Found licenses: -# avocado/core/tapparser.py: MIT # avocado/utils/external/gdbmi_parser.py: MIT # avocado/utils/external/spark.py: MIT -# optional_plugins/html/avocado_result_html/templates/bootstrap.min.css: MIT -# optional_plugins/html/avocado_result_html/templates/bootstrap.min.js: MIT -# selftests/.data/jenkins-junit.xsd: MIT +# optional_plugins/html/avocado_result_html/resources/static/css/*: MIT +# optional_plugins/html/avocado_result_html/resources/static/js/*: MIT # Other files: GPLv2 and GPLv2+ -License: GPLv2+ and GPLv2 and MIT -URL: https://avocado-framework.github.io/ -Source0: https://github.com/avocado-framework/avocado/archive/%{gitref}/%{gittar} +License: GPLv2 and MIT +URL: http://avocado-framework.github.io/ +%if 0%{?rel_build} +Source0: https://github.com/avocado-framework/%{srcname}/archive/%{version}.tar.gz#/%{gittar} +%else +Source0: https://github.com/avocado-framework/%{srcname}/archive/%{commit}.tar.gz#/%{gittar} +%endif +Patch0: avocado-selftest-doublefree-disable.patch +Patch1: avocado-selftest-fix-cmdline-check.patch BuildArch: noarch +BuildRequires: python2-aexpect +BuildRequires: python2-devel +BuildRequires: python2-mock +BuildRequires: /usr/bin/rst2man +BuildRequires: grep, sed -BuildRequires: kmod -BuildRequires: procps-ng -BuildRequires: python3-devel -BuildRequires: python3-docutils -BuildRequires: python3-jinja2 -BuildRequires: python3-lxml -BuildRequires: python3-psutil -BuildRequires: python3-setuptools -%if ! 0%{?rhel} -BuildRequires: python-aexpect +%if 0%{?fedora} > 27 || 0%{?rhel} > 7 +BuildRequires: python2-flexmock +BuildRequires: python2-lxml +BuildRequires: python2-pystache +%else +BuildRequires: python-flexmock +BuildRequires: python-lxml +BuildRequires: pystache +%endif +%if 0%{?fedora} >= 29 +BuildRequires: python2-fabric3 +%else +BuildRequires: fabric %endif %if %{with_resultsdb} -BuildRequires: python3-resultsdb_api -BuildRequires: python3-pycdlib +BuildRequires: python2-resultsdb_api %endif -%if %{with tests} -BuildRequires: python3-jsonschema -%if ! 0%{?rhel} >= 9 -BuildRequires: genisoimage +%if 0%{?with_tests} +BuildRequires: perl(TAP::Parser) +%if 0%{?fedora} >= 27 || 0%{?rhel} > 7 +BuildRequires: python2-libvirt +%else +BuildRequires: libvirt-python %endif -BuildRequires: libcdio -BuildRequires: psmisc -%if ! 0%{?rhel} -BuildRequires: perl-Test-Harness -BuildRequires: python3-xmlschema -BuildRequires: ansible-core +%if 0%{?rhel} && 0%{?rhel} <= 7 +BuildRequires: python-yaml +%else +BuildRequires: python2-yaml %endif -BuildRequires: glibc-all-langpacks -BuildRequires: python3-netifaces -BuildRequires: python3-yaml -BuildRequires: nmap-ncat -BuildRequires: gcc -BuildRequires: gdb -BuildRequires: gdb-gdbserver %endif -# with tests + +%if 0%{?rhel} && 0%{?rhel} <= 7 +BuildRequires: python-psutil +BuildRequires: python-requests +BuildRequires: python-setuptools +BuildRequires: python-sphinx +BuildRequires: python-stevedore +%else +BuildRequires: python2-psutil +BuildRequires: python2-requests +BuildRequires: python2-setuptools +%if 0%{?fedora} && 0%{?fedora} <= 30 +# python2-sphinx is no longer available or needed as of F31 +BuildRequires: python2-sphinx +%endif +BuildRequires: python2-stevedore +%endif + +%if 0%{?el6} +BuildRequires: procps +BuildRequires: python-argparse +BuildRequires: python-importlib +BuildRequires: python-logutils +BuildRequires: python-unittest2 +%else +BuildRequires: procps-ng +%endif + +# For some strange reason, fabric on Fedora 24 does not require the +# python-crypto package, but the fabric code always imports it. Newer +# fabric versions, such from Fedora 25 do conditional imports (try: +# from Crypto import Random; except: Random = None) and thus do not +# need this requirement. +%if 0%{?fedora} == 24 +BuildRequires: python-crypto +%endif + +%if 0%{?fedora} >= 25 || 0%{?rhel} >= 7 +BuildRequires: kmod +%endif %description Avocado is a set of tools and libraries (what people call these days a framework) to perform automated testing. -%prep -%setup -q -n avocado-%{gitref} -%if 0%{?rhel} -sed -e 's/"PyYAML>=4.2b2"/"PyYAML>=3.12"/' -i optional_plugins/varianter_yaml_to_mux/setup.py -%endif -%if 0%{?fedora} >= 42 -sed -e '/"markupsafe<3.0.0"/d' -i optional_plugins/html/setup.py -sed -e '/"markupsafe<3.0.0"/d' -i optional_plugins/ansible/setup.py -%endif - -%build -%py3_build -pushd optional_plugins/html - %py3_build -popd -%if %{with_resultsdb} -pushd optional_plugins/resultsdb - %py3_build -popd -%endif -pushd optional_plugins/varianter_yaml_to_mux - %py3_build -popd -pushd optional_plugins/golang - %py3_build -popd -%if ! 0%{?rhel} -pushd optional_plugins/ansible - %py3_build -popd -%endif -pushd optional_plugins/varianter_pict - %py3_build -popd -pushd optional_plugins/varianter_cit - %py3_build -popd -pushd optional_plugins/result_upload - %py3_build -popd -pushd optional_plugins/mail - %py3_build -popd -%if ! 0%{?rhel} -pushd optional_plugins/spawner_remote - %py3_build -popd -%endif -rst2man man/avocado.rst man/avocado.1 - -%install -%py3_install -for exe in \ - avocado \ - avocado-runner-noop \ - avocado-runner-dry-run \ - avocado-runner-exec-test \ - avocado-runner-python-unittest \ - avocado-runner-avocado-instrumented \ - avocado-runner-tap \ - avocado-runner-asset \ - avocado-runner-package \ - avocado-runner-pip \ - avocado-runner-podman-image \ - avocado-runner-sysinfo \ - avocado-runner-vmimage \ - avocado-external-runner \ - avocado-software-manager -do - mv %{buildroot}%{_bindir}/$exe %{buildroot}%{_bindir}/$exe-%{python3_version} - ln -s $exe-%{python3_version} %{buildroot}%{_bindir}/$exe-3 - ln -s $exe-%{python3_version} %{buildroot}%{_bindir}/$exe -done -# configuration is held at /etc/avocado only and part of the -# python-avocado-common package -rm -rf %{buildroot}%{python3_sitelib}/avocado/etc -# ditto for libexec files -rm -rf %{buildroot}%{python3_sitelib}/avocado/libexec -pushd optional_plugins/html - %py3_install -popd -%if %{with_resultsdb} -pushd optional_plugins/resultsdb - %py3_install -popd -%endif -pushd optional_plugins/varianter_yaml_to_mux - %py3_install -popd -pushd optional_plugins/golang - %py3_install -popd -%if ! 0%{?rhel} -pushd optional_plugins/ansible - %py3_install -popd -%endif -pushd optional_plugins/varianter_pict - %py3_install -popd -pushd optional_plugins/varianter_cit - %py3_install -popd -pushd optional_plugins/result_upload - %py3_install -popd -pushd optional_plugins/mail - %py3_install -popd -%if ! 0%{?rhel} -pushd optional_plugins/spawner_remote - %py3_install -popd -%endif -# cleanup plugin test cruft -rm -rf %{buildroot}%{python3_sitelib}/tests -mkdir -p %{buildroot}%{_sysconfdir}/avocado -cp -r avocado/etc/avocado/scripts %{buildroot}%{_sysconfdir}/avocado/scripts -cp -r avocado/etc/avocado/sysinfo %{buildroot}%{_sysconfdir}/avocado/sysinfo -mkdir -p %{buildroot}%{_libexecdir}/avocado -cp avocado/libexec/avocado-bash-utils %{buildroot}%{_libexecdir}/avocado/avocado-bash-utils -cp avocado/libexec/avocado_debug %{buildroot}%{_libexecdir}/avocado/avocado_debug -cp avocado/libexec/avocado_error %{buildroot}%{_libexecdir}/avocado/avocado_error -cp avocado/libexec/avocado_info %{buildroot}%{_libexecdir}/avocado/avocado_info -cp avocado/libexec/avocado_warn %{buildroot}%{_libexecdir}/avocado/avocado_warn -mkdir -p %{buildroot}%{_mandir}/man1 -install -m 0644 man/avocado.1 %{buildroot}%{_mandir}/man1/avocado.1 -mkdir -p %{buildroot}%{_pkgdocdir} -install -m 0644 README.rst %{buildroot}%{_pkgdocdir} -install -d -m 0755 %{buildroot}%{_sharedstatedir}/avocado/data -# place examples in documentation directory -install -d -m 0755 %{buildroot}%{_docdir}/avocado -cp -r examples/gdb-prerun-scripts %{buildroot}%{_docdir}/avocado/gdb-prerun-scripts -cp -r examples/plugins %{buildroot}%{_docdir}/avocado/plugins -cp -r examples/tests %{buildroot}%{_docdir}/avocado/tests -cp -r examples/varianter_cit %{buildroot}%{_docdir}/avocado/varianter_cit -cp -r examples/varianter_pict %{buildroot}%{_docdir}/avocado/varianter_pict -cp -r examples/yaml_to_mux %{buildroot}%{_docdir}/avocado/yaml_to_mux -mkdir -p %{buildroot}%{_datarootdir}/avocado -mv %{buildroot}%{python3_sitelib}/avocado/schemas %{buildroot}%{_datarootdir}/avocado -find %{buildroot}%{_docdir}/avocado -type f -name '*.py' -exec chmod -c -x {} ';' - -%if %{with tests} -%check - # LANG: to make the results predictable, we pin the language - # that is used during test execution. - # AVOCADO_CHECK_LEVEL: package build environments have the least - # amount of resources we have observed so far. Let's avoid tests that - # require too much resources or are time sensitive - PATH=%{buildroot}%{_bindir}:%{buildroot}%{_libexecdir}/avocado:$PATH \ - PYTHONPATH=%{buildroot}%{python3_sitelib}:. \ - LANG=en_US.UTF-8 \ - AVOCADO_CHECK_LEVEL=0 \ - %{python3} selftests/check.py --skip static-checks --disable-plugin-checks robot -%endif - - -%package -n python3-avocado +%package -n python2-%{pkgname} Summary: %{summary} -Requires: python-avocado-common == %{version}-%{release} +License: GPLv2 and MIT +%{?python_provide:%python_provide python2-%{pkgname}} Requires: gdb Requires: gdb-gdbserver -Requires: procps-ng -%if ! 0%{?rhel} -Requires: python3-pycdlib +Requires: pyliblzma +Requires: python2 + +%if 0%{?fedora} > 27 || 0%{?rhel} > 7 +Requires: python2-pystache +%else +Requires: pystache +%endif +%if 0%{?fedora} >= 29 +Requires: python2-fabric3 +%else +Requires: fabric %endif -%description -n python3-avocado +%if 0%{?rhel} && 0%{?rhel} <= 7 +Requires: python-requests +Requires: python-stevedore +%else +Requires: python2-requests +Requires: python2-stevedore +%endif + +%if 0%{?el6} +Requires: procps +Requires: python-argparse +Requires: python-importlib +Requires: python-logutils +Requires: python-unittest2 +%else +Requires: procps-ng +%endif + + +%description -n python2-%{pkgname} Avocado is a set of tools and libraries (what people call these days a framework) to perform automated testing. -%files -n python3-avocado + +%package -n python2-%{pkgname}-plugins-output-html +Summary: Avocado HTML report plugin +%{?python_provide:%python_provide python2-%{pkgname}-plugins-output-html} +Requires: python2-%{pkgname} == %{version}-%{release} + +%if 0%{?fedora} > 27 || 0%{?rhel} > 7 +Requires: python2-pystache +%else +Requires: pystache +%endif + +%description -n python2-%{pkgname}-plugins-output-html +Adds to avocado the ability to generate an HTML report at every job results +directory. It also gives the user the ability to write a report on an +arbitrary filesystem location. + + +%package -n python2-%{pkgname}-plugins-runner-remote +Summary: Avocado Runner for Remote Execution +%{?python_provide:%python_provide python2-%{pkgname}-plugins-runner-remote} +Requires: python2-%{pkgname} == %{version}-%{release} +%if 0%{?fedora} == 24 +Requires: python-crypto +%endif +%if 0%{?fedora} >= 29 +Requires: python2-fabric3 +%else +Requires: fabric +%endif + +%description -n python2-%{pkgname}-plugins-runner-remote +Allows Avocado to run jobs on a remote machine, by means of an SSH +connection. Avocado must be previously installed on the remote machine. + + +%package -n python2-%{pkgname}-plugins-runner-vm +Summary: Avocado Runner for libvirt VM Execution +%{?python_provide:%python_provide python2-%{pkgname}-plugins-runner-vm} +Requires: python2-%{pkgname} == %{version}-%{release} +Requires: python2-%{pkgname}-plugins-runner-remote == %{version}-%{release} +%if 0%{?fedora} >= 27 || 0%{?rhel} > 7 +Requires: python2-libvirt +%else +Requires: libvirt-python +%endif + +%description -n python2-%{pkgname}-plugins-runner-vm +Allows Avocado to run jobs on a libvirt based VM, by means of +interaction with a libvirt daemon and an SSH connection to the VM +itself. Avocado must be previously installed on the VM. + + +%package -n python2-%{pkgname}-plugins-runner-docker +Summary: Avocado Runner for Execution on Docker Containers +%{?python_provide:%python_provide python2-%{pkgname}-plugins-runner-docker} +Requires: python2-%{pkgname} == %{version}-%{release} +Requires: python2-%{pkgname}-plugins-runner-remote == %{version}-%{release} +Requires: python2-aexpect + +%description -n python2-%{pkgname}-plugins-runner-docker +Allows Avocado to run jobs on a Docker container by interacting with a +Docker daemon and attaching to the container itself. Avocado must +be previously installed on the container. + + +%if %{with_resultsdb} +%package -n python2-%{pkgname}-plugins-resultsdb +Summary: Avocado plugin to propagate job results to ResultsDB +%{?python_provide:%python_provide python2-%{pkgname}-plugins-resultsdb} +Requires: python2-%{pkgname} == %{version}-%{release} +Requires: python2-resultsdb_api + +%description -n python2-%{pkgname}-plugins-resultsdb +Allows Avocado to send job results directly to a ResultsDB +server. +%endif + + +%package -n python2-%{pkgname}-plugins-varianter-yaml-to-mux +Summary: Avocado plugin to generate variants out of yaml files +%{?python_provide:%python_provide python2-%{pkgname}-plugins-varianter-yaml-to-mux} +Requires: python2-%{pkgname} == %{version}-%{release} +%if 0%{?rhel} && 0%{?rhel} <= 7 +Requires: python-yaml +%else +Requires: python2-yaml +%endif + +%description -n python2-%{pkgname}-plugins-varianter-yaml-to-mux +Can be used to produce multiple test variants with test parameters +defined in a yaml file(s). + + +%package -n python-%{pkgname}-examples +Summary: Avocado Test Framework Example Tests +License: GPLv2 +# documentation does not require main package, but needs to be in lock-step if present +Conflicts: python-%{pkgname} < %{version}-%{release}, python-%{pkgname} > %{version}-%{release} + +%description -n python-%{pkgname}-examples +The set of example tests present in the upstream tree of the Avocado framework. +Some of them are used as functional tests of the framework, others serve as +examples of how to write tests on your own. + + +%prep +%if 0%{?rel_build} +%setup -q -n %{srcname}-%{version} +%else +%setup -q -n %{srcname}-%{commit} +%endif +%patch0 -p1 +%patch1 -p1 +# package plugins-runner-vm requires libvirt-python, but the RPM +# version of libvirt-python does not publish the egg info and this +# causes that dep to be attempted to be installed by pip +sed -e "s/'libvirt-python'//" -i optional_plugins/runner_vm/setup.py +%if 0%{?fedora} >= 29 +sed -e "s/'fabric'/'fabric3'/" -i optional_plugins/runner_remote/setup.py +%endif + +grep -r -l '/usr/bin/env python' . | xargs sed -i 's|/usr/bin/env python|%__python2|' + +%build +%{__python2} setup.py build +pushd optional_plugins/html + %{__python2} setup.py build +popd +pushd optional_plugins/runner_remote + %{__python2} setup.py build +popd +pushd optional_plugins/runner_vm + %{__python2} setup.py build +popd +pushd optional_plugins/runner_docker + %{__python2} setup.py build +popd +%if %{with_resultsdb} +pushd optional_plugins/resultsdb + %{__python2} setup.py build +popd +%endif +pushd optional_plugins/varianter_yaml_to_mux + %{__python2} setup.py build +popd +%{__make} man + +%install +%{__python2} setup.py install --root %{buildroot} --skip-build +pushd optional_plugins/html + %{__python2} setup.py install --root %{buildroot} --skip-build +popd +pushd optional_plugins/runner_remote + %{__python2} setup.py install --root %{buildroot} --skip-build +popd +pushd optional_plugins/runner_vm + %{__python2} setup.py install --root %{buildroot} --skip-build +popd +pushd optional_plugins/runner_docker + %{__python2} setup.py install --root %{buildroot} --skip-build +popd +%if %{with_resultsdb} +pushd optional_plugins/resultsdb + %{__python2} setup.py install --root %{buildroot} --skip-build +popd +%endif +pushd optional_plugins/varianter_yaml_to_mux + %{__python2} setup.py install --root %{buildroot} --skip-build +popd +%{__mv} %{buildroot}%{_bindir}/avocado %{buildroot}%{_bindir}/avocado-%{python2_version} +%{__ln_s} avocado-%{python2_version} %{buildroot}%{_bindir}/avocado-2 +%{__ln_s} avocado-%{python2_version} %{buildroot}%{_bindir}/avocado +%{__mv} %{buildroot}%{_bindir}/avocado-rest-client %{buildroot}%{_bindir}/avocado-rest-client-%{python2_version} +%{__ln_s} avocado-rest-client-%{python2_version} %{buildroot}%{_bindir}/avocado-rest-client-2 +%{__ln_s} avocado-rest-client-%{python2_version} %{buildroot}%{_bindir}/avocado-rest-client +%{__mkdir_p} %{buildroot}%{_mandir}/man1 +%{__install} -m 0644 man/avocado.1 %{buildroot}%{_mandir}/man1/avocado.1 +%{__install} -m 0644 man/avocado-rest-client.1 %{buildroot}%{_mandir}/man1/avocado-rest-client.1 +%{__install} -d -m 0755 %{buildroot}%{_sharedstatedir}/avocado/data +# relocate examples to documentation directory +%{__mkdir_p} %{buildroot}%{_docdir}/avocado +%{__mv} %{buildroot}%{_datadir}/avocado/tests %{buildroot}%{_docdir}/avocado/tests +%{__mv} %{buildroot}%{_datadir}/avocado/wrappers %{buildroot}%{_docdir}/avocado/wrappers +find %{buildroot}%{_docdir}/avocado -type f -name '*.py' -exec %{__chmod} -c -x {} ';' + + +%check +%if 0%{?with_tests} + %{__python2} setup.py develop --user + pushd optional_plugins/html + %{__python2} setup.py develop --user + popd + pushd optional_plugins/runner_remote + %{__python2} setup.py develop --user + popd + pushd optional_plugins/runner_vm + %{__python2} setup.py develop --user + popd + pushd optional_plugins/runner_docker + %{__python2} setup.py develop --user + popd + %if %{with_resultsdb} + pushd optional_plugins/resultsdb + %{__python2} setup.py develop --user + popd + %endif + pushd optional_plugins/varianter_yaml_to_mux + %{__python2} setup.py develop --user + popd + # Package build environments have the least amount of resources + # we have observed so far. Let's avoid tests that require too + # much resources or are time sensitive. + # Also, use of unversioned python is deprecated, so force use of python2 as per + # https://fedoraproject.org/wiki/Changes/Avoid_usr_bin_python_in_RPM_Build + AVOCADO_CHECK_LEVEL=0 UNITTEST_AVOCADO_CMD="$HOME/.local/bin/avocado" %{__python2} selftests/run +%endif + + +%files -n python2-%{pkgname} %license LICENSE -%{_pkgdocdir}/README.rst -%{python3_sitelib}/avocado/ -%{python3_sitelib}/avocado_framework-%{version}-py%{python3_version}.egg-info -%{_bindir}/avocado-%{python3_version} -%{_bindir}/avocado-3 -%{_bindir}/avocado -%{_bindir}/avocado-runner-noop-%{python3_version} -%{_bindir}/avocado-runner-noop-3 -%{_bindir}/avocado-runner-noop -%{_bindir}/avocado-runner-dry-run-%{python3_version} -%{_bindir}/avocado-runner-dry-run-3 -%{_bindir}/avocado-runner-dry-run -%{_bindir}/avocado-runner-exec-test-%{python3_version} -%{_bindir}/avocado-runner-exec-test-3 -%{_bindir}/avocado-runner-exec-test -%{_bindir}/avocado-runner-python-unittest-%{python3_version} -%{_bindir}/avocado-runner-python-unittest-3 -%{_bindir}/avocado-runner-python-unittest -%{_bindir}/avocado-runner-avocado-instrumented-%{python3_version} -%{_bindir}/avocado-runner-avocado-instrumented-3 -%{_bindir}/avocado-runner-avocado-instrumented -%{_bindir}/avocado-runner-tap-%{python3_version} -%{_bindir}/avocado-runner-tap-3 -%{_bindir}/avocado-runner-tap -%{_bindir}/avocado-runner-asset-%{python3_version} -%{_bindir}/avocado-runner-asset-3 -%{_bindir}/avocado-runner-asset -%{_bindir}/avocado-runner-package-%{python3_version} -%{_bindir}/avocado-runner-package-3 -%{_bindir}/avocado-runner-package -%{_bindir}/avocado-runner-pip-%{python3_version} -%{_bindir}/avocado-runner-pip-3 -%{_bindir}/avocado-runner-pip -%{_bindir}/avocado-runner-podman-image-%{python3_version} -%{_bindir}/avocado-runner-podman-image-3 -%{_bindir}/avocado-runner-podman-image -%{_bindir}/avocado-runner-sysinfo-%{python3_version} -%{_bindir}/avocado-runner-sysinfo-3 -%{_bindir}/avocado-runner-sysinfo -%{_bindir}/avocado-runner-vmimage-%{python3_version} -%{_bindir}/avocado-runner-vmimage-3 -%{_bindir}/avocado-runner-vmimage -%{_bindir}/avocado-software-manager-%{python3_version} -%{_bindir}/avocado-software-manager-3 -%{_bindir}/avocado-software-manager -%{_bindir}/avocado-external-runner-%{python3_version} -%{_bindir}/avocado-external-runner-3 -%{_bindir}/avocado-external-runner - - -%package -n python-avocado-common -Summary: Avocado common files -License: GPLv2+ - -%description -n python-avocado-common -Common files (such as configuration) for the Avocado Testing Framework. - -%files -n python-avocado-common -%license LICENSE -%{_mandir}/man1/avocado.1.gz -%dir %{_docdir}/avocado -%dir %{_sharedstatedir}/avocado +%doc README.rst %dir %{_sysconfdir}/avocado +%dir %{_sysconfdir}/avocado/conf.d %dir %{_sysconfdir}/avocado/sysinfo %dir %{_sysconfdir}/avocado/scripts %dir %{_sysconfdir}/avocado/scripts/job %dir %{_sysconfdir}/avocado/scripts/job/pre.d %dir %{_sysconfdir}/avocado/scripts/job/post.d -%dir %{_sharedstatedir}/avocado/data -%dir %{_datarootdir}/avocado -%dir %{_datarootdir}/avocado/schemas -%{_datarootdir}/avocado/schemas/* +%config(noreplace) %{_sysconfdir}/avocado/avocado.conf +%config(noreplace) %{_sysconfdir}/avocado/conf.d/gdb.conf %config(noreplace) %{_sysconfdir}/avocado/sysinfo/commands %config(noreplace) %{_sysconfdir}/avocado/sysinfo/files %config(noreplace) %{_sysconfdir}/avocado/sysinfo/profilers +%{_sysconfdir}/avocado/conf.d/README %{_sysconfdir}/avocado/scripts/job/pre.d/README %{_sysconfdir}/avocado/scripts/job/post.d/README - - -%package -n python3-avocado-plugins-output-html -Summary: Avocado HTML report plugin -License: GPLv2+ and MIT -Requires: python3-avocado == %{version}-%{release} - -%description -n python3-avocado-plugins-output-html -Adds to avocado the ability to generate an HTML report at every job results -directory. It also gives the user the ability to write a report on an -arbitrary filesystem location. - -%files -n python3-avocado-plugins-output-html -%{python3_sitelib}/avocado_result_html/ -%{python3_sitelib}/avocado_framework_plugin_result_html-%{version}-py%{python3_version}.egg-info - - -%if %{with_resultsdb} -%package -n python3-avocado-plugins-resultsdb -Summary: Avocado plugin to propagate job results to ResultsDB -License: GPLv2+ -Requires: python3-avocado == %{version}-%{release} - -%description -n python3-avocado-plugins-resultsdb -Allows Avocado to send job results directly to a ResultsDB -server. - -%files -n python3-avocado-plugins-resultsdb -%{python3_sitelib}/avocado_resultsdb/ -%{python3_sitelib}/avocado_framework_plugin_resultsdb-%{version}-py%{python3_version}.egg-info -%endif -# with_resultsdb - - -%package -n python3-avocado-plugins-varianter-yaml-to-mux -Summary: Avocado plugin to generate variants out of yaml files -License: GPLv2+ -Requires: python3-avocado == %{version}-%{release} - -%description -n python3-avocado-plugins-varianter-yaml-to-mux -Can be used to produce multiple test variants with test parameters -defined in a yaml file(s). - -%files -n python3-avocado-plugins-varianter-yaml-to-mux -%{python3_sitelib}/avocado_varianter_yaml_to_mux/ -%{python3_sitelib}/avocado_framework_plugin_varianter_yaml_to_mux-%{version}-py%{python3_version}.egg-info - - -%package -n python3-avocado-plugins-golang -Summary: Avocado plugin for execution of golang tests -License: GPLv2+ -Requires: python3-avocado == %{version}-%{release} -Requires: golang - -%description -n python3-avocado-plugins-golang -Allows Avocado to list golang tests, and if golang is installed, -also run them. - -%files -n python3-avocado-plugins-golang -%{python3_sitelib}/avocado_golang/ -%{python3_sitelib}/avocado_framework_plugin_golang-%{version}-py%{python3_version}.egg-info -%{_bindir}/avocado-runner-golang - - -%if ! 0%{?rhel} -%package -n python3-avocado-plugins-ansible -Summary: Avocado Ansible Dependency plugin -License: GPLv2+ -Requires: python3-avocado == %{version}-%{release} -Requires: ansible-core - -%description -n python3-avocado-plugins-ansible -Adds to Avocado the ability to use ansible modules as dependecies for -tests. - -%files -n python3-avocado-plugins-ansible -%{python3_sitelib}/avocado_ansible* -%{python3_sitelib}/avocado_framework_plugin_ansible* -%{_bindir}/avocado-runner-ansible-module -%endif - - -%package -n python3-avocado-plugins-varianter-pict -Summary: Varianter with combinatorial capabilities by PICT -License: GPLv2+ -Requires: python3-avocado == %{version}-%{release} - -%description -n python3-avocado-plugins-varianter-pict -This plugin uses a third-party tool to provide variants created by -Pair-Wise algorithms, also known as Combinatorial Independent Testing. - -%files -n python3-avocado-plugins-varianter-pict -%{python3_sitelib}/avocado_varianter_pict/ -%{python3_sitelib}/avocado_framework_plugin_varianter_pict-%{version}-py%{python3_version}.egg-info - - -%package -n python3-avocado-plugins-varianter-cit -Summary: Varianter with Combinatorial Independent Testing capabilities -License: GPLv2+ -Requires: python3-avocado == %{version}-%{release} - -%description -n python3-avocado-plugins-varianter-cit -A varianter plugin that generates variants using Combinatorial -Independent Testing (AKA Pair-Wise) algorithm developed in -collaboration with CVUT Prague. - -%files -n python3-avocado-plugins-varianter-cit -%{python3_sitelib}/avocado_varianter_cit/ -%{python3_sitelib}/avocado_framework_plugin_varianter_cit-%{version}-py%{python3_version}.egg-info - - -%package -n python3-avocado-plugins-result-upload -Summary: Avocado plugin propagate job results to a remote host -License: GPLv2+ -Requires: python3-avocado == %{version}-%{release} - -%description -n python3-avocado-plugins-result-upload -This optional plugin is intended to upload the Avocado Job results to -a dedicated sever. - -%files -n python3-avocado-plugins-result-upload -%{python3_sitelib}/avocado_result_upload/ -%{python3_sitelib}/avocado_framework_plugin_result_upload-%{version}-py%{python3_version}.egg-info - -%package -n python3-avocado-plugins-result-mail -Summary: Avocado Mail Notification for Jobs -License: GPLv2+ -Requires: python3-avocado == %{version}-%{release} - -%description -n python3-avocado-plugins-result-mail -The Mail result plugin enables you to receive email notifications -for job start and completion events within the Avocado testing framework. - -%files -n python3-avocado-plugins-result-mail -%{python3_sitelib}/avocado_result_mail* -%{python3_sitelib}/avocado_framework_plugin_result_mail* - -%if ! 0%{?rhel} -%package -n python3-avocado-plugins-spawner-remote -Summary: Avocado Plugin to spawn tests on a remote host -License: GPLv2+ -Requires: python3-avocado == %{version}-%{release} - -%description -n python3-avocado-plugins-spawner-remote -This optional plugin is intended to spawn tests on a remote host. - -%files -n python3-avocado-plugins-spawner-remote -%{python3_sitelib}/avocado_spawner_remote* -%{python3_sitelib}/avocado_framework_plugin_spawner_remote* -%endif - -%package -n python-avocado-examples -Summary: Avocado Test Framework Example Tests -License: GPLv2+ -# documentation does not require main package, but needs to be in lock-step if present -Conflicts: python3-avocado < %{version}-%{release}, python3-avocado > %{version}-%{release} - -%description -n python-avocado-examples -The set of example tests present in the upstream tree of the Avocado framework. -Some of them are used as functional tests of the framework, others serve as -examples of how to write tests on your own. - -%files -n python-avocado-examples -%license LICENSE +%{python2_sitelib}/avocado/ +%{python2_sitelib}/avocado_framework-%{version}-py%{python2_version}.egg-info +%{_bindir}/avocado-%{python2_version} +%{_bindir}/avocado-2 +%{_bindir}/avocado +%{_bindir}/avocado-rest-client-%{python2_version} +%{_bindir}/avocado-rest-client-2 +%{_bindir}/avocado-rest-client +%{_mandir}/man1/avocado.1.gz +%{_mandir}/man1/avocado-rest-client.1.gz +%dir %{_sharedstatedir}/avocado %dir %{_docdir}/avocado -%{_docdir}/avocado/gdb-prerun-scripts -%{_docdir}/avocado/plugins -%{_docdir}/avocado/tests -%{_docdir}/avocado/varianter_cit -%{_docdir}/avocado/varianter_pict -%{_docdir}/avocado/yaml_to_mux - - -%package -n python-avocado-bash -Summary: Avocado Test Framework Bash Utilities -License: GPLv2+ and GPLv2 -Requires: python-avocado-common == %{version}-%{release} - -%description -n python-avocado-bash -A small set of utilities to interact with Avocado from the Bourne -Again Shell code (and possibly other similar shells). - -%files -n python-avocado-bash -%license LICENSE +%{_docdir}/avocado/avocado.rst +%{_docdir}/avocado/avocado-rest-client.rst %dir %{_libexecdir}/avocado %{_libexecdir}/avocado/avocado-bash-utils %{_libexecdir}/avocado/avocado_debug @@ -537,201 +446,67 @@ Again Shell code (and possibly other similar shells). %{_libexecdir}/avocado/avocado_warn +%files -n python2-%{pkgname}-plugins-output-html +%{python2_sitelib}/avocado_result_html/ +%{python2_sitelib}/avocado_framework_plugin_result_html-%{version}-py%{python2_version}.egg-info + + +%files -n python2-%{pkgname}-plugins-runner-remote +%{python2_sitelib}/avocado_runner_remote/ +%{python2_sitelib}/avocado_framework_plugin_runner_remote-%{version}-py%{python2_version}.egg-info + + +%files -n python2-%{pkgname}-plugins-runner-vm +%{python2_sitelib}/avocado_runner_vm/ +%{python2_sitelib}/avocado_framework_plugin_runner_vm-%{version}-py%{python2_version}.egg-info + + +%files -n python2-%{pkgname}-plugins-runner-docker +%{python2_sitelib}/avocado_runner_docker/ +%{python2_sitelib}/avocado_framework_plugin_runner_docker-%{version}-py%{python2_version}.egg-info + + +%if %{with_resultsdb} +%files -n python2-%{pkgname}-plugins-resultsdb +%{python2_sitelib}/avocado_resultsdb/ +%{python2_sitelib}/avocado_framework_plugin_resultsdb-%{version}-py%{python2_version}.egg-info +%endif + + +%files -n python2-%{pkgname}-plugins-varianter-yaml-to-mux +%{python2_sitelib}/avocado_varianter_yaml_to_mux/ +%{python2_sitelib}/avocado_framework_plugin_varianter_yaml_to_mux-%{version}-py%{python2_version}.egg-info + + +%files -n python-%{pkgname}-examples +%dir %{_docdir}/avocado +%{_docdir}/avocado/tests +%{_docdir}/avocado/wrappers + + %changelog -* Fri Oct 10 2025 Cleber Rosa - 112.0-1 -- Sync with upstream release 112.0 -- Removed python3-elementpath build requirement -- Made the remote spawner a proper sub package -- Packaged JSON schema files -- Introduced new sub package for mail plugin -- Removed the pinning of markupsafe on Fedora 42 and later -- Packaged avocado-runner-pip -- Packaged avocado-runner-vmimage -- Provide requirements for running the functional test - nrunner.py:TaskRunStatusService.test_task_status_service_lost -- Require gcc, gdb and gdb-gdbserver for tests - -* Fri Jul 25 2025 Fedora Release Engineering - 92.3-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Tue Jun 03 2025 Python Maint - 92.3-5 -- Rebuilt for Python 3.14 - -* Mon Jan 20 2025 Miro Hrončok - 92.3-4 -- Loosen the PyYAML version requirement in python3-avocado-plugins-varianter-yaml-to-mux - -* Mon Jan 20 2025 Cleber Rosa - 92.3-3 -- convert remaining licenses to SPDX - -* Sat Jan 18 2025 Fedora Release Engineering - 92.3-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Mon Aug 19 2024 Cleber Rosa - 92.3-1 -- Updated to 92.3 -- Support building and running under Python 3.13 for F42 -- Removed patch from 92.1 as its present in 92.3 - -* Fri Jul 26 2024 Miroslav Suchý - 92.1-8 -- convert license to SPDX - -* Fri Jul 19 2024 Fedora Release Engineering - 92.1-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Fri Jun 07 2024 Python Maint - 92.1-6 -- Rebuilt for Python 3.13 - -* Mon Jan 29 2024 Fedora Release Engineering - 92.1-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Fri Jan 26 2024 Fedora Release Engineering - 92.1-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Sun Jan 21 2024 Fedora Release Engineering - 92.1-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Fri Jul 21 2023 Fedora Release Engineering - 92.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Mon Jul 17 2023 Cleber Rosa - 92.1-1 -- Updated to 92.1 -- Support building and running under Python 3.12 for F39 - -* Wed Jun 14 2023 Python Maint - 92.0-3 -- Rebuilt for Python 3.12 - -* Fri Jan 20 2023 Fedora Release Engineering - 92.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Tue Aug 9 2022 Cleber Rosa - 92.0-1 -- Use selftests/check.py job instead of more limited selftests/run -- Included avocado-runner-sysinfo, avocado-runner-requirement-package, - avocado-runner-requirement-asset and avocado-runner-dry-run and - avocado-runner-golang executables -- Removed avocado-runner-exec executable -- Removed loader_yaml and glib plugin packages - -* Fri Jul 22 2022 Fedora Release Engineering - 82.0-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Tue Jun 21 2022 Python Maint - 82.0-6 -- Rebuilt for Python 3.11 - -* Fri Jan 21 2022 Fedora Release Engineering - 82.0-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Wed Jul 28 2021 Merlin Mathesius - 82.0-4 -- Loosen jinja2 version requirement to fix FTBFS in Rawhide - -* Fri Jul 23 2021 Fedora Release Engineering - 82.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Thu Mar 18 2021 Merlin Mathesius - 82.0-2 -- Drop obsolete packages from BuildRequires -- Generate man page directly using 'rst2man' rather than requiring 'make' -- Adjust PATH to make sure self-tests find internal modules -- Spec file cleanup following package review. - -* Mon Sep 14 2020 Cleber Rosa - 82.0-1 -- Sync with upstream release 82.0. -- Removed python libvirt depedency as the vm runner has been removed - upstream -- Dropped configuration files to sync with upstream which made them - optional and doesn't ship them anymore -- Add on extra character to short commit to sync with upstream - -* Sat Jun 6 2020 Cleber Rosa - 80.0-1 -- Sync with upstream release 80.0. -- Dropped use of custom avocado command for tests -- Do not build deprecated runners - -* Tue May 12 2020 Cleber Rosa - 79.0-1 -- Sync with upstream release 79.0. -- Added Python's user base bin dir to the PATH environment variable - while running tests, so that avocado-runner-* scripts can be found -- Moved comment to new lines closing the conditionals, to avoid - errors from rpmlint and rpmbuild - -* Wed Apr 15 2020 Merlin Mathesius - 78.0-1 -- Sync with upstream release 78.0. - -* Tue Mar 17 2020 Merlin Mathesius - 77.0-1 -- Sync with upstream release 77.0. - -* Mon Mar 09 2020 Merlin Mathesius - 76.0-1 -- Sync with upstream release 76.0. - -* Mon Jan 20 2020 Merlin Mathesius - 75.1-1 -- Sync with upstream release 75.1. - -* Mon Dec 23 2019 Merlin Mathesius - 74.0-1 -- Sync with upstream release 74.0. - -* Wed Nov 27 2019 Merlin Mathesius - 73.0-1 -- Sync with upstream release 73.0. -- Adjustments to build for RHEL 8. - -* Wed Oct 02 2019 Merlin Mathesius - 72.0-1 -- Sync with upstream release 72.0. - -* Wed Aug 28 2019 Merlin Mathesius - 71.0-1 -- Sync with upstream release 71.0. - -* Wed Jun 26 2019 Merlin Mathesius - 70.0-1 -- Sync with upstream release 70.0. -- Drop all Python 2 support from SPEC file. - -* Wed May 22 2019 Merlin Mathesius - 69.0-4 -- pyliblzma is Python 2-only and no longer available as of F31. -- Unversioned executables should now be Python 3. - -* Mon May 20 2019 Merlin Mathesius - 69.0-3 -- Drop Python 2 support from F31 and RHEL8 onward. -- Disable components dependent upon Fiber in Fedora 31 and later, - since avocado is currently incompatible with the new Fiber API. - -* Tue Mar 19 2019 Merlin Mathesius - 69.0-2 +* Tue Mar 19 2019 Merlin Mathesius - 52.1-9 - python2-sphinx is no longer available or needed as of F31 -* Wed Feb 27 2019 Merlin Mathesius - 69.0-1 -- Sync with upstream release 69.0. - -* Fri Feb 22 2019 Merlin Mathesius - 68.0-1 -- Sync with upstream release 68.0. - -* Thu Jan 31 2019 Merlin Mathesius - 67.0-1 -- Sync with upstream release 67.0. -- genisoimage, libcdio, and psmisc added as build deps so iso9660 tests run. -- Replace pystache requirement with jinja2. -- glibc-all-langpacks added as build dep for F30+ so vmimage tests run. -- python2-resultsdb_api package has been removed in F30 so - python2-avocado-plugins-resultsdb was also disabled. - -* Wed Nov 21 2018 Merlin Mathesius - 66.0-1 -- Sync with upstream release 66.0. -- python2-pycdlib package has been removed in F30 as part of +* Tue Feb 05 2019 Merlin Mathesius - 52.1-8 +- python2-resultsdb_api package has been removed in F30 as part of https://fedoraproject.org/wiki/Changes/Mass_Python_2_Package_Removal + so python2-avocado-plugins-resultsdb has also been disabled. -* Thu Oct 04 2018 Merlin Mathesius - 65.0-1 -- Sync with upstream release 65.0. +* Fri Jul 13 2018 Fedora Release Engineering - 52.1-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild -* Tue Aug 28 2018 Merlin Mathesius - 64.0-1 -- Sync with upstream release 64.0. - -* Thu Jul 26 2018 Merlin Mathesius - 63.0-2 -- Added missing python[2]-enum34 requirement. - -* Mon Jul 23 2018 Merlin Mathesius - 63.0-1 -- Sync with upstream release 63.0. (BZ#1602175) - Include upstream patches needed to build for Rawhide. - -* Wed Jun 13 2018 Merlin Mathesius - 62.0-1 -- Sync with upstream release 62.0. (BZ#1590572) +* Fri Jun 08 2018 Merlin Mathesius - 52.1-6 - Correct libvirt dependency for EPEL7/RHEL7 -* Thu May 17 2018 Merlin Mathesius - 61.0-1 -- Sync with upstream release 61.0. -- Packaging updates for Python 3. -- Reorganize SPEC file. +* Mon Jun 04 2018 Merlin Mathesius - 52.1-5 +- Conditionalize python2 dependencies for cross-release compatibility of SPEC + +* Mon May 14 2018 Merlin Mathesius - 52.1-4 +- Dependency fabric has been renamed to python2-fabric3 + +* Mon May 14 2018 Merlin Mathesius - 52.1-3 +- correct python_provide argument typo for varianter-yaml-to-mux plugin * Mon Apr 9 2018 Cleber Rosa - 52.1-2 - Added Fedora CI tests diff --git a/sources b/sources index 6494afc..54aeac2 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (avocado-112.0.tar.gz) = 1872eda730f5cd28f0562732464ce14b2c7731cedb298fcc4b093a04235d26cc5e3db7f92c3ae3edcd6104ad2db4fce66fa7a6148da754e4bdb8120fa12a75a3 +SHA512 (avocado-52.1.tar.gz) = fb97ea6056700f57f34e8e4ce0c27774c386d646aaffc7da2abb8d0a797cff4448934789ffaf81da1592fceae1bb464da2b5dde000730c4f417b03552a432c6c diff --git a/tests/gdbtest.py b/tests/gdbtest.py index c0cdc55..d814fa5 100755 --- a/tests/gdbtest.py +++ b/tests/gdbtest.py @@ -1,7 +1,14 @@ +#!/usr/bin/env python + import os +from six.moves import xrange as range + from avocado import Test -from avocado.utils import gdb, genio, process +from avocado import main +from avocado.utils import gdb +from avocado.utils import genio +from avocado.utils import process class GdbTest(Test): @@ -25,22 +32,17 @@ class GdbTest(Test): "-auto-debug-it"] def setUp(self): - self.return99_binary_path = os.path.join(self.teststmpdir, 'return99') - if not os.path.exists(self.return99_binary_path): - return99_source_path = self.get_data('return99.c') - if return99_source_path is None: - self.cancel('Test is missing data file "return99.c"') - process.system(f'gcc -O0 -g {return99_source_path} -o {self.return99_binary_path}') - - self.segfault_binary_path = os.path.join(self.teststmpdir, 'segfault') - if not os.path.exists(self.segfault_binary_path): - segfault_source_path = self.get_data('segfault.c') - if segfault_source_path is None: - self.cancel('Test is missing data file "segfault.c"') - process.system(f'gcc -O0 -g {segfault_source_path} -o {self.segfault_binary_path}') + return99_source_path = os.path.join(self.datadir, 'return99.c') + segfault_source_path = os.path.join(self.datadir, 'segfault.c') + self.return99_binary_path = os.path.join(self.outputdir, 'return99') + process.system('gcc -O0 -g %s -o %s' % (return99_source_path, + self.return99_binary_path)) + self.segfault_binary_path = os.path.join(self.outputdir, 'segfault') + process.system('gcc -O0 -g %s -o %s' % (segfault_source_path, + self.segfault_binary_path)) @staticmethod - def is_process_alive(process): # pylint: disable=W0621 + def is_process_alive(process): """ Checks if a process is still alive @@ -71,14 +73,14 @@ class GdbTest(Test): g = gdb.GDB() self.log.info("Testing existing (valid) GDB commands using raw commands") for cmd in self.VALID_CMDS: - info_cmd = f"-info-gdb-mi-command {cmd[1:]}" + info_cmd = "-info-gdb-mi-command %s" % cmd[1:] r = g.cmd(info_cmd) self.assertEqual(r.result.result.command.exists, 'true') self.log.info("Testing non-existing (invalid) GDB commands using raw " "commands") for cmd in self.INVALID_CMDS: - info_cmd = f"-info-gdb-mi-command {cmd[1:]}" + info_cmd = "-info-gdb-mi-command %s" % cmd[1:] r = g.cmd(info_cmd) self.assertEqual(r.result.result.command.exists, 'false') @@ -103,7 +105,7 @@ class GdbTest(Test): self.log.info("Testing that GDB loads a file and sets a breakpoint") g = gdb.GDB() - file_cmd = f"-file-exec-and-symbols {self.return99_binary_path}" + file_cmd = "-file-exec-and-symbols %s" % self.return99_binary_path r = g.cmd(file_cmd) self.assertEqual(r.result.class_, 'done') @@ -143,7 +145,7 @@ class GdbTest(Test): self.log.info("Testing that a core dump will be generated") g = gdb.GDB() - file_cmd = f"-file-exec-and-symbols {self.segfault_binary_path}" + file_cmd = "-file-exec-and-symbols %s" % self.segfault_binary_path r = g.cmd(file_cmd) self.assertEqual(r.result.class_, 'done') @@ -154,12 +156,12 @@ class GdbTest(Test): other_messages = g.read_until_break() core_path = None for msg in other_messages: - parsed_msg = gdb.parse_mi(msg.decode()) + parsed_msg = gdb.parse_mi(msg) if (hasattr(parsed_msg, 'class_') and (parsed_msg.class_ == 'stopped') and (parsed_msg.result.signal_name == 'SIGSEGV')): - core_path = f"{self.segfault_binary_path}.core" - gcore_cmd = f'gcore {core_path}' + core_path = "%s.core" % self.segfault_binary_path + gcore_cmd = 'gcore %s' % core_path gcore_cmd = gdb.encode_mi_cli(gcore_cmd) r = g.cmd(gcore_cmd) self.assertEqual(r.result.class_, 'done') @@ -189,14 +191,14 @@ class GdbTest(Test): # Do 100 cycle of target (kind of connects) and disconnects for _ in range(0, 100): - cmd = f'-target-select extended-remote :{s.port}' + cmd = '-target-select extended-remote :%s' % s.port r = g.cmd(cmd) self.assertEqual(r.result.class_, 'connected') r = g.cmd('-target-disconnect') self.assertEqual(r.result.class_, 'done') # manual server shutdown - cmd = f'-target-select extended-remote :{s.port}' + cmd = '-target-select extended-remote :%s' % s.port r = g.cmd(cmd) self.assertEqual(r.result.class_, 'connected') r = g.cli_cmd('monitor exit') @@ -232,15 +234,15 @@ class GdbTest(Test): s = gdb.GDBServer() g = gdb.GDB() - cmd = f'-file-exec-and-symbols {self.return99_binary_path}' + cmd = '-file-exec-and-symbols %s' % self.return99_binary_path r = g.cmd(cmd) self.assertEqual(r.result.class_, 'done') - cmd = f'set remote exec-file {self.return99_binary_path}' + cmd = 'set remote exec-file %s' % self.return99_binary_path r = g.cmd(cmd) self.assertEqual(r.result.class_, 'done') - cmd = f"-break-insert {'main'}" + cmd = "-break-insert %s" % 'main' r = g.cmd(cmd) self.assertEqual(r.result.class_, 'done') @@ -248,7 +250,7 @@ class GdbTest(Test): other_messages = g.read_until_break() for msg in other_messages: - parsed_msg = gdb.parse_mi(msg.decode()) + parsed_msg = gdb.parse_mi(msg) if (hasattr(parsed_msg, 'class_') and parsed_msg.class_ == 'stopped' and parsed_msg.result.reason == 'breakpoint-hit'): @@ -276,8 +278,7 @@ class GdbTest(Test): c1 = gdb.GDB() c1.connect(s.port) c2 = gdb.GDB() - with self.assertRaises(gdb.UnexpectedResponseError): - c2.connect(s.port) + self.assertRaises(ValueError, c2.connect, s.port) s.exit() def test_server_exit(self): @@ -309,6 +310,43 @@ class GdbTest(Test): server_instances[i].exit() self.assertFalse(self.is_process_alive(server_instances[i].process)) + def test_interactive(self): + """ + Tests avocado's GDB plugin features + + If GDB command line options are given, `--gdb-run-bin=return99` for + this particular test, the test will stop at binary main() function. + """ + self.log.info('Testing GDB interactivity') + process.run(self.return99_binary_path, ignore_status=True) + + def test_interactive_args(self): + """ + Tests avocado's GDB plugin features with an executable and args + + If GDB command line options are given, `--gdb-run-bin=return99` for + this particular test, the test will stop at binary main() function. + + This test uses `process.run()` without an `ignore_status` parameter + """ + self.log.info('Testing GDB interactivity with arguments') + result = process.run("%s 0" % self.return99_binary_path) + self.assertEqual(result.exit_status, 0) + + def test_exit_status(self): + """ + Tests avocado's GDB plugin features + + If GDB command line options are given, `--gdb-run-bin=return99` for + this particular test, the test will stop at binary main() function. + """ + self.log.info('Testing process exit statuses') + for arg, exp in [(-1, 255), (8, 8)]: + self.log.info('Expecting exit status "%s"', exp) + cmd = "%s %s" % (self.return99_binary_path, arg) + result = process.run(cmd, ignore_status=True) + self.assertEqual(result.exit_status, exp) + def test_server_stderr(self): self.log.info('Testing server stderr collection') s = gdb.GDBServer() @@ -316,7 +354,7 @@ class GdbTest(Test): self.assertTrue(os.path.exists(s.stderr_path)) stderr_lines = genio.read_all_lines(s.stderr_path) - listening_line = f"Listening on port {s.port}" + listening_line = "Listening on port %s" % s.port self.assertIn(listening_line, stderr_lines) def test_server_stdout(self): @@ -334,14 +372,28 @@ class GdbTest(Test): stdout_lines = genio.read_all_lines(s.stdout_path) self.assertIn("return 99", stdout_lines) - @staticmethod - def test_remote(): + def test_interactive_stdout(self): + """ + Tests avocado's GDB plugin features + + If GDB command line options are given, `--gdb-run-bin=return99` for + this particular test, the test will stop at binary main() function. + """ + self.log.info('Testing GDB interactivity') + result = process.run(self.return99_binary_path, ignore_status=True) + self.assertIn("return 99\n", result.stdout) + + def test_remote(self): """ Tests GDBRemote interaction with a GDBServer """ s = gdb.GDBServer() r = gdb.GDBRemote('127.0.0.1', s.port) r.connect() - r.cmd(b"qSupported") - r.cmd(b"qfThreadInfo") + r.cmd("qSupported") + r.cmd("qfThreadInfo") s.exit() + + +if __name__ == '__main__': + main()