diff --git a/.gitignore b/.gitignore index 00ef136..5c17832 100644 --- a/.gitignore +++ b/.gitignore @@ -16,20 +16,5 @@ /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 +/avocado-69.1.tar.gz +/avocado-69.2.tar.gz diff --git a/avocado-69.1-selftest.patch b/avocado-69.1-selftest.patch new file mode 100644 index 0000000..27992ae --- /dev/null +++ b/avocado-69.1-selftest.patch @@ -0,0 +1,11 @@ +diff -ru ../avocado-69.1.ORIG/selftests/unit/test_loader.py ./selftests/unit/test_loader.py +--- ../avocado-69.1.ORIG/selftests/unit/test_loader.py 2019-06-12 13:39:15.000000000 -0500 ++++ ./selftests/unit/test_loader.py 2019-09-11 15:56:24.289042537 -0500 +@@ -449,6 +449,7 @@ + ('Test10', 'selftests/.data/loader_instrumented/imports.py:Test10.test')] + self._check_discovery(exps, tests) + ++ @unittest.skip("Disabling unreliable test") + def test_dont_detect_non_avocado(self): + path = os.path.join(os.path.dirname(os.path.dirname(__file__)), + '.data', 'loader_instrumented', 'dont_detect_non_avocado.py') diff --git a/python-avocado.spec b/python-avocado.spec index 8dd8cf4..add3cee 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 @@ -6,89 +9,179 @@ # 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 489fee786c7b69cf0fa12f75be0595cb8bae5887 %endif %if ! 0%{?commit_date:1} - %global commit_date 20251010 + %global commit_date 20190917 %endif - %global shortcommit %(c=%{commit};echo ${c:0:9}) + %global shortcommit %(c=%{commit};echo ${c:0:8}) %global gitrel .%{commit_date}git%{shortcommit} %global gitref %{commit} - %global gittar avocado-%{shortcommit}.tar.gz + %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 - -# Only Fedora 36 and later have a suitable python3-resutlsdb_api -# package -%if 0%{?fedora} >= 36 -%global with_resultsdb 1 -%else -%global with_resultsdb 0 +# 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 -Name: python-avocado -Version: 112.0 +%if 0%{?fedora} > 30 || 0%{?rhel} > 7 + %bcond_with python2 +%else + %bcond_without python2 +%endif +%if 0%{?fedora} || 0%{?rhel} > 7 + %bcond_without python3 +%else + %bcond_with python3 +%endif + +# Avocado is currently incompatible with the Fabric API in Fedora 31 and later +# https://github.com/avocado-framework/avocado/issues/3125 +%if 0%{?fedora} >= 31 +%global with_fabric 0 +%else +%global with_fabric 1 +%endif + +# Python 3 version of Fabric package is new starting with Fedora 29 +%if %{with python3} && 0%{?fedora} >= 29 +%global with_python3_fabric 1 +%else +%global with_python3_fabric 0 +%endif + +# Python2 binary packages are being removed +# See https://fedoraproject.org/wiki/Changes/Mass_Python_2_Package_Removal +# python2-resultsdb_api package has been removed in F30 +%if %{with python2} && ( (0%{?fedora} && 0%{?fedora} <= 29) || (0%{?rhel} && 0%{?rhel} <= 7) ) +%global with_python2_resultsdb 1 +%else +%global with_python2_resultsdb 0 +%endif + +Name: python-%{pkgname} +Version: 69.2 Release: 1%{?gitrel}%{?dist} Summary: Framework with tools and libraries for Automated Testing +Group: Development/Tools # 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 # 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/ +Source0: https://github.com/avocado-framework/%{srcname}/archive/%{gitref}.tar.gz#/%{gittar} +Patch0: avocado-69.1-selftest.patch BuildArch: noarch -BuildRequires: kmod BuildRequires: procps-ng +BuildRequires: kmod + +%if %{with python2} +BuildRequires: python2-aexpect +BuildRequires: python2-devel +BuildRequires: python2-docutils +BuildRequires: python2-mock +BuildRequires: python2-psutil +BuildRequires: python2-requests +BuildRequires: python2-setuptools +BuildRequires: python2-six +%if 0%{?fedora} && 0%{?fedora} <= 30 +# python2-sphinx is no longer available or needed as of F31 +BuildRequires: python2-sphinx +%endif +%if 0%{?fedora} > 27 || 0%{?rhel} > 7 +BuildRequires: python2-jinja2 +%else +BuildRequires: python-jinja2 +%endif +%if %{with_fabric} +%if 0%{?fedora} >= 29 +BuildRequires: python2-fabric3 +%else +BuildRequires: fabric +%endif +%endif # with_fabric +%if 0%{?fedora} || 0%{?rhel} > 7 +BuildRequires: python2-enum34 +BuildRequires: python2-lxml +BuildRequires: python2-stevedore +%else +BuildRequires: python-enum34 +BuildRequires: python-lxml +BuildRequires: python-stevedore +%endif +%if 0%{?fedora} && 0%{?fedora} <= 29 +# Python2 binary packages are being removed +# See https://fedoraproject.org/wiki/Changes/Mass_Python_2_Package_Removal +BuildRequires: python2-pycdlib +%endif +%if %{with_python2_resultsdb} +BuildRequires: python2-resultsdb_api +%endif +%endif + +%if %{with python3} +BuildRequires: python3-aexpect BuildRequires: python3-devel BuildRequires: python3-docutils BuildRequires: python3-jinja2 BuildRequires: python3-lxml +BuildRequires: python3-mock BuildRequires: python3-psutil -BuildRequires: python3-setuptools -%if ! 0%{?rhel} -BuildRequires: python-aexpect -%endif -%if %{with_resultsdb} -BuildRequires: python3-resultsdb_api BuildRequires: python3-pycdlib +BuildRequires: python3-requests +BuildRequires: python3-resultsdb_api +BuildRequires: python3-setuptools +BuildRequires: python3-six +BuildRequires: python3-sphinx +BuildRequires: python3-stevedore +%if %{with_fabric} +%if %{with_python3_fabric} +BuildRequires: python3-fabric3 +%endif +%endif # with_fabric %endif -%if %{with tests} -BuildRequires: python3-jsonschema -%if ! 0%{?rhel} >= 9 +%if 0%{?with_tests} BuildRequires: genisoimage -%endif BuildRequires: libcdio -BuildRequires: psmisc -%if ! 0%{?rhel} BuildRequires: perl-Test-Harness -BuildRequires: python3-xmlschema -BuildRequires: ansible-core -%endif +BuildRequires: psmisc +%if 0%{?fedora} >= 30 || 0%{?rhel} > 7 BuildRequires: glibc-all-langpacks +%endif +%if %{with python2} +%if 0%{?fedora} >= 27 || 0%{?rhel} > 7 +BuildRequires: python2-libvirt +BuildRequires: python2-netifaces +BuildRequires: python2-yaml +%else +BuildRequires: libvirt-python +BuildRequires: python-netifaces +BuildRequires: python-yaml +%endif +%endif +%if %{with python3} BuildRequires: python3-netifaces BuildRequires: python3-yaml -BuildRequires: nmap-ncat -BuildRequires: gcc -BuildRequires: gdb -BuildRequires: gdb-gdbserver +%if 0%{?fedora} >= 27 || 0%{?rhel} > 7 +BuildRequires: python3-libvirt +%else +BuildRequires: libvirt-python3 +%endif +%endif %endif -# with tests %description Avocado is a set of tools and libraries (what people call @@ -96,439 +189,980 @@ 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 +%setup -q -n %{srcname}-%{gitref} +%patch0 -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%{?rhel} && 0%{?rhel} <= 7 +sed -e "s/'six>=1.10.0'/'six>=1.9.0'/" -i setup.py +sed -e "s/'PyYAML>=4.2b2'/'PyYAML>=3.10'/" -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 +%if 0%{?fedora} && 0%{?fedora} < 29 +sed -e "s/'PyYAML>=4.2b2'/'PyYAML>=3.12'/" -i optional_plugins/varianter_yaml_to_mux/setup.py %endif %build -%py3_build -pushd optional_plugins/html - %py3_build -popd -%if %{with_resultsdb} -pushd optional_plugins/resultsdb - %py3_build -popd +%if %{with python2} +%py2_build %endif -pushd optional_plugins/varianter_yaml_to_mux +%if %{with python3} +%py3_build +%endif +pushd optional_plugins/html + %if %{with python2} + %py2_build + %endif + %if %{with python3} %py3_build + %endif +popd +pushd optional_plugins/runner_remote +%if %{with_fabric} + %if %{with python2} + %py2_build + %endif + %if %{with_python3_fabric} + %py3_build + %endif +%endif # with_fabric +popd +pushd optional_plugins/runner_vm +%if %{with_fabric} + %if %{with python2} + %py2_build + %endif + %if %{with_python3_fabric} + %py3_build + %endif +%endif # with_fabric +popd +pushd optional_plugins/runner_docker +%if %{with_fabric} + %if %{with python2} + %py2_build + %endif + %if %{with_python3_fabric} + %py3_build + %endif +%endif # with_fabric +popd +pushd optional_plugins/resultsdb + %if %{with_python2_resultsdb} + %py2_build + %endif + %if %{with python3} + %py3_build + %endif +popd +pushd optional_plugins/varianter_yaml_to_mux + %if %{with python2} + %py2_build + %endif + %if %{with python3} + %py3_build + %endif +popd +pushd optional_plugins/loader_yaml + %if %{with python2} + %py2_build + %endif + %if %{with python3} + %py3_build + %endif popd pushd optional_plugins/golang + %if %{with python2} + %py2_build + %endif + %if %{with python3} %py3_build + %endif popd -%if ! 0%{?rhel} -pushd optional_plugins/ansible - %py3_build -popd -%endif pushd optional_plugins/varianter_pict + %if %{with python2} + %py2_build + %endif + %if %{with python3} %py3_build + %endif popd pushd optional_plugins/varianter_cit + %if %{with python2} + %py2_build + %endif + %if %{with python3} %py3_build + %endif popd pushd optional_plugins/result_upload + %if %{with python2} + %py2_build + %endif + %if %{with python3} %py3_build + %endif popd -pushd optional_plugins/mail +pushd optional_plugins/glib + %if %{with python2} + %py2_build + %endif + %if %{with python3} %py3_build + %endif popd -%if ! 0%{?rhel} -pushd optional_plugins/spawner_remote - %py3_build -popd -%endif -rst2man man/avocado.rst man/avocado.1 +%{__make} man %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 +%if %{with python2} +%py2_install +%{__mv} %{buildroot}%{_bindir}/avocado %{buildroot}%{_bindir}/avocado-%{python2_version} +%{__ln_s} avocado-%{python2_version} %{buildroot}%{_bindir}/avocado-2 +%{__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 # configuration is held at /etc/avocado only and part of the # python-avocado-common package -rm -rf %{buildroot}%{python3_sitelib}/avocado/etc +%{__rm} -rf %{buildroot}%{python2_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 +%{__rm} -rf %{buildroot}%{python2_sitelib}/avocado/libexec %endif -pushd optional_plugins/varianter_yaml_to_mux +%if %{with python3} +%py3_install +%{__mv} %{buildroot}%{_bindir}/avocado %{buildroot}%{_bindir}/avocado-%{python3_version} +%{__ln_s} avocado-%{python3_version} %{buildroot}%{_bindir}/avocado-3 +%{__mv} %{buildroot}%{_bindir}/avocado-rest-client %{buildroot}%{_bindir}/avocado-rest-client-%{python3_version} +%{__ln_s} avocado-rest-client-%{python3_version} %{buildroot}%{_bindir}/avocado-rest-client-3 +# 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 +%endif +%if %{with python3} +# Unversioned executables should now be the Python 3 version if shipping with Python 3 +# https://docs.fedoraproject.org/en-US/packaging-guidelines/Python_Appendix/ +%{__ln_s} avocado-%{python3_version} %{buildroot}%{_bindir}/avocado +%{__ln_s} avocado-rest-client-%{python3_version} %{buildroot}%{_bindir}/avocado-rest-client +%else +%{__ln_s} avocado-%{python2_version} %{buildroot}%{_bindir}/avocado +%{__ln_s} avocado-rest-client-%{python2_version} %{buildroot}%{_bindir}/avocado-rest-client +%endif +pushd optional_plugins/html + %if %{with python2} + %py2_install + %endif + %if %{with python3} %py3_install + %endif +popd +pushd optional_plugins/runner_remote +%if %{with_fabric} + %if %{with python2} + %py2_install + %endif + %if %{with_python3_fabric} + %py3_install + %endif +%endif # with_fabric +popd +pushd optional_plugins/runner_vm +%if %{with_fabric} + %if %{with python2} + %py2_install + %endif + %if %{with_python3_fabric} + %py3_install + %endif +%endif # with_fabric +popd +pushd optional_plugins/runner_docker +%if %{with_fabric} + %if %{with python2} + %py2_install + %endif + %if %{with_python3_fabric} + %py3_install + %endif +%endif # with_fabric +popd +pushd optional_plugins/resultsdb + %if %{with_python2_resultsdb} + %py2_install + %endif + %if %{with python3} + %py3_install + %endif +popd +pushd optional_plugins/varianter_yaml_to_mux + %if %{with python2} + %py2_install + %endif + %if %{with python3} + %py3_install + %endif +popd +pushd optional_plugins/loader_yaml + %if %{with python2} + %py2_install + %endif + %if %{with python3} + %py3_install + %endif popd pushd optional_plugins/golang + %if %{with python2} + %py2_install + %endif + %if %{with python3} %py3_install + %endif popd -%if ! 0%{?rhel} -pushd optional_plugins/ansible - %py3_install -popd -%endif pushd optional_plugins/varianter_pict + %if %{with python2} + %py2_install + %endif + %if %{with python3} %py3_install + %endif popd pushd optional_plugins/varianter_cit + %if %{with python2} + %py2_install + %endif + %if %{with python3} %py3_install + %endif popd pushd optional_plugins/result_upload + %if %{with python2} + %py2_install + %endif + %if %{with python3} %py3_install + %endif popd -pushd optional_plugins/mail +pushd optional_plugins/glib + %if %{with python2} + %py2_install + %endif + %if %{with python3} %py3_install + %endif 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 +%if %{with python2} +%{__rm} -rf %{buildroot}%{python2_sitelib}/tests +%endif +%if %{with python3} +%{__rm} -rf %{buildroot}%{python3_sitelib}/tests +%endif +%{__mkdir} -p %{buildroot}%{_sysconfdir}/avocado +%{__cp} avocado/etc/avocado/avocado.conf %{buildroot}%{_sysconfdir}/avocado/avocado.conf +%{__cp} -r avocado/etc/avocado/conf.d %{buildroot}%{_sysconfdir}/avocado/conf.d +%{__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 +%{__install} -m 0644 man/avocado-rest-client.1 %{buildroot}%{_mandir}/man1/avocado-rest-client.1 +%{__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 {} ';' +%{__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/wrappers %{buildroot}%{_docdir}/avocado/wrappers +%{__cp} -r examples/yaml_to_mux %{buildroot}%{_docdir}/avocado/yaml_to_mux +%{__cp} -r examples/yaml_to_mux_loader %{buildroot}%{_docdir}/avocado/yaml_to_mux_loader +find %{buildroot}%{_docdir}/avocado -type f -name '*.py' -exec %{__chmod} -c -x {} ';' + -%if %{with tests} %check +%if 0%{?with_tests} + %if %{with python2} + %{__python2} setup.py develop --user + pushd optional_plugins/html + %{__python2} setup.py develop --user + popd + %if %{with_fabric} + 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 + %endif # with_fabric + %if %{with_python2_resultsdb} + pushd optional_plugins/resultsdb + %{__python2} setup.py develop --user + popd + %endif # with_python2_resultsdb + pushd optional_plugins/varianter_yaml_to_mux + %{__python2} setup.py develop --user + popd + pushd optional_plugins/loader_yaml + %{__python2} setup.py develop --user + popd + pushd optional_plugins/golang + %{__python2} setup.py develop --user + popd + pushd optional_plugins/varianter_pict + %{__python2} setup.py develop --user + popd + pushd optional_plugins/varianter_cit + %{__python2} setup.py develop --user + popd + pushd optional_plugins/result_upload + %{__python2} setup.py develop --user + popd + pushd optional_plugins/glib + %{__python2} setup.py develop --user + popd # 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 + # UNITTEST_AVOCADO_CMD: the "avocado" command to be run during + # unittests needs to be a Python specific one on Fedora >= 28. Let's + # use the one that was setup in the source tree by the "setup.py + # develop --user" step and is guaranteed to be version specific. + USER_BASE=`%{__python2} -m site --user-base` + LANG=en_US.UTF-8 AVOCADO_CHECK_LEVEL=0 UNITTEST_AVOCADO_CMD=$USER_BASE/bin/avocado %{__python2} selftests/run + %endif + + %if %{with python3} + %{__python3} setup.py develop --user + pushd optional_plugins/html + %{__python3} setup.py develop --user + popd + %if %{with_fabric} + %if %{with_python3_fabric} + pushd optional_plugins/runner_remote + %{__python3} setup.py develop --user + popd + pushd optional_plugins/runner_vm + %{__python3} setup.py develop --user + popd + pushd optional_plugins/runner_docker + %{__python3} setup.py develop --user + popd + %endif # with_python3_fabric + %endif # with_fabric + pushd optional_plugins/resultsdb + %{__python3} setup.py develop --user + popd + pushd optional_plugins/varianter_yaml_to_mux + %{__python3} setup.py develop --user + popd + pushd optional_plugins/loader_yaml + %{__python3} setup.py develop --user + popd + pushd optional_plugins/golang + %{__python3} setup.py develop --user + popd + pushd optional_plugins/varianter_pict + %{__python3} setup.py develop --user + popd + pushd optional_plugins/varianter_cit + %{__python3} setup.py develop --user + popd + pushd optional_plugins/result_upload + %{__python3} setup.py develop --user + popd + pushd optional_plugins/glib + %{__python3} setup.py develop --user + popd + USER_BASE=`%{__python3} -m site --user-base` + LANG=en_US.UTF-8 AVOCADO_CHECK_LEVEL=0 UNITTEST_AVOCADO_CMD=$USER_BASE/bin/avocado %{__python3} selftests/run + %endif %endif -%package -n python3-avocado +%if %{with python2} +%package -n python2-%{pkgname} Summary: %{summary} -Requires: python-avocado-common == %{version}-%{release} +License: GPLv2 and MIT +%{?python_provide:%python_provide python2-%{pkgname}} +Requires: python-%{pkgname}-common == %{version}-%{release} Requires: gdb Requires: gdb-gdbserver Requires: procps-ng -%if ! 0%{?rhel} -Requires: python3-pycdlib +Requires: python2 +Requires: python2-requests +Requires: python2-setuptools +Requires: python2-six +%if 0%{?fedora} || 0%{?rhel} > 7 +Requires: python2-enum34 +Requires: python2-stevedore +%else +Requires: python-enum34 +Requires: python-stevedore +%endif +%if 0%{?fedora} && 0%{?fedora} <= 29 +# Python2 binary packages are being removed +# See https://fedoraproject.org/wiki/Changes/Mass_Python_2_Package_Removal +Requires: python2-pycdlib +%endif +%if 0%{?fedora} && 0%{?fedora} <= 30 +# More Python2 binary packages removed +Requires: pyliblzma %endif -%description -n python3-avocado +%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 +%files -n python2-%{pkgname} %license LICENSE -%{_pkgdocdir}/README.rst +%doc README.rst +%{python2_sitelib}/avocado/ +%{python2_sitelib}/avocado_framework-%{version}-py%{python2_version}.egg-info +%{_bindir}/avocado-%{python2_version} +%{_bindir}/avocado-2 +%{_bindir}/avocado-rest-client-%{python2_version} +%{_bindir}/avocado-rest-client-2 +%if %{without python3} +%{_bindir}/avocado +%{_bindir}/avocado-rest-client +%endif +%endif + +%if %{with python3} +%package -n python3-%{pkgname} +Summary: %{summary} +License: GPLv2 and MIT +%{?python_provide:%python_provide python3-%{pkgname}} +Requires: python-%{pkgname}-common == %{version}-%{release} +Requires: gdb +Requires: gdb-gdbserver +Requires: procps-ng +Requires: python3 +Requires: python3-pycdlib +Requires: python3-requests +Requires: python3-setuptools +Requires: python3-six +Requires: python3-stevedore + +%description -n python3-%{pkgname} +Avocado is a set of tools and libraries (what people call +these days a framework) to perform automated testing. + +%files -n python3-%{pkgname} +%license LICENSE +%doc 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 +%{_bindir}/avocado-rest-client-%{python3_version} +%{_bindir}/avocado-rest-client-3 +%{_bindir}/avocado-rest-client +%endif -%package -n python-avocado-common +%package -n python-%{pkgname}-common Summary: Avocado common files -License: GPLv2+ -%description -n python-avocado-common +%description -n python-%{pkgname}-common Common files (such as configuration) for the Avocado Testing Framework. -%files -n python-avocado-common -%license LICENSE +%files -n python-%{pkgname}-common %{_mandir}/man1/avocado.1.gz +%{_mandir}/man1/avocado-rest-client.1.gz %dir %{_docdir}/avocado %dir %{_sharedstatedir}/avocado %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/conf.d/jobscripts.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 +%if %{with python2} +%package -n python2-%{pkgname}-plugins-output-html Summary: Avocado HTML report plugin -License: GPLv2+ and MIT -Requires: python3-avocado == %{version}-%{release} +%{?python_provide:%python_provide python2-%{pkgname}-plugins-output-html} +Requires: python2-%{pkgname} == %{version}-%{release} +%if 0%{?fedora} > 27 || 0%{?rhel} > 7 +Requires: python2-jinja2 +%else +Requires: python-jinja2 +%endif -%description -n python3-avocado-plugins-output-html +%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. -%files -n python3-avocado-plugins-output-html +%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 +%endif + +%if %{with python3} +%package -n python3-%{pkgname}-plugins-output-html +Summary: Avocado HTML report plugin +%{?python_provide:%python_provide python3-%{pkgname}-plugins-output-html} +Requires: python3-%{pkgname} == %{version}-%{release} +Requires: python3-jinja2 + +%description -n python3-%{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. + +%files -n python3-%{pkgname}-plugins-output-html %{python3_sitelib}/avocado_result_html/ %{python3_sitelib}/avocado_framework_plugin_result_html-%{version}-py%{python3_version}.egg-info +%endif -%if %{with_resultsdb} -%package -n python3-avocado-plugins-resultsdb +%if %{with_fabric} +%if %{with python2} +%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} >= 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. + +%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 +%endif + +%if %{with_python3_fabric} +%package -n python3-%{pkgname}-plugins-runner-remote +Summary: Avocado Runner for Remote Execution +%{?python_provide:%python_provide python3-%{pkgname}-plugins-runner-remote} +Requires: python3-%{pkgname} == %{version}-%{release} +Requires: python3-fabric3 + +%description -n python3-%{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. + +%files -n python3-%{pkgname}-plugins-runner-remote +%{python3_sitelib}/avocado_runner_remote/ +%{python3_sitelib}/avocado_framework_plugin_runner_remote-%{version}-py%{python3_version}.egg-info +%endif +%endif # with_fabric + + +%if %{with_fabric} +%if %{with python2} +%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. + +%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 +%endif + +%if %{with_python3_fabric} +%package -n python3-%{pkgname}-plugins-runner-vm +Summary: Avocado Runner for libvirt VM Execution +%{?python_provide:%python_provide python3-%{pkgname}-plugins-runner-vm} +Requires: python3-%{pkgname} == %{version}-%{release} +Requires: python3-%{pkgname}-plugins-runner-remote == %{version}-%{release} +Requires: python3-libvirt + +%description -n python3-%{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. + +%files -n python3-%{pkgname}-plugins-runner-vm +%{python3_sitelib}/avocado_runner_vm/ +%{python3_sitelib}/avocado_framework_plugin_runner_vm-%{version}-py%{python3_version}.egg-info +%endif +%endif # with_fabric + + +%if %{with_fabric} +%if %{with python2} +%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. + +%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 +%endif + +%if %{with_python3_fabric} +%package -n python3-%{pkgname}-plugins-runner-docker +Summary: Avocado Runner for Execution on Docker Containers +%{?python_provide:%python_provide python3-%{pkgname}-plugins-runner-docker} +Requires: python3-%{pkgname} == %{version}-%{release} +Requires: python3-%{pkgname}-plugins-runner-remote == %{version}-%{release} +Requires: python3-aexpect + +%description -n python3-%{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. + +%files -n python3-%{pkgname}-plugins-runner-docker +%{python3_sitelib}/avocado_runner_docker/ +%{python3_sitelib}/avocado_framework_plugin_runner_docker-%{version}-py%{python3_version}.egg-info +%endif +%endif # with_fabric + + +%if %{with_python2_resultsdb} +%package -n python2-%{pkgname}-plugins-resultsdb Summary: Avocado plugin to propagate job results to ResultsDB -License: GPLv2+ -Requires: python3-avocado == %{version}-%{release} +%{?python_provide:%python_provide python2-%{pkgname}-plugins-resultsdb} +Requires: python2-%{pkgname} == %{version}-%{release} +Requires: python2-resultsdb_api -%description -n python3-avocado-plugins-resultsdb +%description -n python2-%{pkgname}-plugins-resultsdb Allows Avocado to send job results directly to a ResultsDB server. -%files -n python3-avocado-plugins-resultsdb +%files -n python2-%{pkgname}-plugins-resultsdb +%{python2_sitelib}/avocado_resultsdb/ +%{python2_sitelib}/avocado_framework_plugin_resultsdb-%{version}-py%{python2_version}.egg-info +%config(noreplace) %{_sysconfdir}/avocado/conf.d/resultsdb.conf +%endif + +%if %{with python3} +%package -n python3-%{pkgname}-plugins-resultsdb +Summary: Avocado plugin to propagate job results to ResultsDB +%{?python_provide:%python_provide python3-%{pkgname}-plugins-resultsdb} +Requires: python3-%{pkgname} == %{version}-%{release} +Requires: python3-resultsdb_api + +%description -n python3-%{pkgname}-plugins-resultsdb +Allows Avocado to send job results directly to a ResultsDB +server. + +%files -n python3-%{pkgname}-plugins-resultsdb %{python3_sitelib}/avocado_resultsdb/ %{python3_sitelib}/avocado_framework_plugin_resultsdb-%{version}-py%{python3_version}.egg-info +%config(noreplace) %{_sysconfdir}/avocado/conf.d/resultsdb.conf %endif -# with_resultsdb -%package -n python3-avocado-plugins-varianter-yaml-to-mux +%if %{with python2} +%package -n python2-%{pkgname}-plugins-varianter-yaml-to-mux Summary: Avocado plugin to generate variants out of yaml files -License: GPLv2+ -Requires: python3-avocado == %{version}-%{release} +%{?python_provide:%python_provide python2-%{pkgname}-plugins-varianter-yaml-to-mux} +Requires: python2-%{pkgname} == %{version}-%{release} +%if 0%{?fedora} >= 27 || 0%{?rhel} > 7 +Requires: python2-yaml +%else +Requires: python-yaml +%endif -%description -n python3-avocado-plugins-varianter-yaml-to-mux +%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). -%files -n python3-avocado-plugins-varianter-yaml-to-mux +%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 +%endif + +%if %{with python3} +%package -n python3-%{pkgname}-plugins-varianter-yaml-to-mux +Summary: Avocado plugin to generate variants out of yaml files +%{?python_provide:%python_provide python3-%{pkgname}-plugins-varianter-yaml-to-mux} +Requires: python3-%{pkgname} == %{version}-%{release} +Requires: python3-yaml + +%description -n python3-%{pkgname}-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-%{pkgname}-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} +%if %{with python2} +%package -n python2-%{pkgname}-plugins-loader-yaml +Summary: Avocado plugin that loads tests from YAML files +%{?python_provide:%python_provide python2-%{pkgname}-plugins-loader-yaml} +Requires: python2-%{pkgname}-plugins-varianter-yaml-to-mux == %{version}-%{release} -%description -n python3-avocado-plugins-varianter-pict +%description -n python2-%{pkgname}-plugins-loader-yaml +Can be used to produce a test suite from definitions in a YAML file, +similar to the one used in the yaml_to_mux varianter plugin. + +%files -n python2-%{pkgname}-plugins-loader-yaml +%{python2_sitelib}/avocado_loader_yaml/ +%{python2_sitelib}/avocado_framework_plugin_loader_yaml-%{version}-py%{python2_version}.egg-info +%endif + +%if %{with python3} +%package -n python3-%{pkgname}-plugins-loader-yaml +Summary: Avocado plugin that loads tests from YAML files +%{?python_provide:%python_provide python3-%{pkgname}-plugins-loader-yaml} +Requires: python3-%{pkgname}-plugins-varianter-yaml-to-mux == %{version}-%{release} + +%description -n python3-%{pkgname}-plugins-loader-yaml +Can be used to produce a test suite from definitions in a YAML file, +similar to the one used in the yaml_to_mux varianter plugin. + +%files -n python3-%{pkgname}-plugins-loader-yaml +%{python3_sitelib}/avocado_loader_yaml/ +%{python3_sitelib}/avocado_framework_plugin_loader_yaml-%{version}-py%{python3_version}.egg-info +%endif + + +%if %{with python2} +%package -n python2-%{pkgname}-plugins-golang +Summary: Avocado plugin for execution of golang tests +%{?python_provide:%python_provide python2-%{pkgname}-plugins-golang} +Requires: python2-%{pkgname} == %{version}-%{release} +Requires: golang + +%description -n python2-%{pkgname}-plugins-golang +Allows Avocado to list golang tests, and if golang is installed, +also run them. + +%files -n python2-%{pkgname}-plugins-golang +%{python2_sitelib}/avocado_golang/ +%{python2_sitelib}/avocado_framework_plugin_golang-%{version}-py%{python2_version}.egg-info +%endif + +%if %{with python3} +%package -n python3-%{pkgname}-plugins-golang +Summary: Avocado plugin for execution of golang tests +%{?python_provide:%python_provide python3-%{pkgname}-plugins-golang} +Requires: python3-%{pkgname} == %{version}-%{release} +Requires: golang + +%description -n python3-%{pkgname}-plugins-golang +Allows Avocado to list golang tests, and if golang is installed, +also run them. + +%files -n python3-%{pkgname}-plugins-golang +%{python3_sitelib}/avocado_golang/ +%{python3_sitelib}/avocado_framework_plugin_golang-%{version}-py%{python3_version}.egg-info +%endif + + +%if %{with python2} +%package -n python2-%{pkgname}-plugins-varianter-pict +Summary: Varianter with combinatorial capabilities by PICT +%{?python_provide:%python_provide python2-%{pkgname}-plugins-varianter-pict} +Requires: python2-%{pkgname} == %{version}-%{release} + +%description -n python2-%{pkgname}-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 +%files -n python2-%{pkgname}-plugins-varianter-pict +%{python2_sitelib}/avocado_varianter_pict/ +%{python2_sitelib}/avocado_framework_plugin_varianter_pict-%{version}-py%{python2_version}.egg-info +%endif + +%if %{with python3} +%package -n python3-%{pkgname}-plugins-varianter-pict +Summary: Varianter with combinatorial capabilities by PICT +%{?python_provide:%python_provide python3-%{pkgname}-plugins-varianter-pict} +Requires: python3-%{pkgname} == %{version}-%{release} + +%description -n python3-%{pkgname}-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-%{pkgname}-plugins-varianter-pict %{python3_sitelib}/avocado_varianter_pict/ %{python3_sitelib}/avocado_framework_plugin_varianter_pict-%{version}-py%{python3_version}.egg-info +%endif -%package -n python3-avocado-plugins-varianter-cit +%if %{with python2} +%package -n python2-%{pkgname}-plugins-varianter-cit Summary: Varianter with Combinatorial Independent Testing capabilities -License: GPLv2+ -Requires: python3-avocado == %{version}-%{release} +%{?python_provide:%python_provide python2-%{pkgname}-plugins-varianter-cit} +Requires: python2-%{pkgname} == %{version}-%{release} -%description -n python3-avocado-plugins-varianter-cit +%description -n python2-%{pkgname}-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 +%files -n python2-%{pkgname}-plugins-varianter-cit +%{python2_sitelib}/avocado_varianter_cit/ +%{python2_sitelib}/avocado_framework_plugin_varianter_cit-%{version}-py%{python2_version}.egg-info +%endif + +%if %{with python3} +%package -n python3-%{pkgname}-plugins-varianter-cit +Summary: Varianter with Combinatorial Independent Testing capabilities +%{?python_provide:%python_provide python3-%{pkgname}-plugins-varianter-cit} +Requires: python3-%{pkgname} == %{version}-%{release} + +%description -n python3-%{pkgname}-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-%{pkgname}-plugins-varianter-cit %{python3_sitelib}/avocado_varianter_cit/ %{python3_sitelib}/avocado_framework_plugin_varianter_cit-%{version}-py%{python3_version}.egg-info +%endif -%package -n python3-avocado-plugins-result-upload +%if %{with python2} +%package -n python2-%{pkgname}-plugins-result-upload Summary: Avocado plugin propagate job results to a remote host -License: GPLv2+ -Requires: python3-avocado == %{version}-%{release} +%{?python_provide:%python_provide python2-%{pkgname}-plugins-result-upload} +Requires: python2-%{pkgname} == %{version}-%{release} -%description -n python3-avocado-plugins-result-upload +%description -n python2-%{pkgname}-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* +%files -n python2-%{pkgname}-plugins-result-upload +%{python2_sitelib}/avocado_result_upload/ +%{python2_sitelib}/avocado_framework_plugin_result_upload-%{version}-py%{python2_version}.egg-info +%config(noreplace) %{_sysconfdir}/avocado/conf.d/result_upload.conf %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} +%if %{with python3} +%package -n python3-%{pkgname}-plugins-result-upload +Summary: Avocado plugin propagate job results to a remote host +%{?python_provide:%python_provide python3-%{pkgname}-plugins-result-upload} +Requires: python3-%{pkgname} == %{version}-%{release} -%description -n python-avocado-examples +%description -n python3-%{pkgname}-plugins-result-upload +This optional plugin is intended to upload the Avocado Job results to +a dedicated sever. + +%files -n python3-%{pkgname}-plugins-result-upload +%{python3_sitelib}/avocado_result_upload/ +%{python3_sitelib}/avocado_framework_plugin_result_upload-%{version}-py%{python3_version}.egg-info +%config(noreplace) %{_sysconfdir}/avocado/conf.d/result_upload.conf +%endif + + +%if %{with python2} +%package -n python2-%{pkgname}-plugins-glib +Summary: Avocado plugin for execution of GLib Test Framework tests +%{?python_provide:%python_provide python2-%{pkgname}-plugins-glib} +Requires: python2-%{pkgname} == %{version}-%{release} + +%description -n python2-%{pkgname}-plugins-glib +This optional plugin is intended to list and run tests written in the +GLib Test Framework. + +%files -n python2-%{pkgname}-plugins-glib +%{python2_sitelib}/avocado_glib/ +%{python2_sitelib}/avocado_framework_plugin_glib-%{version}-py%{python2_version}.egg-info +%endif + +%if %{with python3} +%package -n python3-%{pkgname}-plugins-glib +Summary: Avocado plugin for execution of GLib Test Framework tests +%{?python_provide:%python_provide python3-%{pkgname}-plugins-glib} +Requires: python3-%{pkgname} == %{version}-%{release} + +%description -n python3-%{pkgname}-plugins-glib +This optional plugin is intended to list and run tests written in the +GLib Test Framework. + +%files -n python3-%{pkgname}-plugins-glib +%{python3_sitelib}/avocado_glib/ +%{python3_sitelib}/avocado_framework_plugin_glib-%{version}-py%{python3_version}.egg-info +%endif + + +%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 +%if %{with python2} +Conflicts: python2-%{pkgname} < %{version}-%{release}, python2-%{pkgname} > %{version}-%{release} +%endif +%if %{with python3} +Conflicts: python3-%{pkgname} < %{version}-%{release}, python3-%{pkgname} > %{version}-%{release} +%endif + +%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. -%files -n python-avocado-examples -%license LICENSE +%files -n python-%{pkgname}-examples %dir %{_docdir}/avocado %{_docdir}/avocado/gdb-prerun-scripts %{_docdir}/avocado/plugins %{_docdir}/avocado/tests %{_docdir}/avocado/varianter_cit %{_docdir}/avocado/varianter_pict +%{_docdir}/avocado/wrappers %{_docdir}/avocado/yaml_to_mux +%{_docdir}/avocado/yaml_to_mux_loader -%package -n python-avocado-bash +%package -n python-%{pkgname}-bash Summary: Avocado Test Framework Bash Utilities -License: GPLv2+ and GPLv2 -Requires: python-avocado-common == %{version}-%{release} +Requires: python-%{pkgname}-common == %{version}-%{release} -%description -n python-avocado-bash +%description -n python-%{pkgname}-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 +%files -n python-%{pkgname}-bash %dir %{_libexecdir}/avocado %{_libexecdir}/avocado/avocado-bash-utils %{_libexecdir}/avocado/avocado_debug @@ -538,147 +1172,17 @@ Again Shell code (and possibly other similar shells). %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 Oct 04 2019 Merlin Mathesius - 69.2-1 +- Sync with upstream release 69.2 (LTS series). -* Fri Jul 25 2025 Fedora Release Engineering - 92.3-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild +* Wed Sep 11 2019 Merlin Mathesius - 69.1-3 +- Update patch to always skip unreliable selftest. -* Tue Jun 03 2025 Python Maint - 92.3-5 -- Rebuilt for Python 3.14 +* Mon Sep 09 2019 Merlin Mathesius - 69.1-2 +- Patch to skip selftest currently incompatible with Python 3.8. -* 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. +* Tue Jun 18 2019 Merlin Mathesius - 69.1-1 +- Sync with upstream release 69.1 (LTS series). * Wed May 22 2019 Merlin Mathesius - 69.0-4 - pyliblzma is Python 2-only and no longer available as of F31. diff --git a/sources b/sources index 6494afc..9a6f026 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (avocado-112.0.tar.gz) = 1872eda730f5cd28f0562732464ce14b2c7731cedb298fcc4b093a04235d26cc5e3db7f92c3ae3edcd6104ad2db4fce66fa7a6148da754e4bdb8120fa12a75a3 +SHA512 (avocado-69.2.tar.gz) = edf348ed083c72de511190e0c615861cd413a54c30082f1a345d689ce7990bd0ceebfc81893087e3bc015716c6ae7ef104a71658f4b2b7cc75ec657ebe4eff61 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()