Compare commits

..

No commits in common. "c9-beta" and "c10s" have entirely different histories.

11 changed files with 635 additions and 199 deletions

20
.gitignore vendored
View File

@ -1 +1,19 @@
SOURCES/libnvme-1.13.tar.gz
/libnvme-1.0-rc4.tar.gz
/libnvme-1.0-rc5.tar.gz
/libnvme-1.0-rc6.tar.gz
/libnvme-1.0-rc7.tar.gz
/libnvme-1.0-rc8.tar.gz
/libnvme-1.0.tar.gz
/libnvme-1.1-rc0.tar.gz
/libnvme-1.1.tar.gz
/libnvme-1.2.tar.gz
/libnvme-1.3.tar.gz
/libnvme-1.4.tar.gz
/libnvme-1.5.tar.gz
/libnvme-1.6.tar.gz
/libnvme-1.7.1.tar.gz
/libnvme-1.9.tar.gz
/libnvme-1.10.tar.gz
/libnvme-1.11.1.tar.gz
/libnvme-1.13.tar.gz
/libnvme-1.15.tar.gz

View File

@ -1 +0,0 @@
74b218672872a2ac194af2c34c06e66b1001b5f6 SOURCES/libnvme-1.13.tar.gz

View File

@ -0,0 +1,65 @@
From 97886cb68d238ccbbed804a275851f63e490b22f Mon Sep 17 00:00:00 2001
From: Daniel Wagner <wagi@kernel.org>
Date: Thu, 31 Jul 2025 11:24:15 +0200
Subject: [PATCH] tree: do not try to strdup NULL pointer
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
blktests nvme/003 using the loop transport fails because nvme_ctrl_alloc
tries to strdup NULL pointers (address or sysfs_dir).
Introduce a 'safe' strdup version and start this version.
Reported-by: Tomáš Bžatek <tbzatek@redhat.com>
Reported-by: Yi Zhang <yi.zhang@redhat.com>
Fixes: e64249888521 ("tree: free ctrl attributes when (re)configure ctrl")
Signed-off-by: Daniel Wagner <wagi@kernel.org>
---
src/nvme/private.h | 7 +++++++
src/nvme/tree.c | 6 +++---
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/src/nvme/private.h b/src/nvme/private.h
index ac594967..f2ba299b 100644
--- a/src/nvme/private.h
+++ b/src/nvme/private.h
@@ -335,4 +335,11 @@ void __nvme_mi_mctp_set_ops(const struct __mi_mctp_socket_ops *newops);
int __nvme_import_keys_from_config(nvme_host_t h, nvme_ctrl_t c,
long *keyring_id, long *key_id);
+static inline char *xstrdup(const char *s)
+{
+ if (!s)
+ return NULL;
+ return strdup(s);
+}
+
#endif /* _LIBNVME_PRIVATE_H */
diff --git a/src/nvme/tree.c b/src/nvme/tree.c
index 9aaaa1b5..d7970743 100644
--- a/src/nvme/tree.c
+++ b/src/nvme/tree.c
@@ -2073,8 +2073,8 @@ static int nvme_reconfigure_ctrl(nvme_root_t r, nvme_ctrl_t c, const char *path,
}
closedir(d);
- c->name = strdup(name);
- c->sysfs_dir = strdup(path);
+ c->name = xstrdup(name);
+ c->sysfs_dir = xstrdup(path);
c->firmware = nvme_get_ctrl_attr(c, "firmware_rev");
c->model = nvme_get_ctrl_attr(c, "model");
c->state = nvme_get_ctrl_attr(c, "state");
@@ -2230,7 +2230,7 @@ skip_address:
return NULL;
}
FREE_CTRL_ATTR(c->address);
- c->address = strdup(addr);
+ c->address = xstrdup(addr);
if (s->subsystype && !strcmp(s->subsystype, "discovery"))
c->discovery_ctrl = true;
ret = nvme_reconfigure_ctrl(r, c, path, name);
--
2.47.3

3
README.md Normal file
View File

@ -0,0 +1,3 @@
# libnvme
The libnvme package

View File

@ -1,197 +0,0 @@
# RHEL 8 compatibility
%{!?version_no_tilde: %define version_no_tilde %{shrink:%(echo '%{version}' | tr '~' '-')}}
Name: libnvme
Summary: Linux-native nvme device management library
Version: 1.13
Release: 1%{?dist}
License: LGPL-2.1-or-later
URL: https://github.com/linux-nvme/libnvme
Source0: %{url}/archive/v%{version_no_tilde}/%{name}-%{version_no_tilde}.tar.gz
BuildRequires: gcc gcc-c++
BuildRequires: swig
BuildRequires: python3-devel
BuildRequires: meson >= 0.62
BuildRequires: json-c-devel >= 0.13
BuildRequires: openssl-devel
BuildRequires: keyutils-libs-devel
Requires: keyutils-libs
%description
Provides type definitions for NVMe specification structures,
enumerations, and bit fields, helper functions to construct,
dispatch, and decode commands and payloads, and utilities to connect,
scan, and manage nvme devices on a Linux system.
%package devel
Summary: Development files for %{name}
Requires: %{name}%{?_isa} = %{version}-%{release}
%description devel
This package provides header files to include and libraries to link with
for Linux-native nvme device management.
%package doc
Summary: Reference manual for libnvme
BuildArch: noarch
BuildRequires: perl-interpreter
BuildRequires: python3-sphinx
BuildRequires: python3-sphinx_rtd_theme
%description doc
This package contains the reference manual for %{name}.
%package -n python3-libnvme
Summary: Python3 bindings for libnvme
Requires: %{name}%{?_isa} = %{version}-%{release}
Provides: python3-nvme = %{version}-%{release}
%{?python_provide:%python_provide python3-libnvme}
%description -n python3-libnvme
This package contains Python bindings for libnvme.
%prep
%autosetup -p1 -n %{name}-%{version_no_tilde}
%build
%meson -Dpython=enabled -Dlibdbus=disabled -Ddocs=all -Ddocs-build=true -Dhtmldir=%{_pkgdocdir} -Dliburing=disabled
%meson_build
%install
%meson_install
%{__install} -pm 644 README.md %{buildroot}%{_pkgdocdir}
%{__install} -pm 644 doc/config-schema.json %{buildroot}%{_pkgdocdir}
mv %{buildroot}%{_pkgdocdir}/nvme/html %{buildroot}%{_pkgdocdir}/html
rm -rf %{buildroot}%{_pkgdocdir}/nvme
mv %{buildroot}/usr/*.rst %{buildroot}%{_pkgdocdir}/
%ldconfig_scriptlets
%files
%license COPYING ccan/licenses/*
%{_libdir}/libnvme.so.1
%{_libdir}/libnvme.so.1.13.0
%{_libdir}/libnvme-mi.so.1
%{_libdir}/libnvme-mi.so.1.13.0
%files devel
%{_libdir}/libnvme.so
%{_libdir}/libnvme-mi.so
%{_includedir}/libnvme.h
%{_includedir}/libnvme-mi.h
%dir %{_includedir}/nvme
%{_includedir}/nvme/*.h
%{_libdir}/pkgconfig/*.pc
%files doc
%doc %{_pkgdocdir}
%{_mandir}/man2/*.2*
%files -n python3-libnvme
%dir %{python3_sitearch}/libnvme
%{python3_sitearch}/libnvme/*
%changelog
* Tue Apr 29 2025 Maurizio Lombardi <mlombard@redhat.com> - 1.13-1
- Update to version 1.13 (RHEL-88847)
* Tue Nov 19 2024 Maurizio Lombardi <mlombard@redhat.com> - 1.11.1-1
- TLS Fixes (RHEL-53980)
* Tue Nov 12 2024 Maurizio Lombardi <mlombard@redhat.com> - 1.11-1
- Update libnvme to version 1.11 (RHEL-67145)
* Mon Oct 07 2024 Maurizio Lombardi <mlombard@redhat.com> - 1.10-1
- Update to latest upstream version RHEL-61573
* Thu Aug 01 2024 Maurizio Lombardi <mlombard@redhat.com> - 1.9-3
- Backport fix for RHEL-49544
* Wed Jul 24 2024 Tomas Bzatek <tbzatek@redhat.com> - 1.9-2
- Backport URI parser API
* Tue May 07 2024 Maurizio Lombardi <mlombard@redhat.com> - 1.9-1
- Rebase to version 1.9
* Tue Apr 02 2024 Maurizio Lombardi <mlombard@redhat.com> - 1.8-1
- Update to version 1.8
* Fri Nov 03 2023 Maurizio Lombardi <mlombard@redhat.com> - 1.6-1
- Update to version 1.6, including the stack-smashing fixes
* Mon Jul 17 2023 John Meneghini <jmeneghi@redhat.com> - 1.4-7
- Fix BZ#2223429
* Mon Jun 05 2023 Maurizio Lombardi <mlombard@redhat.com> - 1.4-6
- Rebuild for BZ2212307
* Tue May 16 2023 Maurizio Lombardi <mlombard@redhat.com> - 1.4-5
- Add support to NBFT (BZ2188516)
* Mon May 08 2023 Maurizio Lombardi <mlombard@redhat.com> - 1.4-4
- Fix BZ#2190206
* Fri May 05 2023 Maurizio Lombardi <mlombard@redhat.com> - 1.4-3
- Fix Jira RHEL-258
* Thu Apr 06 2023 Maurizio Lombardi <mlombard@redhat.com> - 1.4-2
- Rebuild the package
* Mon Apr 03 2023 Maurizio Lombardi <mlombard@redhat.com> - 1.4-1
- Update to version 1.4
* Thu Jan 12 2023 John Meneghini <jmeneghi@redhat.com> - 1.2-2
- Fix BZ2158264
* Fri Nov 04 2022 Maurizio Lombardi <mlombard@redhat.com> - 1.2-1
- Update to upstream version v1.2
* Mon Sep 19 2022 Maurizio Lombardi <mlombard@redhat.com> - 1.1-1
- Update to upstream version v1.1
* Fri Jun 24 2022 Maurizio Lombardi <mlombard@redhat.com> - 1.0-5
- Rebuild for RHEL9.1
* Thu Jun 09 2022 Maurizio Lombardi <mlombard@redhat.com> - 1.0-4
- Add gating tests
* Wed Jun 01 2022 Maurizio Lombardi <mlombard@redhat.com> - 1.0-3
- Rebuild for RHEL 9.1
* Wed Apr 27 2022 Maurizio Lombardi <mlombard@redhat.com> - 1.0-2
- Porting to RHEL 9
* Mon Apr 11 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.0-1
- Upstream v1.0 release
* Fri Apr 01 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.0~rc8-1
- Upstream v1.0 Release Candidate 8
* Wed Mar 23 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.0~rc7-1
- Upstream v1.0 Release Candidate 7
- Renamed python3-nvme subpackage to python3-libnvme
* Mon Mar 14 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.0~rc6-1
- Upstream v1.0 Release Candidate 6
* Fri Mar 04 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.0~rc5-1
- Upstream v1.0 Release Candidate 5
* Mon Feb 28 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.0~rc4-1
- Upstream v1.0 Release Candidate 4
* Fri Feb 11 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.0~rc3-1
- Upstream v1.0 Release Candidate 3
* Tue Feb 01 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.0~rc2-1
- Upstream v1.0 Release Candidate 2
* Thu Jan 27 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.0~rc1-1
- Upstream v1.0 Release Candidate 1
* Mon Jan 17 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.0~rc0-1
- Upstream v1.0 Release Candidate 0
* Wed Oct 20 2021 Tomas Bzatek <tbzatek@redhat.com> - 0.0.1-1.git1fe38d6
- Initial packaging

6
gating.yaml Normal file
View File

@ -0,0 +1,6 @@
--- !Policy
product_versions:
- rhel-10
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional}

229
libnvme.spec Normal file
View File

@ -0,0 +1,229 @@
# RHEL 8 compatibility
%{!?version_no_tilde: %define version_no_tilde %{shrink:%(echo '%{version}' | tr '~' '-')}}
Name: libnvme
Summary: Linux-native nvme device management library
Version: 1.15
Release: 3%{?dist}
License: LGPL-2.1-or-later
URL: https://github.com/linux-nvme/libnvme
Source0: %{url}/archive/v%{version_no_tilde}/%{name}-%{version_no_tilde}.tar.gz
Patch0: 0001-tree-do-not-try-to-strdup-NULL-pointer.patch
BuildRequires: gcc gcc-c++
BuildRequires: swig
BuildRequires: python3-devel
BuildRequires: meson >= 0.62
BuildRequires: json-c-devel >= 0.13
BuildRequires: openssl-devel
BuildRequires: dbus-devel
BuildRequires: keyutils-libs-devel
%if 0%{?fedora} || 0%{?rhel} > 9
BuildRequires: kernel-headers >= 5.15
%endif
%description
Provides type definitions for NVMe specification structures,
enumerations, and bit fields, helper functions to construct,
dispatch, and decode commands and payloads, and utilities to connect,
scan, and manage nvme devices on a Linux system.
%package devel
Summary: Development files for %{name}
Requires: %{name}%{?_isa} = %{version}-%{release}
%description devel
This package provides header files to include and libraries to link with
for Linux-native nvme device management.
%package doc
Summary: Reference manual for libnvme
BuildArch: noarch
BuildRequires: perl-interpreter
BuildRequires: python3-sphinx
BuildRequires: python3-sphinx_rtd_theme
%description doc
This package contains the reference manual for %{name}.
%package -n python3-libnvme
Summary: Python3 bindings for libnvme
Requires: %{name}%{?_isa} = %{version}-%{release}
Provides: python3-nvme = %{version}-%{release}
Obsoletes: python3-nvme < 1.0~rc7
%{?python_provide:%python_provide python3-libnvme}
%description -n python3-libnvme
This package contains Python bindings for libnvme.
%prep
%autosetup -p1 -n %{name}-%{version_no_tilde}
%build
%meson -Dpython=enabled -Dlibdbus=enabled -Ddocs=all -Ddocs-build=true -Dhtmldir=%{_pkgdocdir} -Dliburing=disabled
%meson_build
%install
%meson_install
%{__install} -pm 644 README.md %{buildroot}%{_pkgdocdir}
%{__install} -pm 644 doc/config-schema.json %{buildroot}%{_pkgdocdir}
mv %{buildroot}%{_pkgdocdir}/nvme/html %{buildroot}%{_pkgdocdir}/html
rm -rf %{buildroot}%{_pkgdocdir}/nvme
mv %{buildroot}/usr/*.rst %{buildroot}%{_pkgdocdir}/
rm -r %{buildroot}%{_pkgdocdir}/html/{.buildinfo,.doctrees/}
%ldconfig_scriptlets
%files
%license COPYING ccan/licenses/*
%{_libdir}/libnvme.so.1
%{_libdir}/libnvme.so.1.15.0
%{_libdir}/libnvme-mi.so.1
%{_libdir}/libnvme-mi.so.1.15.0
%files devel
%{_libdir}/libnvme.so
%{_libdir}/libnvme-mi.so
%{_includedir}/libnvme.h
%{_includedir}/libnvme-mi.h
%dir %{_includedir}/nvme
%{_includedir}/nvme/*.h
%{_libdir}/pkgconfig/*.pc
%files doc
%doc %{_pkgdocdir}
%{_mandir}/man2/*.2*
%files -n python3-libnvme
%dir %{python3_sitearch}/libnvme
%{python3_sitearch}/libnvme/*
%changelog
* Fri Sep 26 2025 Maurizio Lombardi <mlombard@redhat.com> - 1.15-3
- Add a fix for a NULL pointer dereference regression
* Mon Sep 08 2025 Maurizio Lombardi <mlombard@redhat.com> - 1.15-2
- bump version because the side-tag didn't propagate
* Thu Sep 04 2025 Maurizio Lombardi <mlombard@redhat.com> - 1.15-1
- Update to version 1.15 (RHEL-113070)
* Mon May 12 2025 Maurizio Lombardi <mlombard@redhat.com> - 1.13-1
- Update to version 1.13 (RHEL-90418)
* Wed Nov 20 2024 Maurizio Lombardi <mlombard@redhat.com> - 1.11.1-1
- Update to the latest version v1.11.1 (RHEL-68304)
* Mon Oct 21 2024 Maurizio Lombardi <mlombard@redhat.com> - 1.10-1
- Update to version 1.10 (RHEL-63282)
* Fri Jul 26 2024 Maurizio Lombardi <mlombard@redhat.com> - 1.9-4
- Fix RHEL-37611
* Thu Jul 25 2024 Maurizio Lombardi <mlombard@redhat.com> - 1.9-3
- Fix RHEL-46699
* Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 1.9-2
- Bump release for June 2024 mass rebuild
* Fri May 03 2024 Tomas Bzatek <tbzatek@redhat.com> - 1.9-1
- Upstream v1.9 release
* Wed Feb 28 2024 Davide Cavalca <dcavalca@fedoraproject.org> - 1.8-2
- Do not package doctrees to make the package build reproducible
* Wed Feb 14 2024 Tomas Bzatek <tbzatek@redhat.com> - 1.8-1
- Upstream v1.8 release
* Fri Feb 09 2024 Tomas Bzatek <tbzatek@redhat.com> - 1.7.1-4
- nbft: Fix SSNS HFI indexes parsing
- cleanup: Explicitly initialize auto-cleanup variables
* Thu Jan 25 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.7.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Sun Jan 21 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.7.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Thu Dec 28 2023 Tomas Bzatek <tbzatek@redhat.com> - 1.7.1-1
- Upstream v1.7.1 release
* Tue Oct 24 2023 Tomas Bzatek <tbzatek@redhat.com> - 1.6-2
- Backport stack smashing fixes (#2245707)
* Fri Sep 29 2023 Tomas Bzatek <tbzatek@redhat.com> - 1.6-1
- Upstream v1.6 release
* Thu Jul 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.5-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Tue Jul 04 2023 Python Maint <python-maint@redhat.com> - 1.5-2
- Rebuilt for Python 3.12
* Tue Jul 04 2023 Tomas Bzatek <tbzatek@redhat.com> - 1.5-1
- Upstream v1.5 release
* Thu Jun 15 2023 Python Maint <python-maint@redhat.com> - 1.4-3
- Rebuilt for Python 3.12
* Thu Apr 20 2023 Tomas Bzatek <tbzatek@redhat.com> - 1.4-2
- Backport the NBFT parser from git master
* Mon Apr 03 2023 Tomas Bzatek <tbzatek@redhat.com> - 1.4-1
- Upstream v1.4 release
* Tue Jan 31 2023 Tomas Bzatek <tbzatek@redhat.com> - 1.3-1
- Upstream v1.3 release
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Tue Nov 01 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.2-1
- Upstream v1.2 release
* Fri Aug 05 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.1-1
- Upstream v1.1 release
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.1~rc0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Fri Jul 15 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.1~rc0-1
- Upstream v1.1 Release Candidate 0
* Mon Jun 13 2022 Python Maint <python-maint@redhat.com> - 1.0-2
- Rebuilt for Python 3.11
* Mon Apr 11 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.0-1
- Upstream v1.0 release
* Fri Apr 01 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.0~rc8-1
- Upstream v1.0 Release Candidate 8
* Wed Mar 23 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.0~rc7-1
- Upstream v1.0 Release Candidate 7
- Renamed python3-nvme subpackage to python3-libnvme
* Mon Mar 14 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.0~rc6-1
- Upstream v1.0 Release Candidate 6
* Fri Mar 04 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.0~rc5-1
- Upstream v1.0 Release Candidate 5
* Mon Feb 28 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.0~rc4-1
- Upstream v1.0 Release Candidate 4
* Fri Feb 11 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.0~rc3-1
- Upstream v1.0 Release Candidate 3
* Tue Feb 01 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.0~rc2-1
- Upstream v1.0 Release Candidate 2
* Thu Jan 27 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.0~rc1-1
- Upstream v1.0 Release Candidate 1
* Mon Jan 17 2022 Tomas Bzatek <tbzatek@redhat.com> - 1.0~rc0-1
- Upstream v1.0 Release Candidate 0
* Wed Oct 20 2021 Tomas Bzatek <tbzatek@redhat.com> - 0.0.1-1.git1fe38d6
- Initial packaging

1
sources Normal file
View File

@ -0,0 +1 @@
SHA512 (libnvme-1.15.tar.gz) = 7357685b3f47eda445387965420e7885a326a6b60b3da5af4a8bb942d4f924534babbde3d4aae8468c8a2f0ee4971f2896fadc133f4c387d59f9f620ed2450aa

272
tests/include/tc.sh Normal file
View File

@ -0,0 +1,272 @@
#!/bin/bash
# Copyright (c) 2016 Red Hat, Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Author: Yi Zhang <yizhan@redhat.com>
# filename: function
# USAGE
test x$LXT_TC = x || return
LXT_TC=1
#
# print the current date
# usage: d=$(tdate)
#
tdate ()
{
date '+%T' 2>/dev/null
}
#
# print the log information
# usage: tlog "hello world" "WARNING"
#
tlog ()
{
local msg=$1
local log_level=${2:-INFO}
local cur_date=$(tdate)
echo "[$log_level][$cur_date]$msg"
return 0
}
#
# run the cmd and format the log. return the exitint status of cmd
# use the global variables: tSTDOUT and tSTDERR to return the stdout and stderr
# usage: trun "ls"
# trun "ls"; echo $?
# stdout=$tSTDOUT
# stderr=$tSTDERR
#
trun ()
{
local cmd="$*"
_trun_ "$cmd"
}
#
# verify the execution of command
# if the cmd return 0, mark this checkpoint failed and return 1
# if not, mark it passed and return 0
# usage: tnot "ls /not_existing"
#
tnot () {
local cmd="$*"
_trun_ "$cmd" 1
if test $? -eq 0; then
tfail_ "$cmd" ;
else
tpass_ "$cmd" ;
fi
}
#
# verify the execution of command
# if the cmd return 0, mark this checkpoint passed and return 0
# if not, mark it failed and return 1
# usage: tok "ls /"
#
tok ()
{
local cmd="$*"
_trun_ "$cmd" 0
if test $? -eq 0; then
tpass_ "$cmd" ;
else
tfail_ "$cmd" ;
fi
}
#
# verify the execution of command
# if the cmd return 0, mark this checkpoint passed and return 0
# if not, mark it failes and exit
# usage: terr "ls"
#
#terr ()
#{
# tok "$*" || tend
#}
#
# verify the execution of command
# if the cmd return 0, will continue to run the script
# if not, mark it failes and exit
# usage: terr "ls"
#
terr ()
{
local cmd="$*"
_trun_ "$cmd" 0
if test $? -ne 0; then
tfail_ "$cmd" ;
tend ;
fi
}
#
# exit the program and print the log message
# usage: texit "error message" 100
# similar to the exception
#
texit ()
{
msg=$1
err=$2
is_null $err && err=1
test $err -lt 1 || err=1
tlog "$msg" "ERROR"
exit $2
}
#
# print the test report, cleanup the testing bed and close the testing.
# usage: tend
#
tend ()
{
local pcount=$(wc -l $tPASS_FILE | awk '{print $1}')
local fcount=$(wc -l $tFAIL_FILE | awk '{print $1}')
local total=$(( $pcount + $fcount ))
echo "#################################Test Report###############################"
echo "TOTAL : $total"
echo "PASSED : $pcount"
echo "FAILED : $fcount"
cat $tPASS_FILE $tFAIL_FILE
echo "###########################End of running $0########################"
#cleanup
rm -f $tPASS_FILE $tFAIL_FILE $tRETURN_FILE $tSTDERR_FILE
# rm -rf $LXT_TMP_DIR
if [[ $pcount -eq 0 ]] && [[ $total -eq 0 ]];then
exit 0
fi
test $pcount -eq 0 && exit 1
test $pcount -eq $total && exit 0
exit 1
}
#
# private function
#
#
# print the error message and call stack. return 1
#
tfail_ ()
{
local msg=$*
tlog "$msg" "ERROR" >>$tFAIL_FILE
return 1
}
#
# print the sucessful message. return 0
#
tpass_ ()
{
local msg=$*
tlog "$msg" "PASS" >> $tPASS_FILE
return 0
}
_trun_ ()
{
local cmd="$1"
local chk="$2"
local cur_date=$(tdate)
local stdout=$(eval "$cmd" 2>$tSTDERR_FILE; echo $? >$tRETURN_FILE 2>/dev/null)
#timeout -- how to set timeout?
local exit_status=$(< $tRETURN_FILE)
local stderr=$(< $tSTDERR_FILE)
local msg=CMD
#tnot
if test x$chk = x1; then
test $exit_status -eq 0 || msg=PASS
test $exit_status -eq 0 && msg=FAIL
#should let the tester know this is the negative testing
#if cmd return 0 we will return 1 and vice versa
cmd="[NOT] $cmd"
fi
#tok
if test x$chk = x0; then
test $exit_status -eq 0 && msg=PASS
test $exit_status -eq 0 || msg=FAIL
fi
tSTDOUT=$stdout
tSTDERR=$stderr
test $tIGNORE_STDOUT -eq 1 && stdout='redirect the stdout to /dev/null'
test $tIGNORE_STDERR -eq 1 && stderr='redirect the stderr to /dev/null'
echo "[$msg][$cur_date][$HOSTNAME]$cmd"
echo "STDOUT:"
test "x$stdout" = x || echo "$stdout"
echo "STDERR:$stderr"
echo "RETURN:$exit_status"
echo
return $exit_status
}
#
# setup the testing environment
#
_tsetup_ ()
{
LXT_TMP_DIR="/mnt/testarea/lxt";
test -z "$HOSTNAME" && HOSTNAME=$(hostname)
test -d "$LXT_TMP_DIR" || mkdir -p "$LXT_TMP_DIR" >& /dev/null || exit 1
tSTDERR_FILE="$LXT_TMP_DIR/stderr.$$"
test -e "$tSTDERR_FILE" || > "$tSTDERR_FILE" || exit 1
tRETURN_FILE="$LXT_TMP_DIR/return.$$"
test -e "$tRETURN_FILE" || > "$tRETURN_FILE" || exit 1
tPASS_FILE="$LXT_TMP_DIR/tc.pass.$$"
test -e "$tPASS_FILE" || > "$tPASS_FILE" || exit 1
tFAIL_FILE="$LXT_TMP_DIR/tc.fail.$$"
test -e "$tFAIL_FILE" || > "$tFAIL_FILE" || exit 1
}
#
# main
#
# global variables
tIGNORE_STDOUT=0
tIGNORE_STDERR=0
tSTDOUT=
tSTDERR=
#LXT_TMP_DIR
# only used in this file
tPASS_FILE=
tFAIL_FILE=
_tsetup_

29
tests/sanity/runtest.sh Executable file
View File

@ -0,0 +1,29 @@
#!/bin/bash
# Copyright (c) 2016 Red Hat, Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Author: Yi Zhang <yizhan@redhat.com>
#set -x
source ../include/tc.sh || exit 200
tlog "running $0"
tok "yum -y reinstall libnvme"
tok "yum -y remove libnvme"
tok "yum -y install libnvme"
tend

11
tests/tests.yml Normal file
View File

@ -0,0 +1,11 @@
- hosts: localhost
roles:
- role: standard-test-basic
tags:
- classic
tests:
- simple:
dir: sanity
run: ./runtest.sh
required_packages:
- which