Compare commits

..

No commits in common. "rawhide" and "epel9" have entirely different histories.

7 changed files with 0 additions and 1264 deletions

35
.gitignore vendored
View file

@ -1,35 +0,0 @@
/avocado-43.0.tar.gz
/avocado-46.0.tar.gz
/avocado-47.0.tar.gz
/avocado-48.0.tar.gz
/avocado-49.0.tar.gz
/avocado-50.0.tar.gz
/avocado-51.0.tar.gz
/avocado-52.0.tar.gz
/avocado-52.1.tar.gz
/avocado-61.0.tar.gz
/avocado-62.0.tar.gz
/avocado-63.0.tar.gz
/avocado-64.0.tar.gz
/avocado-65.0.tar.gz
/avocado-66.0.tar.gz
/avocado-67.0.tar.gz
/avocado-68.0.tar.gz
/avocado-69.0.tar.gz
/avocado-70.0.tar.gz
/avocado-71.0.tar.gz
/avocado-72.0.tar.gz
/avocado-73.0.tar.gz
/avocado-74.0.tar.gz
/avocado-75.1.tar.gz
/avocado-76.0.tar.gz
/avocado-77.0.tar.gz
/avocado-78.0.tar.gz
/avocado-79.0.tar.gz
/avocado-80.0.tar.gz
/avocado-82.0.tar.gz
/avocado-92.0.tar.gz
/avocado-92.1.tar.gz
/avocado-92.1-python312.patch
/avocado-92.3.tar.gz
/avocado-112.0.tar.gz

View file

@ -1,796 +0,0 @@
# Conditional for release vs. snapshot builds. Set to 1 for release build.
%if ! 0%{?rel_build:1}
%global rel_build 1
%endif
# Settings used for build from snapshots.
%if 0%{?rel_build}
%global gitref %{version}
%global gittar avocado-%{version}.tar.gz
%else
%if ! 0%{?commit:1}
%global commit e4ede79f097dcc1dbd30e43ffe3b7daf52d2204d
%endif
%if ! 0%{?commit_date:1}
%global commit_date 20251010
%endif
%global shortcommit %(c=%{commit};echo ${c:0:9})
%global gitrel .%{commit_date}git%{shortcommit}
%global gitref %{commit}
%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.
# 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
%endif
Name: python-avocado
Version: 112.0
Release: 1%{?gitrel}%{?dist}
Summary: Framework with tools and libraries for Automated Testing
# Found licenses:
# avocado/core/tapparser.py: MIT
# avocado/utils/external/gdbmi_parser.py: MIT
# avocado/utils/external/spark.py: MIT
# optional_plugins/html/avocado_result_html/templates/bootstrap.min.css: MIT
# optional_plugins/html/avocado_result_html/templates/bootstrap.min.js: MIT
# selftests/.data/jenkins-junit.xsd: MIT
# 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}
BuildArch: noarch
BuildRequires: kmod
BuildRequires: procps-ng
BuildRequires: python3-devel
BuildRequires: python3-docutils
BuildRequires: python3-jinja2
BuildRequires: python3-lxml
BuildRequires: python3-psutil
BuildRequires: python3-setuptools
%if ! 0%{?rhel}
BuildRequires: python-aexpect
%endif
%if %{with_resultsdb}
BuildRequires: python3-resultsdb_api
BuildRequires: python3-pycdlib
%endif
%if %{with tests}
BuildRequires: python3-jsonschema
%if ! 0%{?rhel} >= 9
BuildRequires: genisoimage
%endif
BuildRequires: libcdio
BuildRequires: psmisc
%if ! 0%{?rhel}
BuildRequires: perl-Test-Harness
BuildRequires: python3-xmlschema
BuildRequires: ansible-core
%endif
BuildRequires: glibc-all-langpacks
BuildRequires: python3-netifaces
BuildRequires: python3-yaml
BuildRequires: nmap-ncat
BuildRequires: gcc
BuildRequires: gdb
BuildRequires: gdb-gdbserver
%endif
# with tests
%description
Avocado is a set of tools and libraries (what people call
these days a framework) to perform automated testing.
%prep
%setup -q -n avocado-%{gitref}
%if 0%{?rhel}
sed -e 's/"PyYAML>=4.2b2"/"PyYAML>=3.12"/' -i optional_plugins/varianter_yaml_to_mux/setup.py
%endif
%if 0%{?fedora} >= 42
sed -e '/"markupsafe<3.0.0"/d' -i optional_plugins/html/setup.py
sed -e '/"markupsafe<3.0.0"/d' -i optional_plugins/ansible/setup.py
%endif
%build
%py3_build
pushd optional_plugins/html
%py3_build
popd
%if %{with_resultsdb}
pushd optional_plugins/resultsdb
%py3_build
popd
%endif
pushd optional_plugins/varianter_yaml_to_mux
%py3_build
popd
pushd optional_plugins/golang
%py3_build
popd
%if ! 0%{?rhel}
pushd optional_plugins/ansible
%py3_build
popd
%endif
pushd optional_plugins/varianter_pict
%py3_build
popd
pushd optional_plugins/varianter_cit
%py3_build
popd
pushd optional_plugins/result_upload
%py3_build
popd
pushd optional_plugins/mail
%py3_build
popd
%if ! 0%{?rhel}
pushd optional_plugins/spawner_remote
%py3_build
popd
%endif
rst2man man/avocado.rst man/avocado.1
%install
%py3_install
for exe in \
avocado \
avocado-runner-noop \
avocado-runner-dry-run \
avocado-runner-exec-test \
avocado-runner-python-unittest \
avocado-runner-avocado-instrumented \
avocado-runner-tap \
avocado-runner-asset \
avocado-runner-package \
avocado-runner-pip \
avocado-runner-podman-image \
avocado-runner-sysinfo \
avocado-runner-vmimage \
avocado-external-runner \
avocado-software-manager
do
mv %{buildroot}%{_bindir}/$exe %{buildroot}%{_bindir}/$exe-%{python3_version}
ln -s $exe-%{python3_version} %{buildroot}%{_bindir}/$exe-3
ln -s $exe-%{python3_version} %{buildroot}%{_bindir}/$exe
done
# configuration is held at /etc/avocado only and part of the
# python-avocado-common package
rm -rf %{buildroot}%{python3_sitelib}/avocado/etc
# ditto for libexec files
rm -rf %{buildroot}%{python3_sitelib}/avocado/libexec
pushd optional_plugins/html
%py3_install
popd
%if %{with_resultsdb}
pushd optional_plugins/resultsdb
%py3_install
popd
%endif
pushd optional_plugins/varianter_yaml_to_mux
%py3_install
popd
pushd optional_plugins/golang
%py3_install
popd
%if ! 0%{?rhel}
pushd optional_plugins/ansible
%py3_install
popd
%endif
pushd optional_plugins/varianter_pict
%py3_install
popd
pushd optional_plugins/varianter_cit
%py3_install
popd
pushd optional_plugins/result_upload
%py3_install
popd
pushd optional_plugins/mail
%py3_install
popd
%if ! 0%{?rhel}
pushd optional_plugins/spawner_remote
%py3_install
popd
%endif
# cleanup plugin test cruft
rm -rf %{buildroot}%{python3_sitelib}/tests
mkdir -p %{buildroot}%{_sysconfdir}/avocado
cp -r avocado/etc/avocado/scripts %{buildroot}%{_sysconfdir}/avocado/scripts
cp -r avocado/etc/avocado/sysinfo %{buildroot}%{_sysconfdir}/avocado/sysinfo
mkdir -p %{buildroot}%{_libexecdir}/avocado
cp avocado/libexec/avocado-bash-utils %{buildroot}%{_libexecdir}/avocado/avocado-bash-utils
cp avocado/libexec/avocado_debug %{buildroot}%{_libexecdir}/avocado/avocado_debug
cp avocado/libexec/avocado_error %{buildroot}%{_libexecdir}/avocado/avocado_error
cp avocado/libexec/avocado_info %{buildroot}%{_libexecdir}/avocado/avocado_info
cp avocado/libexec/avocado_warn %{buildroot}%{_libexecdir}/avocado/avocado_warn
mkdir -p %{buildroot}%{_mandir}/man1
install -m 0644 man/avocado.1 %{buildroot}%{_mandir}/man1/avocado.1
mkdir -p %{buildroot}%{_pkgdocdir}
install -m 0644 README.rst %{buildroot}%{_pkgdocdir}
install -d -m 0755 %{buildroot}%{_sharedstatedir}/avocado/data
# place examples in documentation directory
install -d -m 0755 %{buildroot}%{_docdir}/avocado
cp -r examples/gdb-prerun-scripts %{buildroot}%{_docdir}/avocado/gdb-prerun-scripts
cp -r examples/plugins %{buildroot}%{_docdir}/avocado/plugins
cp -r examples/tests %{buildroot}%{_docdir}/avocado/tests
cp -r examples/varianter_cit %{buildroot}%{_docdir}/avocado/varianter_cit
cp -r examples/varianter_pict %{buildroot}%{_docdir}/avocado/varianter_pict
cp -r examples/yaml_to_mux %{buildroot}%{_docdir}/avocado/yaml_to_mux
mkdir -p %{buildroot}%{_datarootdir}/avocado
mv %{buildroot}%{python3_sitelib}/avocado/schemas %{buildroot}%{_datarootdir}/avocado
find %{buildroot}%{_docdir}/avocado -type f -name '*.py' -exec chmod -c -x {} ';'
%if %{with tests}
%check
# LANG: to make the results predictable, we pin the language
# that is used during test execution.
# AVOCADO_CHECK_LEVEL: package build environments have the least
# amount of resources we have observed so far. Let's avoid tests that
# require too much resources or are time sensitive
PATH=%{buildroot}%{_bindir}:%{buildroot}%{_libexecdir}/avocado:$PATH \
PYTHONPATH=%{buildroot}%{python3_sitelib}:. \
LANG=en_US.UTF-8 \
AVOCADO_CHECK_LEVEL=0 \
%{python3} selftests/check.py --skip static-checks --disable-plugin-checks robot
%endif
%package -n python3-avocado
Summary: %{summary}
Requires: python-avocado-common == %{version}-%{release}
Requires: gdb
Requires: gdb-gdbserver
Requires: procps-ng
%if ! 0%{?rhel}
Requires: python3-pycdlib
%endif
%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-avocado
%license LICENSE
%{_pkgdocdir}/README.rst
%{python3_sitelib}/avocado/
%{python3_sitelib}/avocado_framework-%{version}-py%{python3_version}.egg-info
%{_bindir}/avocado-%{python3_version}
%{_bindir}/avocado-3
%{_bindir}/avocado
%{_bindir}/avocado-runner-noop-%{python3_version}
%{_bindir}/avocado-runner-noop-3
%{_bindir}/avocado-runner-noop
%{_bindir}/avocado-runner-dry-run-%{python3_version}
%{_bindir}/avocado-runner-dry-run-3
%{_bindir}/avocado-runner-dry-run
%{_bindir}/avocado-runner-exec-test-%{python3_version}
%{_bindir}/avocado-runner-exec-test-3
%{_bindir}/avocado-runner-exec-test
%{_bindir}/avocado-runner-python-unittest-%{python3_version}
%{_bindir}/avocado-runner-python-unittest-3
%{_bindir}/avocado-runner-python-unittest
%{_bindir}/avocado-runner-avocado-instrumented-%{python3_version}
%{_bindir}/avocado-runner-avocado-instrumented-3
%{_bindir}/avocado-runner-avocado-instrumented
%{_bindir}/avocado-runner-tap-%{python3_version}
%{_bindir}/avocado-runner-tap-3
%{_bindir}/avocado-runner-tap
%{_bindir}/avocado-runner-asset-%{python3_version}
%{_bindir}/avocado-runner-asset-3
%{_bindir}/avocado-runner-asset
%{_bindir}/avocado-runner-package-%{python3_version}
%{_bindir}/avocado-runner-package-3
%{_bindir}/avocado-runner-package
%{_bindir}/avocado-runner-pip-%{python3_version}
%{_bindir}/avocado-runner-pip-3
%{_bindir}/avocado-runner-pip
%{_bindir}/avocado-runner-podman-image-%{python3_version}
%{_bindir}/avocado-runner-podman-image-3
%{_bindir}/avocado-runner-podman-image
%{_bindir}/avocado-runner-sysinfo-%{python3_version}
%{_bindir}/avocado-runner-sysinfo-3
%{_bindir}/avocado-runner-sysinfo
%{_bindir}/avocado-runner-vmimage-%{python3_version}
%{_bindir}/avocado-runner-vmimage-3
%{_bindir}/avocado-runner-vmimage
%{_bindir}/avocado-software-manager-%{python3_version}
%{_bindir}/avocado-software-manager-3
%{_bindir}/avocado-software-manager
%{_bindir}/avocado-external-runner-%{python3_version}
%{_bindir}/avocado-external-runner-3
%{_bindir}/avocado-external-runner
%package -n python-avocado-common
Summary: Avocado common files
License: GPLv2+
%description -n python-avocado-common
Common files (such as configuration) for the Avocado Testing Framework.
%files -n python-avocado-common
%license LICENSE
%{_mandir}/man1/avocado.1.gz
%dir %{_docdir}/avocado
%dir %{_sharedstatedir}/avocado
%dir %{_sysconfdir}/avocado
%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/sysinfo/commands
%config(noreplace) %{_sysconfdir}/avocado/sysinfo/files
%config(noreplace) %{_sysconfdir}/avocado/sysinfo/profilers
%{_sysconfdir}/avocado/scripts/job/pre.d/README
%{_sysconfdir}/avocado/scripts/job/post.d/README
%package -n python3-avocado-plugins-output-html
Summary: Avocado HTML report plugin
License: GPLv2+ and MIT
Requires: python3-avocado == %{version}-%{release}
%description -n python3-avocado-plugins-output-html
Adds to avocado the ability to generate an HTML report at every job results
directory. It also gives the user the ability to write a report on an
arbitrary filesystem location.
%files -n python3-avocado-plugins-output-html
%{python3_sitelib}/avocado_result_html/
%{python3_sitelib}/avocado_framework_plugin_result_html-%{version}-py%{python3_version}.egg-info
%if %{with_resultsdb}
%package -n python3-avocado-plugins-resultsdb
Summary: Avocado plugin to propagate job results to ResultsDB
License: GPLv2+
Requires: python3-avocado == %{version}-%{release}
%description -n python3-avocado-plugins-resultsdb
Allows Avocado to send job results directly to a ResultsDB
server.
%files -n python3-avocado-plugins-resultsdb
%{python3_sitelib}/avocado_resultsdb/
%{python3_sitelib}/avocado_framework_plugin_resultsdb-%{version}-py%{python3_version}.egg-info
%endif
# with_resultsdb
%package -n python3-avocado-plugins-varianter-yaml-to-mux
Summary: Avocado plugin to generate variants out of yaml files
License: GPLv2+
Requires: python3-avocado == %{version}-%{release}
%description -n python3-avocado-plugins-varianter-yaml-to-mux
Can be used to produce multiple test variants with test parameters
defined in a yaml file(s).
%files -n python3-avocado-plugins-varianter-yaml-to-mux
%{python3_sitelib}/avocado_varianter_yaml_to_mux/
%{python3_sitelib}/avocado_framework_plugin_varianter_yaml_to_mux-%{version}-py%{python3_version}.egg-info
%package -n python3-avocado-plugins-golang
Summary: Avocado plugin for execution of golang tests
License: GPLv2+
Requires: python3-avocado == %{version}-%{release}
Requires: golang
%description -n python3-avocado-plugins-golang
Allows Avocado to list golang tests, and if golang is installed,
also run them.
%files -n python3-avocado-plugins-golang
%{python3_sitelib}/avocado_golang/
%{python3_sitelib}/avocado_framework_plugin_golang-%{version}-py%{python3_version}.egg-info
%{_bindir}/avocado-runner-golang
%if ! 0%{?rhel}
%package -n python3-avocado-plugins-ansible
Summary: Avocado Ansible Dependency plugin
License: GPLv2+
Requires: python3-avocado == %{version}-%{release}
Requires: ansible-core
%description -n python3-avocado-plugins-ansible
Adds to Avocado the ability to use ansible modules as dependecies for
tests.
%files -n python3-avocado-plugins-ansible
%{python3_sitelib}/avocado_ansible*
%{python3_sitelib}/avocado_framework_plugin_ansible*
%{_bindir}/avocado-runner-ansible-module
%endif
%package -n python3-avocado-plugins-varianter-pict
Summary: Varianter with combinatorial capabilities by PICT
License: GPLv2+
Requires: python3-avocado == %{version}-%{release}
%description -n python3-avocado-plugins-varianter-pict
This plugin uses a third-party tool to provide variants created by
Pair-Wise algorithms, also known as Combinatorial Independent Testing.
%files -n python3-avocado-plugins-varianter-pict
%{python3_sitelib}/avocado_varianter_pict/
%{python3_sitelib}/avocado_framework_plugin_varianter_pict-%{version}-py%{python3_version}.egg-info
%package -n python3-avocado-plugins-varianter-cit
Summary: Varianter with Combinatorial Independent Testing capabilities
License: GPLv2+
Requires: python3-avocado == %{version}-%{release}
%description -n python3-avocado-plugins-varianter-cit
A varianter plugin that generates variants using Combinatorial
Independent Testing (AKA Pair-Wise) algorithm developed in
collaboration with CVUT Prague.
%files -n python3-avocado-plugins-varianter-cit
%{python3_sitelib}/avocado_varianter_cit/
%{python3_sitelib}/avocado_framework_plugin_varianter_cit-%{version}-py%{python3_version}.egg-info
%package -n python3-avocado-plugins-result-upload
Summary: Avocado plugin propagate job results to a remote host
License: GPLv2+
Requires: python3-avocado == %{version}-%{release}
%description -n python3-avocado-plugins-result-upload
This optional plugin is intended to upload the Avocado Job results to
a dedicated sever.
%files -n python3-avocado-plugins-result-upload
%{python3_sitelib}/avocado_result_upload/
%{python3_sitelib}/avocado_framework_plugin_result_upload-%{version}-py%{python3_version}.egg-info
%package -n python3-avocado-plugins-result-mail
Summary: Avocado Mail Notification for Jobs
License: GPLv2+
Requires: python3-avocado == %{version}-%{release}
%description -n python3-avocado-plugins-result-mail
The Mail result plugin enables you to receive email notifications
for job start and completion events within the Avocado testing framework.
%files -n python3-avocado-plugins-result-mail
%{python3_sitelib}/avocado_result_mail*
%{python3_sitelib}/avocado_framework_plugin_result_mail*
%if ! 0%{?rhel}
%package -n python3-avocado-plugins-spawner-remote
Summary: Avocado Plugin to spawn tests on a remote host
License: GPLv2+
Requires: python3-avocado == %{version}-%{release}
%description -n python3-avocado-plugins-spawner-remote
This optional plugin is intended to spawn tests on a remote host.
%files -n python3-avocado-plugins-spawner-remote
%{python3_sitelib}/avocado_spawner_remote*
%{python3_sitelib}/avocado_framework_plugin_spawner_remote*
%endif
%package -n python-avocado-examples
Summary: Avocado Test Framework Example Tests
License: GPLv2+
# documentation does not require main package, but needs to be in lock-step if present
Conflicts: python3-avocado < %{version}-%{release}, python3-avocado > %{version}-%{release}
%description -n python-avocado-examples
The set of example tests present in the upstream tree of the Avocado framework.
Some of them are used as functional tests of the framework, others serve as
examples of how to write tests on your own.
%files -n python-avocado-examples
%license LICENSE
%dir %{_docdir}/avocado
%{_docdir}/avocado/gdb-prerun-scripts
%{_docdir}/avocado/plugins
%{_docdir}/avocado/tests
%{_docdir}/avocado/varianter_cit
%{_docdir}/avocado/varianter_pict
%{_docdir}/avocado/yaml_to_mux
%package -n python-avocado-bash
Summary: Avocado Test Framework Bash Utilities
License: GPLv2+ and GPLv2
Requires: python-avocado-common == %{version}-%{release}
%description -n python-avocado-bash
A small set of utilities to interact with Avocado from the Bourne
Again Shell code (and possibly other similar shells).
%files -n python-avocado-bash
%license LICENSE
%dir %{_libexecdir}/avocado
%{_libexecdir}/avocado/avocado-bash-utils
%{_libexecdir}/avocado/avocado_debug
%{_libexecdir}/avocado/avocado_error
%{_libexecdir}/avocado/avocado_info
%{_libexecdir}/avocado/avocado_warn
%changelog
* Fri Oct 10 2025 Cleber Rosa <crosa@redhat.com> - 112.0-1
- Sync with upstream release 112.0
- Removed python3-elementpath build requirement
- Made the remote spawner a proper sub package
- Packaged JSON schema files
- Introduced new sub package for mail plugin
- Removed the pinning of markupsafe on Fedora 42 and later
- Packaged avocado-runner-pip
- Packaged avocado-runner-vmimage
- Provide requirements for running the functional test
nrunner.py:TaskRunStatusService.test_task_status_service_lost
- Require gcc, gdb and gdb-gdbserver for tests
* Fri Jul 25 2025 Fedora Release Engineering <releng@fedoraproject.org> - 92.3-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Tue Jun 03 2025 Python Maint <python-maint@redhat.com> - 92.3-5
- Rebuilt for Python 3.14
* Mon Jan 20 2025 Miro Hrončok <mhroncok@redhat.com> - 92.3-4
- Loosen the PyYAML version requirement in python3-avocado-plugins-varianter-yaml-to-mux
* Mon Jan 20 2025 Cleber Rosa <crosa@redhat.com> - 92.3-3
- convert remaining licenses to SPDX
* Sat Jan 18 2025 Fedora Release Engineering <releng@fedoraproject.org> - 92.3-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Mon Aug 19 2024 Cleber Rosa <crosa@redhat.com> - 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ý <msuchy@redhat.com> - 92.1-8
- convert license to SPDX
* Fri Jul 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 92.1-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Fri Jun 07 2024 Python Maint <python-maint@redhat.com> - 92.1-6
- Rebuilt for Python 3.13
* Mon Jan 29 2024 Fedora Release Engineering <releng@fedoraproject.org> - 92.1-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Fri Jan 26 2024 Fedora Release Engineering <releng@fedoraproject.org> - 92.1-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Sun Jan 21 2024 Fedora Release Engineering <releng@fedoraproject.org> - 92.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Fri Jul 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 92.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Mon Jul 17 2023 Cleber Rosa <crosa@redhat.com> - 92.1-1
- Updated to 92.1
- Support building and running under Python 3.12 for F39
* Wed Jun 14 2023 Python Maint <python-maint@redhat.com> - 92.0-3
- Rebuilt for Python 3.12
* Fri Jan 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 92.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Tue Aug 9 2022 Cleber Rosa <crosa@redhat.com> - 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 <releng@fedoraproject.org> - 82.0-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Tue Jun 21 2022 Python Maint <python-maint@redhat.com> - 82.0-6
- Rebuilt for Python 3.11
* Fri Jan 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 82.0-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Wed Jul 28 2021 Merlin Mathesius <mmathesi@redhat.com> - 82.0-4
- Loosen jinja2 version requirement to fix FTBFS in Rawhide
* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 82.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Thu Mar 18 2021 Merlin Mathesius <mmathesi@redhat.com> - 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 <cleber@redhat.com> - 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 <cleber@redhat.com> - 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 <cleber@redhat.com> - 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 <mmathesi@redhat.com> - 78.0-1
- Sync with upstream release 78.0.
* Tue Mar 17 2020 Merlin Mathesius <mmathesi@redhat.com> - 77.0-1
- Sync with upstream release 77.0.
* Mon Mar 09 2020 Merlin Mathesius <mmathesi@redhat.com> - 76.0-1
- Sync with upstream release 76.0.
* Mon Jan 20 2020 Merlin Mathesius <mmathesi@redhat.com> - 75.1-1
- Sync with upstream release 75.1.
* Mon Dec 23 2019 Merlin Mathesius <mmathesi@redhat.com> - 74.0-1
- Sync with upstream release 74.0.
* Wed Nov 27 2019 Merlin Mathesius <mmathesi@redhat.com> - 73.0-1
- Sync with upstream release 73.0.
- Adjustments to build for RHEL 8.
* Wed Oct 02 2019 Merlin Mathesius <mmathesi@redhat.com> - 72.0-1
- Sync with upstream release 72.0.
* Wed Aug 28 2019 Merlin Mathesius <mmathesi@redhat.com> - 71.0-1
- Sync with upstream release 71.0.
* Wed Jun 26 2019 Merlin Mathesius <mmathesi@redhat.com> - 70.0-1
- Sync with upstream release 70.0.
- Drop all Python 2 support from SPEC file.
* Wed May 22 2019 Merlin Mathesius <mmathesi@redhat.com> - 69.0-4
- pyliblzma is Python 2-only and no longer available as of F31.
- Unversioned executables should now be Python 3.
* Mon May 20 2019 Merlin Mathesius <mmathesi@redhat.com> - 69.0-3
- Drop Python 2 support from F31 and RHEL8 onward.
- Disable components dependent upon Fiber in Fedora 31 and later,
since avocado is currently incompatible with the new Fiber API.
* Tue Mar 19 2019 Merlin Mathesius <mmathesi@redhat.com> - 69.0-2
- python2-sphinx is no longer available or needed as of F31
* Wed Feb 27 2019 Merlin Mathesius <mmathesi@redhat.com> - 69.0-1
- Sync with upstream release 69.0.
* Fri Feb 22 2019 Merlin Mathesius <mmathesi@redhat.com> - 68.0-1
- Sync with upstream release 68.0.
* Thu Jan 31 2019 Merlin Mathesius <mmathesi@redhat.com> - 67.0-1
- Sync with upstream release 67.0.
- genisoimage, libcdio, and psmisc added as build deps so iso9660 tests run.
- Replace pystache requirement with jinja2.
- glibc-all-langpacks added as build dep for F30+ so vmimage tests run.
- python2-resultsdb_api package has been removed in F30 so
python2-avocado-plugins-resultsdb was also disabled.
* Wed Nov 21 2018 Merlin Mathesius <mmathesi@redhat.com> - 66.0-1
- Sync with upstream release 66.0.
- python2-pycdlib package has been removed in F30 as part of
https://fedoraproject.org/wiki/Changes/Mass_Python_2_Package_Removal
* Thu Oct 04 2018 Merlin Mathesius <mmathesi@redhat.com> - 65.0-1
- Sync with upstream release 65.0.
* Tue Aug 28 2018 Merlin Mathesius <mmathesi@redhat.com> - 64.0-1
- Sync with upstream release 64.0.
* Thu Jul 26 2018 Merlin Mathesius <mmathesi@redhat.com> - 63.0-2
- Added missing python[2]-enum34 requirement.
* Mon Jul 23 2018 Merlin Mathesius <mmathesi@redhat.com> - 63.0-1
- Sync with upstream release 63.0. (BZ#1602175)
Include upstream patches needed to build for Rawhide.
* Wed Jun 13 2018 Merlin Mathesius <mmathesi@redhat.com> - 62.0-1
- Sync with upstream release 62.0. (BZ#1590572)
- Correct libvirt dependency for EPEL7/RHEL7
* Thu May 17 2018 Merlin Mathesius <mmathesi@redhat.com> - 61.0-1
- Sync with upstream release 61.0.
- Packaging updates for Python 3.
- Reorganize SPEC file.
* Mon Apr 9 2018 Cleber Rosa <cleber@redhat.com> - 52.1-2
- Added Fedora CI tests
* Tue Apr 03 2018 Merlin Mathesius <mmathesi@redhat.com> - 52.1-1
- Sync with upstream release 52.1 (LTS series).
- Correct deprecated use of unversioned python.
* Mon Mar 26 2018 Iryna Shcherbina <ishcherb@redhat.com> - 52.0-5
- Update Python 2 dependency declarations to new packaging standards
(See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3)
* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 52.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Wed Aug 09 2017 Merlin Mathesius <mmathesi@redhat.com> - 52.0-3
- Fix FTBFS error by disabling selfcheck producing false failures
- Update SPEC to use pkgname instead of srcname macro where appropriate
* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 52.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Thu Jun 29 2017 Merlin Mathesius <mmathesi@redhat.com> - 52.0-1
- Sync with upstream release 52.0. (BZ#1465409)
* Wed Jun 14 2017 Merlin Mathesius <mmathesi@redhat.com> - 51.0-1
- Sync with upstream release 51.0. (BZ#1460837)
- Disable selftests when libvirt may not be available.
* Wed May 17 2017 Merlin Mathesius <mmathesi@redhat.com> - 50.0-1
- Sync with upstream release 50.0. (BZ#1431413)
- Be explicit about selftest level run on check.
* Tue Apr 25 2017 Merlin Mathesius <mmathesi@redhat.com> - 49.0-1
- Sync with upstream release 49.0. (BZ#1431413)
* Tue Apr 18 2017 Merlin Mathesius <mmathesi@redhat.com> - 48.0-1
- Sync with upstream release 48.0. (BZ#1431413)
- Allow rel_build macro to be defined outside of the SPEC file.
* Mon Mar 27 2017 Merlin Mathesius <mmathesi@redhat.com> - 47.0-1
- Sync with upstream release 47.0.
- Enable self-tests during build.
- Add example test to be run by Taskotron.
* Mon Feb 27 2017 Merlin Mathesius <mmathesi@redhat.com> - 46.0-2
- Incorporate upstream SPEC file changes to split plugins into subpackages.
- Remove obsolete CC-BY-SA license, which went away with the halflings font.
* Tue Feb 14 2017 Merlin Mathesius <mmathesi@redhat.com> - 46.0-1
- Sync with upstream release 46.0.
- Remove halflings license since font was removed from upstream.
- SPEC updates to easily switch between release and snapshot builds.
* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 43.0-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Tue Jan 10 2017 Merlin Mathesius <mmathesi@redhat.com> - 43.0-7
- SPEC updates to build and install for EPEL.
* Mon Nov 21 2016 Merlin Mathesius <mmathesi@redhat.com> - 43.0-6
- Initial packaging for Fedora.

View file

@ -1 +0,0 @@
SHA512 (avocado-112.0.tar.gz) = 1872eda730f5cd28f0562732464ce14b2c7731cedb298fcc4b093a04235d26cc5e3db7f92c3ae3edcd6104ad2db4fce66fa7a6148da754e4bdb8120fa12a75a3

View file

@ -1,347 +0,0 @@
import os
from avocado import Test
from avocado.utils import gdb, genio, process
class GdbTest(Test):
"""
Execute the gdb test
:avocado: tags=requires_c_compiler
"""
VALID_CMDS = ["-list-target-features",
"-break-info",
"-break-list",
"-thread-info",
"-stack-info-frame",
"-stack-info-depth"]
INVALID_CMDS = ["-foobar",
"-magic8ball",
"-find-me-the-bug",
"-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}')
@staticmethod
def is_process_alive(process): # pylint: disable=W0621
"""
Checks if a process is still alive
:param process: a :class:`subprocess.POpen` instance
:type process: :class:`subprocess.POpen`
:returns: True or False
:rtype: bool
"""
return process.poll() is None
def test_start_exit(self):
"""
Tests execution of multiple GDB instances without any blocking or race
"""
self.log.info("Testing execution of multiple GDB instances")
process_count = 10
gdb_instances = []
for i in range(0, process_count):
gdb_instances.append(gdb.GDB())
for i in range(0, process_count):
self.assertEqual(gdb_instances[i].exit(), 0)
def test_existing_commands_raw(self):
"""
Tests the GDB response to commands that exist and to those that do not
"""
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:]}"
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:]}"
r = g.cmd(info_cmd)
self.assertEqual(r.result.result.command.exists, 'false')
def test_existing_commands(self):
g = gdb.GDB()
self.log.info("Testing existing (valid) GDB commands using utility "
"methods")
for cmd in self.VALID_CMDS:
self.assertTrue(g.cmd_exists(cmd))
g.cmd(cmd)
self.log.info("Testing non-existing (invalid) GDB commands using "
"utility methods")
for cmd in self.INVALID_CMDS:
self.assertFalse(g.cmd_exists(cmd))
def test_load_set_breakpoint_run_exit_raw(self):
"""
Test a common GDB cycle using raw commands: load, set break, run, exit
"""
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}"
r = g.cmd(file_cmd)
self.assertEqual(r.result.class_, 'done')
break_cmd = "-break-insert 5"
r = g.cmd(break_cmd)
self.assertEqual(r.result.class_, 'done')
self.assertEqual(r.result.result.bkpt.number, '1')
self.assertEqual(r.result.result.bkpt.enabled, 'y')
break_del_cmd = "-break-delete 1"
r = g.cmd(break_del_cmd)
self.assertEqual(r.result.class_, 'done')
run_cmd = "-exec-run"
r = g.cmd(run_cmd)
self.assertEqual(r.result.class_, 'running')
g.cmd("-gdb-exit")
self.assertEqual(g.process.wait(), 0)
def test_load_set_breakpoint_run_exit(self):
"""
Test a common GDB cycle: load, set break, delete break, run, exit
"""
self.log.info("Testing a common GDB cycle")
g = gdb.GDB()
g.set_file(self.return99_binary_path)
g.set_break("5")
g.del_break(1)
g.run()
g.exit()
def test_generate_core(self):
"""
Load a file that will cause a segfault and produce a core dump
"""
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}"
r = g.cmd(file_cmd)
self.assertEqual(r.result.class_, 'done')
run_cmd = "-exec-run"
r = g.cmd(run_cmd)
self.assertEqual(r.result.class_, 'running')
other_messages = g.read_until_break()
core_path = None
for msg in other_messages:
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 = 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')
self.assertTrue(os.path.exists(core_path))
g.exit()
def test_set_multiple_break(self):
"""
Tests that multiple breakpoints do not interfere with each other
"""
self.log.info("Testing setting multiple breakpoints")
g = gdb.GDB()
g.set_file(self.return99_binary_path)
g.set_break('empty')
g.set_break('7')
g.exit()
def test_disconnect_raw(self):
"""
Connect/disconnect repeatedly from a remote debugger using raw commands
"""
self.log.info("Testing connecting and disconnecting repeatedly using "
"raw commands")
s = gdb.GDBServer()
g = gdb.GDB()
# Do 100 cycle of target (kind of connects) and disconnects
for _ in range(0, 100):
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 = f'-target-select extended-remote :{s.port}'
r = g.cmd(cmd)
self.assertEqual(r.result.class_, 'connected')
r = g.cli_cmd('monitor exit')
self.assertEqual(r.result.class_, 'done')
g.exit()
s.exit()
def test_disconnect(self):
"""
Connect/disconnect repeatedly from a remote debugger using utilities
"""
self.log.info("Testing connecting and disconnecting repeatedly")
s = gdb.GDBServer()
g = gdb.GDB()
for _ in range(0, 100):
r = g.connect(s.port)
self.assertEqual(r.result.class_, 'connected')
r = g.disconnect()
self.assertEqual(r.result.class_, 'done')
g.exit()
s.exit()
def test_remote_exec(self):
"""
Tests execution on a remote target
"""
self.log.info("Testing execution on a remote target")
hit_breakpoint = False
s = gdb.GDBServer()
g = gdb.GDB()
cmd = f'-file-exec-and-symbols {self.return99_binary_path}'
r = g.cmd(cmd)
self.assertEqual(r.result.class_, 'done')
cmd = f'set remote exec-file {self.return99_binary_path}'
r = g.cmd(cmd)
self.assertEqual(r.result.class_, 'done')
cmd = f"-break-insert {'main'}"
r = g.cmd(cmd)
self.assertEqual(r.result.class_, 'done')
r = g.cmd('-exec-run')
other_messages = g.read_until_break()
for msg in other_messages:
parsed_msg = gdb.parse_mi(msg.decode())
if (hasattr(parsed_msg, 'class_') and
parsed_msg.class_ == 'stopped' and
parsed_msg.result.reason == 'breakpoint-hit'):
hit_breakpoint = True
self.assertTrue(hit_breakpoint)
g.exit()
s.exit()
def test_stream_messages(self):
"""
Tests if the expected response appears in the result stream messages
"""
self.log.info("Testing that messages appears in the result stream")
g = gdb.GDB()
r = g.cmd("-gdb-version")
self.assertIn("GNU GPL version", r.get_stream_messages_text())
def test_connect_multiple_clients(self):
"""
Tests two or more connections to the same server raise an exception
"""
self.log.info("Testing that multiple clients cannot connect at once")
s = gdb.GDBServer()
c1 = gdb.GDB()
c1.connect(s.port)
c2 = gdb.GDB()
with self.assertRaises(gdb.UnexpectedResponseError):
c2.connect(s.port)
s.exit()
def test_server_exit(self):
"""
Tests that the server is shutdown by using a monitor exit command
"""
self.log.info("Testing that a single server exits cleanly")
s = gdb.GDBServer()
s.exit()
self.assertFalse(self.is_process_alive(s.process))
def test_multiple_servers(self):
"""
Tests multiple server instances without any blocking or race condition
"""
self.log.info("Testing execution of multiple GDB server instances")
process_count = 10
server_instances = []
for i in range(0, process_count):
s = gdb.GDBServer()
c = gdb.GDB()
c.connect(s.port)
c.cmd('show-version')
c.disconnect()
server_instances.append(s)
for i in range(0, process_count):
self.assertTrue(self.is_process_alive(server_instances[i].process))
server_instances[i].exit()
self.assertFalse(self.is_process_alive(server_instances[i].process))
def test_server_stderr(self):
self.log.info('Testing server stderr collection')
s = gdb.GDBServer()
s.exit()
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}"
self.assertIn(listening_line, stderr_lines)
def test_server_stdout(self):
self.log.info('Testing server stdout/stderr collection')
s = gdb.GDBServer()
c = gdb.GDB()
c.connect(s.port)
c.set_file(self.return99_binary_path)
c.run()
s.exit()
self.assertTrue(os.path.exists(s.stdout_path))
self.assertTrue(os.path.exists(s.stderr_path))
stdout_lines = genio.read_all_lines(s.stdout_path)
self.assertIn("return 99", stdout_lines)
@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(b"qSupported")
r.cmd(b"qfThreadInfo")
s.exit()

View file

@ -1,47 +0,0 @@
#include <stdio.h>
#include <stdlib.h>
void empty()
{
}
void write_stdout()
{
fprintf(stdout, "testing output to stdout\n");
}
void write_stderr()
{
fprintf(stderr, "testing output to stderr\n");
}
int forkme()
{
int pid;
pid = fork();
if (pid != 0)
pid = fork();
if (pid != 0)
pid = fork();
return pid;
}
int main(int argc, char *argv[])
{
int exit_status = 99;
if (argc > 1)
exit_status = atoi(argv[1]);
empty();
write_stdout();
write_stderr();
if (forkme()) {
fprintf(stdout, "return %i\n", exit_status);
}
return exit_status;
}

View file

@ -1,9 +0,0 @@
#include <stdio.h>
int main()
{
int *p = NULL;
*p = 0xdead;
return 0;
}

View file

@ -1,29 +0,0 @@
- hosts: localhost
roles:
- role: standard-test-avocado
tests:
- gdbtest.py:GdbTest.test_start_exit
- gdbtest.py:GdbTest.test_existing_commands
- gdbtest.py:GdbTest.test_existing_commands_raw
- gdbtest.py:GdbTest.test_load_set_breakpoint_run_exit_raw
- gdbtest.py:GdbTest.test_load_set_breakpoint_run_exit
- gdbtest.py:GdbTest.test_generate_core
- gdbtest.py:GdbTest.test_set_multiple_break
- gdbtest.py:GdbTest.test_disconnect_raw
- gdbtest.py:GdbTest.test_disconnect
- gdbtest.py:GdbTest.test_remote_exec
- gdbtest.py:GdbTest.test_stream_messages
- gdbtest.py:GdbTest.test_connect_multiple_clients
- gdbtest.py:GdbTest.test_server_exit
- gdbtest.py:GdbTest.test_server_stdout
- gdbtest.py:GdbTest.test_server_stderr
- gdbtest.py:GdbTest.test_multiple_servers
- gdbtest.py:GdbTest.test_interactive
- gdbtest.py:GdbTest.test_interactive_args
- gdbtest.py:GdbTest.test_exit_status
- gdbtest.py:GdbTest.test_interactive_stdout
- gdbtest.py:GdbTest.test_remote
required_packages:
- gcc
- gdb
- gdb-gdbserver