summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPanu Matilainen <pmatilai@redhat.com>2022-10-11 10:24:57 +0300
committerMichal Domonkos <mdomonko@redhat.com>2023-03-13 15:32:25 +0100
commit448d68a67144f284c4fc2551ce3f5b34a99c84f1 (patch)
treeabdad9bcd910ec313136a939352e5fc843e417c6
parentef1e889d0d83410878aaaea88ae9b8910064b836 (diff)
downloadrpm-448d68a67144f284c4fc2551ce3f5b34a99c84f1.tar.gz
Add a whole bunch of epoch behavior install tests
Backport notes: Replace "~/.rpmmacros" with a non-tilde default path due to a bug in the bundled glob(3) implementation which doesn't yield any matches for a "~" pattern in a fakechroot environment where FAKECHROOT_BASE and HOME both point at the same directory (thus preventing RPM from picking up the %_query_all_fmt macro in the tests). This is not an issue on master since it carries commit 66fa46c006bae0f28d93238b8f7f1c923645eee5 but that's not appropriate for a stable branch. (backported from commit 7788763e09b7beed75345e11c223735ad4829fdb)
-rw-r--r--tests/data/SPECS/versiontest.spec3
-rw-r--r--tests/rpmi.at141
2 files changed, 143 insertions, 1 deletions
diff --git a/tests/data/SPECS/versiontest.spec b/tests/data/SPECS/versiontest.spec
index 51fe235c6..c99640143 100644
--- a/tests/data/SPECS/versiontest.spec
+++ b/tests/data/SPECS/versiontest.spec
@@ -1,6 +1,9 @@
Name: versiontest
Version: %{ver}
Release: 1
+%if %{defined:epoch}
+Epoch: %{epoch}
+%endif
Summary: Testing version behavior
Group: Testing
diff --git a/tests/rpmi.at b/tests/rpmi.at
index d6b1b0be7..02694a445 100644
--- a/tests/rpmi.at
+++ b/tests/rpmi.at
@@ -651,7 +651,6 @@ runroot rpm -q versiontest
[versiontest-1.0-1.noarch
],
[])
-# TODO: the same with epoch vs no epoch
# Test freshen
AT_CHECK([
@@ -714,6 +713,146 @@ runroot rpm -q versiontest
AT_CLEANUP
+AT_SETUP([rpm upgrade/downgrade epoch])
+RPMDB_INIT
+
+runroot rpmbuild --quiet -bb --define "ver 1.0" /data/SPECS/versiontest.spec
+runroot_other cp /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm /tmp/noepoch.rpm
+for e in 1 2; do
+ runroot rpmbuild --quiet -bb --define "ver 1.0" --define "epoch ${e}" /data/SPECS/versiontest.spec
+ runroot_other cp /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm /tmp/epoch${e}.rpm
+done
+# for testing sanity
+runroot_other echo '%_query_all_fmt %%{nevra}' > \
+ ${RPMTEST}/$(runroot rpm --eval '%_rpmmacrodir')/macros.epoch
+
+AT_CHECK([
+RPMDB_INIT
+runroot rpm -U /tmp/noepoch.rpm
+runroot rpm -U /tmp/epoch1.rpm
+runroot rpm -q versiontest
+],
+[0],
+[versiontest-1:1.0-1.noarch
+],
+[])
+
+AT_CHECK([
+RPMDB_INIT
+runroot rpm -U /tmp/epoch1.rpm
+runroot rpm -U /tmp/epoch2.rpm
+runroot rpm -q versiontest
+],
+[0],
+[versiontest-2:1.0-1.noarch
+],
+[])
+
+# XXX this should be FAIL, but don't want to fail all the test just because...
+AT_CHECK([
+RPMDB_INIT
+runroot rpm -U /tmp/epoch1.rpm
+runroot rpm -U /tmp/noepoch.rpm
+],
+[2],
+[],
+[ package versiontest-1:1.0-1.noarch (which is newer than versiontest-1.0-1.noarch) is already installed
+ package versiontest-1.0-1.noarch is already installed
+])
+
+AT_CHECK([
+RPMDB_INIT
+runroot rpm -U /tmp/epoch2.rpm
+runroot rpm -U /tmp/epoch1.rpm
+],
+[2],
+[],
+[ package versiontest-2:1.0-1.noarch (which is newer than versiontest-1:1.0-1.noarch) is already installed
+])
+
+AT_CHECK([
+RPMDB_INIT
+runroot rpm -U /tmp/epoch2.rpm
+runroot rpm -U --oldpackage /tmp/epoch1.rpm
+runroot rpm -q versiontest
+],
+[0],
+[versiontest-1:1.0-1.noarch
+],
+[])
+
+# XXX this should be FAIL, but don't want to fail all the test just because...
+AT_CHECK([
+RPMDB_INIT
+runroot rpm -U /tmp/epoch1.rpm
+runroot rpm -U --oldpackage /tmp/noepoch.rpm
+runroot rpm -q versiontest
+],
+[0],
+[versiontest-1:1.0-1.noarch
+],
+[ package versiontest-1.0-1.noarch is already installed
+])
+
+AT_CHECK([
+RPMDB_INIT
+runroot rpm -U /tmp/noepoch.rpm
+runroot rpm -e versiontest-1.0-1
+],
+[0],
+[],
+[])
+
+AT_CHECK([
+RPMDB_INIT
+runroot rpm -U /tmp/epoch1.rpm
+runroot rpm -e versiontest-1.0-1
+],
+[0],
+[],
+[])
+
+AT_CHECK([
+RPMDB_INIT
+runroot rpm -i /tmp/noepoch.rpm
+runroot rpm -i /tmp/epoch1.rpm
+
+# gah, versions listed on stdout but error message on stderr
+runroot rpm -e versiontest 1>&2
+runroot rpm -e versiontest-1.0-1 1>&2
+runroot rpm -e versiontest-1:1.0-1 1>&2
+runroot rpm -q versiontest
+],
+[0],
+[versiontest-1.0-1.noarch
+],
+[error: "versiontest" specifies multiple packages:
+ versiontest-1.0-1.noarch
+ versiontest-1:1.0-1.noarch
+error: "versiontest-1.0-1" specifies multiple packages:
+ versiontest-1.0-1.noarch
+ versiontest-1:1.0-1.noarch
+])
+
+AT_CHECK([
+RPMDB_INIT
+runroot rpm -U /tmp/noepoch.rpm
+runroot rpm -U --replacepkgs /tmp/noepoch.rpm
+],
+[0],
+[],
+[])
+
+AT_CHECK([
+RPMDB_INIT
+runroot rpm -U /tmp/epoch1.rpm
+runroot rpm -U --replacepkgs /tmp/epoch1.rpm
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
AT_SETUP([rpm -U obsoleted packages])
AT_KEYWORDS([install obsolete])
RPMDB_INIT