diff --git a/.gitignore b/.gitignore index bf17c05..b6da59d 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,18 @@ /avocado-79.0.tar.gz /avocado-80.0.tar.gz /avocado-82.0.tar.gz +/avocado-83.0.tar.gz +/avocado-84.0.tar.gz +/avocado-85.0.tar.gz +/avocado-86.0.tar.gz +/avocado-87.0.tar.gz +/avocado-88.1.tar.gz +/avocado-89.0.tar.gz +/avocado-90.0.tar.gz +/avocado-95.0.tar.gz +/avocado-95.0-resultsdb_api.patch +/avocado-96.0.tar.gz +/avocado-97.0.tar.gz +/avocado-98.0.tar.gz +/avocado-102.0.tar.gz +/avocado-112.0.tar.gz diff --git a/avocado-89.0-passtest-path-fix.patch b/avocado-89.0-passtest-path-fix.patch new file mode 100644 index 0000000..7af4756 --- /dev/null +++ b/avocado-89.0-passtest-path-fix.patch @@ -0,0 +1,24 @@ +From 8e2d7da5868ca2ae1c66c24a3e5c2957daffc7d7 Mon Sep 17 00:00:00 2001 +From: Merlin Mathesius +Date: Thu, 1 Jul 2021 15:04:14 -0500 +Subject: [PATCH] Specify the complete relative path to passtest.py in + HtmlResultTest.test_output_compatible_setup_2 so it finds the script to run. + +Signed-off-by: Merlin Mathesius +--- + optional_plugins/html/tests/test_html_result.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/optional_plugins/html/tests/test_html_result.py b/optional_plugins/html/tests/test_html_result.py +index b123a669aa..e074d3bc3a 100644 +--- a/optional_plugins/html/tests/test_html_result.py ++++ b/optional_plugins/html/tests/test_html_result.py +@@ -53,7 +53,7 @@ def test_output_compatible_setup_2(self): + tmpfile3 = os.path.join(tmpdir, "result.html") + cmd_line = ('avocado run --job-results-dir %s --disable-sysinfo ' + '--xunit %s --json %s --html %s --tap-include-logs ' +- 'passtest.py' % (self.tmpdir.name, tmpfile, tmpfile2, tmpfile3)) ++ 'examples/tests/passtest.py' % (self.tmpdir.name, tmpfile, tmpfile2, tmpfile3)) + result = process.run(cmd_line, ignore_status=True) + output = result.stdout + result.stderr + expected_rc = exit_codes.AVOCADO_ALL_OK diff --git a/python-avocado.spec b/python-avocado.spec index d8ed3a8..f55cf9a 100644 --- a/python-avocado.spec +++ b/python-avocado.spec @@ -1,6 +1,3 @@ -%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 @@ -9,45 +6,50 @@ # Settings used for build from snapshots. %if 0%{?rel_build} %global gitref %{version} - %global gittar %{srcname}-%{version}.tar.gz + %global gittar avocado-%{version}.tar.gz %else %if ! 0%{?commit:1} - %global commit e97540793998c4f24a16000465dd7fdd213bf2b9 + %global commit e4ede79f097dcc1dbd30e43ffe3b7daf52d2204d %endif %if ! 0%{?commit_date:1} - %global commit_date 20200911 + %global commit_date 20251010 %endif %global shortcommit %(c=%{commit};echo ${c:0:9}) %global gitrel .%{commit_date}git%{shortcommit} %global gitref %{commit} - %global gittar %{srcname}-%{shortcommit}.tar.gz + %global gittar avocado-%{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. -%global with_tests 1 +# You can disable them with rpmbuild ... --without tests +%bcond_without tests -# resultsdb is only available for Fedora -%if 0%{?fedora} +# 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 %endif -Name: python-%{pkgname} -Version: 82.0 -Release: 1%{?gitrel}%{?dist} +Name: python-avocado +Version: 112.0 +Release: 2%{?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 MIT -URL: http://avocado-framework.github.io/ -Source0: https://github.com/avocado-framework/%{srcname}/archive/%{gitref}.tar.gz#/%{gittar} +License: GPL-2.0-or-later AND GPL-2.0-only AND MIT +URL: https://avocado-framework.github.io/ +Source0: https://github.com/avocado-framework/avocado/archive/%{gitref}/%{gittar} BuildArch: noarch BuildRequires: kmod @@ -56,32 +58,37 @@ BuildRequires: python3-devel BuildRequires: python3-docutils BuildRequires: python3-jinja2 BuildRequires: python3-lxml -BuildRequires: python3-mock BuildRequires: python3-psutil BuildRequires: python3-setuptools -BuildRequires: python3-six -BuildRequires: python3-sphinx -%if 0%{?fedora} -BuildRequires: python3-pycdlib +%if ! 0%{?rhel} +BuildRequires: python-aexpect %endif %if %{with_resultsdb} BuildRequires: python3-resultsdb_api +BuildRequires: python3-pycdlib %endif -%if 0%{?with_tests} +%if %{with tests} +BuildRequires: python3-jsonschema +%if ! 0%{?rhel} >= 9 BuildRequires: genisoimage +%endif BuildRequires: libcdio BuildRequires: psmisc -%if 0%{?fedora} +%if ! 0%{?rhel} BuildRequires: perl-Test-Harness +BuildRequires: python3-xmlschema +BuildRequires: ansible-core %endif -%if 0%{?fedora} >= 30 || 0%{?rhel} BuildRequires: glibc-all-langpacks -%endif BuildRequires: python3-netifaces BuildRequires: python3-yaml +BuildRequires: nmap-ncat +BuildRequires: gcc +BuildRequires: gdb +BuildRequires: gdb-gdbserver %endif -# with_tests +# with tests %description Avocado is a set of tools and libraries (what people call @@ -89,9 +96,13 @@ these days a framework) to perform automated testing. %prep -%setup -q -n %{srcname}-%{gitref} -%if (0%{?fedora} && 0%{?fedora} < 29) || 0%{?rhel} -sed -e "s/'PyYAML>=4.2b2'/'PyYAML>=3.12'/" -i optional_plugins/varianter_yaml_to_mux/setup.py +%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 @@ -99,20 +110,22 @@ sed -e "s/'PyYAML>=4.2b2'/'PyYAML>=3.12'/" -i optional_plugins/varianter_yaml_to pushd optional_plugins/html %py3_build popd -pushd optional_plugins/resultsdb %if %{with_resultsdb} +pushd optional_plugins/resultsdb %py3_build +popd %endif -popd pushd optional_plugins/varianter_yaml_to_mux %py3_build popd -pushd optional_plugins/loader_yaml - %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 @@ -122,50 +135,63 @@ popd pushd optional_plugins/result_upload %py3_build popd -pushd optional_plugins/glib +pushd optional_plugins/mail %py3_build popd -%{__make} man +%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 \ avocado-runner-noop \ - avocado-runner-exec \ + 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 + 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 +rm -rf %{buildroot}%{python3_sitelib}/avocado/etc # ditto for libexec files -%{__rm} -rf %{buildroot}%{python3_sitelib}/avocado/libexec +rm -rf %{buildroot}%{python3_sitelib}/avocado/libexec pushd optional_plugins/html %py3_install popd -pushd optional_plugins/resultsdb %if %{with_resultsdb} +pushd optional_plugins/resultsdb %py3_install +popd %endif -popd pushd optional_plugins/varianter_yaml_to_mux %py3_install popd -pushd optional_plugins/loader_yaml - %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 @@ -175,115 +201,85 @@ popd pushd optional_plugins/result_upload %py3_install popd -pushd optional_plugins/glib +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 -%{__install} -d -m 0755 %{buildroot}%{_sharedstatedir}/avocado/data +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/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 {} ';' - +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 -%if 0%{?with_tests} - %{__python3} setup.py develop --user - pushd optional_plugins/html - %{__python3} setup.py develop --user - popd - %if %{with_resultsdb} - pushd optional_plugins/resultsdb - %{__python3} setup.py develop --user - popd - %endif - # with_resultsdb - 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 # 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 - USER_BASE=`%{__python3} -m site --user-base` - PATH=$USER_BASE/bin:$PATH LANG=en_US.UTF-8 AVOCADO_CHECK_LEVEL=0 %{__python3} selftests/run + 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-%{pkgname} +%package -n python3-avocado Summary: %{summary} -License: GPLv2 and MIT -%{?python_provide:%python_provide python3-%{pkgname}} -Requires: python-%{pkgname}-common == %{version}-%{release} +Requires: python-avocado-common == %{version}-%{release} Requires: gdb Requires: gdb-gdbserver Requires: procps-ng -Requires: python3 -Requires: python3-setuptools -Requires: python3-six -%if 0%{?fedora} +%if ! 0%{?rhel} Requires: python3-pycdlib %endif -%description -n python3-%{pkgname} +%description -n python3-avocado Avocado is a set of tools and libraries (what people call these days a framework) to perform automated testing. -%files -n python3-%{pkgname} +%files -n python3-avocado %license LICENSE -%doc README.rst +%{_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-%{python3_version} -%{_bindir}/avocado-runner-3 -%{_bindir}/avocado-runner %{_bindir}/avocado-runner-noop-%{python3_version} %{_bindir}/avocado-runner-noop-3 %{_bindir}/avocado-runner-noop -%{_bindir}/avocado-runner-exec-%{python3_version} -%{_bindir}/avocado-runner-exec-3 -%{_bindir}/avocado-runner-exec +%{_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 @@ -296,18 +292,41 @@ these days a framework) to perform automated testing. %{_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-%{pkgname}-common +%package -n python-avocado-common Summary: Avocado common files +License: GPLv2+ -%description -n python-%{pkgname}-common +%description -n python-avocado-common Common files (such as configuration) for the Avocado Testing Framework. -%files -n python-%{pkgname}-common +%files -n python-avocado-common +%license LICENSE %{_mandir}/man1/avocado.1.gz %dir %{_docdir}/avocado %dir %{_sharedstatedir}/avocado @@ -317,6 +336,10 @@ Common files (such as configuration) for the Avocado Testing Framework. %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/sysinfo/commands %config(noreplace) %{_sysconfdir}/avocado/sysinfo/files %config(noreplace) %{_sysconfdir}/avocado/sysinfo/profilers @@ -324,173 +347,188 @@ Common files (such as configuration) for the Avocado Testing Framework. %{_sysconfdir}/avocado/scripts/job/post.d/README -%package -n python3-%{pkgname}-plugins-output-html +%package -n python3-avocado-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 +License: GPL-2.0-or-later AND MIT +Requires: python3-avocado == %{version}-%{release} -%description -n python3-%{pkgname}-plugins-output-html +%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-%{pkgname}-plugins-output-html +%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-%{pkgname}-plugins-resultsdb +%package -n python3-avocado-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 +License: GPL-2.0-or-later +Requires: python3-avocado == %{version}-%{release} -%description -n python3-%{pkgname}-plugins-resultsdb +%description -n python3-avocado-plugins-resultsdb Allows Avocado to send job results directly to a ResultsDB server. -%files -n python3-%{pkgname}-plugins-resultsdb +%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-%{pkgname}-plugins-varianter-yaml-to-mux +%package -n python3-avocado-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 +License: GPL-2.0-or-later +Requires: python3-avocado == %{version}-%{release} -%description -n python3-%{pkgname}-plugins-varianter-yaml-to-mux +%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-%{pkgname}-plugins-varianter-yaml-to-mux +%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-%{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 - - -%package -n python3-%{pkgname}-plugins-golang +%package -n python3-avocado-plugins-golang Summary: Avocado plugin for execution of golang tests -%{?python_provide:%python_provide python3-%{pkgname}-plugins-golang} -Requires: python3-%{pkgname} == %{version}-%{release} +License: GPL-2.0-or-later +Requires: python3-avocado == %{version}-%{release} Requires: golang -%description -n python3-%{pkgname}-plugins-golang +%description -n python3-avocado-plugins-golang Allows Avocado to list golang tests, and if golang is installed, also run them. -%files -n python3-%{pkgname}-plugins-golang +%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 -%package -n python3-%{pkgname}-plugins-varianter-pict +%if ! 0%{?rhel} +%package -n python3-avocado-plugins-ansible +Summary: Avocado Ansible Dependency plugin +License: GPL-2.0-or-later +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 -%{?python_provide:%python_provide python3-%{pkgname}-plugins-varianter-pict} -Requires: python3-%{pkgname} == %{version}-%{release} +License: GPL-2.0-or-later +Requires: python3-avocado == %{version}-%{release} -%description -n python3-%{pkgname}-plugins-varianter-pict +%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-%{pkgname}-plugins-varianter-pict +%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-%{pkgname}-plugins-varianter-cit +%package -n python3-avocado-plugins-varianter-cit Summary: Varianter with Combinatorial Independent Testing capabilities -%{?python_provide:%python_provide python3-%{pkgname}-plugins-varianter-cit} -Requires: python3-%{pkgname} == %{version}-%{release} +License: GPL-2.0-or-later +Requires: python3-avocado == %{version}-%{release} -%description -n python3-%{pkgname}-plugins-varianter-cit +%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-%{pkgname}-plugins-varianter-cit +%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-%{pkgname}-plugins-result-upload +%package -n python3-avocado-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} +License: GPL-2.0-or-later +Requires: python3-avocado == %{version}-%{release} -%description -n python3-%{pkgname}-plugins-result-upload +%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-%{pkgname}-plugins-result-upload +%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: GPL-2.0-or-later +Requires: python3-avocado == %{version}-%{release} -%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-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. -%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-avocado-plugins-result-mail +%{python3_sitelib}/avocado_result_mail* +%{python3_sitelib}/avocado_framework_plugin_result_mail* -%files -n python3-%{pkgname}-plugins-glib -%{python3_sitelib}/avocado_glib/ -%{python3_sitelib}/avocado_framework_plugin_glib-%{version}-py%{python3_version}.egg-info +%if ! 0%{?rhel} +%package -n python3-avocado-plugins-spawner-remote +Summary: Avocado Plugin to spawn tests on a remote host +License: GPL-2.0-or-later +Requires: python3-avocado == %{version}-%{release} +%description -n python3-avocado-plugins-spawner-remote +This optional plugin is intended to spawn tests on a remote host. -%package -n python-%{pkgname}-examples +%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 +License: GPL-2.0-or-later # documentation does not require main package, but needs to be in lock-step if present -Conflicts: python3-%{pkgname} < %{version}-%{release}, python3-%{pkgname} > %{version}-%{release} +Conflicts: python3-avocado < %{version}-%{release}, python3-avocado > %{version}-%{release} -%description -n python-%{pkgname}-examples +%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-%{pkgname}-examples +%files -n python-avocado-examples +%license LICENSE %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-%{pkgname}-bash +%package -n python-avocado-bash Summary: Avocado Test Framework Bash Utilities -Requires: python-%{pkgname}-common == %{version}-%{release} +License: GPL-2.0-or-later AND GPLv-2.0-only +Requires: python-avocado-common == %{version}-%{release} -%description -n python-%{pkgname}-bash +%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-%{pkgname}-bash +%files -n python-avocado-bash +%license LICENSE %dir %{_libexecdir}/avocado %{_libexecdir}/avocado/avocado-bash-utils %{_libexecdir}/avocado/avocado_debug @@ -500,6 +538,93 @@ Again Shell code (and possibly other similar shells). %changelog +* Fri Nov 07 2025 Cleber Rosa - 112.0-2 +- Update license format to match The System Package Data Exchange (SPDX) + +* 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 + +* Mon Jul 17 2023 Cleber Rosa - 102.0-1 +- Sync with upstream release 102.0 +- Added new avocado-runner-podman-image script +- Added new sub package python3-avocado-plugins-ansible +- Remove generic runner avocado-runner + +* Sat Jul 16 2022 Cleber Rosa - 98.0-1 +- Sync with upstream release 98.0 +- Add build requirements for python3-elementpath and + python3-xmlschema, used on some tests +- Changed regex to match new string quote style + +* Tue May 24 2022 Cleber Rosa - 97.0-1 +- Sync with upstream release 97.0 +- Require python3-jsonschema when running tests +- Removed wrapper examples + +* Tue Apr 5 2022 Cleber Rosa - 96.0-1 +- Sync with upstream release 96.0. +- Rename requirements to dependencies +- Dropped patch that pins resultsdb_api to working version + +* Thu Mar 17 2022 Cleber Rosa - 95.0-1 +- Sync with upstream release 95.0. +- Added new binary for 'avocado-external-runner' +- Removed executable mode from avocado/core/nrunner.py +- Adjust selftest/check.py to use new --skip option +- Do not require genisoimage on EL9 +- Replace the %global with_tests macro with %bcond_without to allow + disable the tests directly in the command line. +- Removed avocado-runner-exec since we have avocado-runner-exec-test. +- Added avocado-runner-sysinfo in package +- Added upstream patch that pins resultsdb_api to working version. + +* Tue Jul 27 2021 Cleber Rosa - 90.0-1 +- Sync with upstream release 90.0. +- Removed patch already included upstream + +* Tue Jun 29 2021 Merlin Mathesius - 89.0-2 +- Spec file cleanup identified during package review to bring back + non-modular version of package. + +* Tue Jun 22 2021 Cleber Rosa - 89.0-1 +- Sync with upstream release 89.0. +- Packaged avocado-runner-dry-run and avocado-runner-requirement-asset + +* Tue May 18 2021 Cleber Rosa - 88.1-1 +- Sync with upstream release 88.1. +- Included avocado-runner-requirement-package executables + +* Wed Apr 14 2021 Cleber Rosa - 87.0-1 +- Sync with upstream release 87.0. + +* Tue Mar 16 2021 Cleber Rosa - 86.0-1 +- Sync with upstream release 86.0. +- Do not depend on make to build man page + +* Wed Feb 10 2021 Cleber Rosa - 85.0-1 +- Sync with upstream release 85.0. + +* Wed Feb 10 2021 Cleber Rosa - 84.0-1 +- Sync with upstream release 84.0. +- Drop old Fedora conditionals +- Use selftests/check.py job instead of more limited selftests/run + +* Tue Nov 17 2020 Cleber Rosa - 83.0-1 +- Sync with upstream release 83.0. +- Added avocado-runner-golang script to golang package +- Removed glib plugin +- Removed yaml to mux loader plugin + * 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 diff --git a/sources b/sources index 4721c3f..6494afc 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (avocado-82.0.tar.gz) = 099ab131b2b941602550e71507e4ca517d5d2cd5152b255edace0473c9de93aac8163a61689414b5b58f9211f58981c3c30c1c3ca8a191283f609722ce07f173 +SHA512 (avocado-112.0.tar.gz) = 1872eda730f5cd28f0562732464ce14b2c7731cedb298fcc4b093a04235d26cc5e3db7f92c3ae3edcd6104ad2db4fce66fa7a6148da754e4bdb8120fa12a75a3 diff --git a/tests/gdbtest.py b/tests/gdbtest.py index d814fa5..c0cdc55 100755 --- a/tests/gdbtest.py +++ b/tests/gdbtest.py @@ -1,14 +1,7 @@ -#!/usr/bin/env python - import os -from six.moves import xrange as range - from avocado import Test -from avocado import main -from avocado.utils import gdb -from avocado.utils import genio -from avocado.utils import process +from avocado.utils import gdb, genio, process class GdbTest(Test): @@ -32,17 +25,22 @@ class GdbTest(Test): "-auto-debug-it"] def setUp(self): - 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)) + 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}') @staticmethod - def is_process_alive(process): + def is_process_alive(process): # pylint: disable=W0621 """ Checks if a process is still alive @@ -73,14 +71,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 = "-info-gdb-mi-command %s" % cmd[1:] + info_cmd = f"-info-gdb-mi-command {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 = "-info-gdb-mi-command %s" % cmd[1:] + info_cmd = f"-info-gdb-mi-command {cmd[1:]}" r = g.cmd(info_cmd) self.assertEqual(r.result.result.command.exists, 'false') @@ -105,7 +103,7 @@ class GdbTest(Test): self.log.info("Testing that GDB loads a file and sets a breakpoint") g = gdb.GDB() - file_cmd = "-file-exec-and-symbols %s" % self.return99_binary_path + file_cmd = f"-file-exec-and-symbols {self.return99_binary_path}" r = g.cmd(file_cmd) self.assertEqual(r.result.class_, 'done') @@ -145,7 +143,7 @@ class GdbTest(Test): self.log.info("Testing that a core dump will be generated") g = gdb.GDB() - file_cmd = "-file-exec-and-symbols %s" % self.segfault_binary_path + file_cmd = f"-file-exec-and-symbols {self.segfault_binary_path}" r = g.cmd(file_cmd) self.assertEqual(r.result.class_, 'done') @@ -156,12 +154,12 @@ class GdbTest(Test): other_messages = g.read_until_break() core_path = None for msg in other_messages: - parsed_msg = gdb.parse_mi(msg) + parsed_msg = gdb.parse_mi(msg.decode()) if (hasattr(parsed_msg, 'class_') and (parsed_msg.class_ == 'stopped') and (parsed_msg.result.signal_name == 'SIGSEGV')): - core_path = "%s.core" % self.segfault_binary_path - gcore_cmd = 'gcore %s' % core_path + core_path = f"{self.segfault_binary_path}.core" + gcore_cmd = f'gcore {core_path}' gcore_cmd = gdb.encode_mi_cli(gcore_cmd) r = g.cmd(gcore_cmd) self.assertEqual(r.result.class_, 'done') @@ -191,14 +189,14 @@ class GdbTest(Test): # Do 100 cycle of target (kind of connects) and disconnects for _ in range(0, 100): - cmd = '-target-select extended-remote :%s' % s.port + cmd = f'-target-select extended-remote :{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 = '-target-select extended-remote :%s' % s.port + cmd = f'-target-select extended-remote :{s.port}' r = g.cmd(cmd) self.assertEqual(r.result.class_, 'connected') r = g.cli_cmd('monitor exit') @@ -234,15 +232,15 @@ class GdbTest(Test): s = gdb.GDBServer() g = gdb.GDB() - cmd = '-file-exec-and-symbols %s' % self.return99_binary_path + cmd = f'-file-exec-and-symbols {self.return99_binary_path}' r = g.cmd(cmd) self.assertEqual(r.result.class_, 'done') - cmd = 'set remote exec-file %s' % self.return99_binary_path + cmd = f'set remote exec-file {self.return99_binary_path}' r = g.cmd(cmd) self.assertEqual(r.result.class_, 'done') - cmd = "-break-insert %s" % 'main' + cmd = f"-break-insert {'main'}" r = g.cmd(cmd) self.assertEqual(r.result.class_, 'done') @@ -250,7 +248,7 @@ class GdbTest(Test): other_messages = g.read_until_break() for msg in other_messages: - parsed_msg = gdb.parse_mi(msg) + parsed_msg = gdb.parse_mi(msg.decode()) if (hasattr(parsed_msg, 'class_') and parsed_msg.class_ == 'stopped' and parsed_msg.result.reason == 'breakpoint-hit'): @@ -278,7 +276,8 @@ class GdbTest(Test): c1 = gdb.GDB() c1.connect(s.port) c2 = gdb.GDB() - self.assertRaises(ValueError, c2.connect, s.port) + with self.assertRaises(gdb.UnexpectedResponseError): + c2.connect(s.port) s.exit() def test_server_exit(self): @@ -310,43 +309,6 @@ 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() @@ -354,7 +316,7 @@ class GdbTest(Test): self.assertTrue(os.path.exists(s.stderr_path)) stderr_lines = genio.read_all_lines(s.stderr_path) - listening_line = "Listening on port %s" % s.port + listening_line = f"Listening on port {s.port}" self.assertIn(listening_line, stderr_lines) def test_server_stdout(self): @@ -372,28 +334,14 @@ class GdbTest(Test): stdout_lines = genio.read_all_lines(s.stdout_path) self.assertIn("return 99", stdout_lines) - 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): + @staticmethod + def test_remote(): """ Tests GDBRemote interaction with a GDBServer """ s = gdb.GDBServer() r = gdb.GDBRemote('127.0.0.1', s.port) r.connect() - r.cmd("qSupported") - r.cmd("qfThreadInfo") + r.cmd(b"qSupported") + r.cmd(b"qfThreadInfo") s.exit() - - -if __name__ == '__main__': - main()