Fix enianness issues, enable more tests.
Both test suites are now run on all architectures. A few Cassandane tests need to be excluded on 32-bit and big-endian architectures, but the built-in test suite passes in its entirety and the vast majority of Cassandane runs just fine.
This commit is contained in:
parent
0a476b2b84
commit
c6a7c0199c
161
cyrus-imapd.spec
161
cyrus-imapd.spec
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
Name: cyrus-imapd
|
Name: cyrus-imapd
|
||||||
Version: 3.0.1
|
Version: 3.0.1
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
|
|
||||||
%define ssl_pem_file /etc/pki/%name/%name.pem
|
%define ssl_pem_file /etc/pki/%name/%name.pem
|
||||||
|
|
||||||
@ -31,6 +31,7 @@ Patch1: patch-cyrus-testsuite-endianness2
|
|||||||
Patch2: patch-cyrus-testsuite-endianness3
|
Patch2: patch-cyrus-testsuite-endianness3
|
||||||
Patch3: patch-cyrus-testsuite-endianness4
|
Patch3: patch-cyrus-testsuite-endianness4
|
||||||
Patch4: patch-cyrus-autoreconf-keep-version
|
Patch4: patch-cyrus-autoreconf-keep-version
|
||||||
|
Patch5: patch-cyrus-fix-endianness-checks
|
||||||
|
|
||||||
Source10: cyrus-imapd.logrotate
|
Source10: cyrus-imapd.logrotate
|
||||||
Source11: cyrus-imapd.pam-config
|
Source11: cyrus-imapd.pam-config
|
||||||
@ -399,14 +400,12 @@ find %buildroot -name ".packlist" -exec rm {} \;
|
|||||||
|
|
||||||
|
|
||||||
%check
|
%check
|
||||||
# The test suite fails on big-endian machines currently. This is tracked at
|
|
||||||
# https://github.com/cyrusimap/cyrus-imapd/issues/1993
|
|
||||||
%ifnarch s390x ppc64
|
|
||||||
make %{?_smp_mflags} check || exit 1
|
make %{?_smp_mflags} check || exit 1
|
||||||
|
|
||||||
|
%if %{without cassandane}
|
||||||
|
exit 0
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%if %{with cassandane}
|
|
||||||
%ifnarch s390x ppc64 i686 armv7hl
|
|
||||||
# Run the Cassandane test suite. This will exhaustively test the various
|
# Run the Cassandane test suite. This will exhaustively test the various
|
||||||
# server components, but running it in a mock chroot is rather an exercise.
|
# server components, but running it in a mock chroot is rather an exercise.
|
||||||
# Sadly Cassandane simply can't run on a 32-bit host at the moment. It needs
|
# Sadly Cassandane simply can't run on a 32-bit host at the moment. It needs
|
||||||
@ -432,62 +431,105 @@ export CYRUS_USER=$USER
|
|||||||
# Most Cassandane tests pass, but using snapshots includes new tests which
|
# Most Cassandane tests pass, but using snapshots includes new tests which
|
||||||
# aren't supposed to pass on released versions of cyrus. So we have a big
|
# aren't supposed to pass on released versions of cyrus. So we have a big
|
||||||
# exclusion list.
|
# exclusion list.
|
||||||
|
|
||||||
# Note that Cassandane::Test::Core must always be excluded; it can't possibly
|
# Note that Cassandane::Test::Core must always be excluded; it can't possibly
|
||||||
# work. The others are expected on 3.0.1 and should be removed and re-checked
|
# work. The others are expected on 3.0.1 and should be removed and re-checked
|
||||||
# at each release.
|
# at each release.
|
||||||
#!JMAPCalendars.creationids \
|
exclude=('!Cassandane::Test::Core')
|
||||||
|
|
||||||
|
tests=(
|
||||||
|
Admin.imap_admins Fetch.fetch_flags_before_exists Quota.num_folders_rename
|
||||||
|
SearchFuzzy.cjk_words SearchFuzzy.xattachmentname
|
||||||
|
)
|
||||||
|
for i in ${tests[@]}; do exclude+=("!$i"); done
|
||||||
|
|
||||||
|
tests=(
|
||||||
|
creationids
|
||||||
|
getcalendareventlist
|
||||||
|
getcalendareventlist_date
|
||||||
|
getcalendareventlist_datetime
|
||||||
|
getcalendareventlist_text
|
||||||
|
getcalendarevents_privacy
|
||||||
|
getcalendarevents_properties
|
||||||
|
getcalendarevents_relatedto
|
||||||
|
getcalendarevents_simple
|
||||||
|
getcalendareventupdates
|
||||||
|
setcalendarevents_alerts
|
||||||
|
setcalendarevents_caldav
|
||||||
|
setcalendarevents_endtimezone
|
||||||
|
setcalendarevents_endtimezone_recurrence
|
||||||
|
setcalendarevents_isallday
|
||||||
|
setcalendarevents_links
|
||||||
|
setcalendarevents_localizations
|
||||||
|
setcalendarevents_locations
|
||||||
|
setcalendarevents_move
|
||||||
|
setcalendarevents_participantid
|
||||||
|
setcalendarevents_participants
|
||||||
|
setcalendarevents_prodid
|
||||||
|
setcalendarevents_recurrenceoverrides
|
||||||
|
setcalendarevents_relatedto
|
||||||
|
setcalendarevents_recurrence
|
||||||
|
setcalendarevents_schedule_cancel
|
||||||
|
setcalendarevents_schedule_reply
|
||||||
|
setcalendarevents_schedule_request
|
||||||
|
setcalendarevents_simple
|
||||||
|
)
|
||||||
|
for i in ${tests[@]}; do exclude+=("!JMAPCalendars.$i"); done
|
||||||
|
|
||||||
|
tests=(
|
||||||
|
getmessagelist_attachments
|
||||||
|
getmessagelist_window
|
||||||
|
getmessages_attachment_name
|
||||||
|
getmessages_body_nontext
|
||||||
|
setmailboxes_destroy_empty
|
||||||
|
setmessages_attachments
|
||||||
|
)
|
||||||
|
for i in ${tests[@]}; do exclude+=("!JMAPMail.$i"); done
|
||||||
|
|
||||||
|
%ifarch ppc64 s390x
|
||||||
|
# Some failures only on little-endian machines for some reason
|
||||||
|
tests=(
|
||||||
|
ClamAV.remove_infected # Only on ppc64, actually
|
||||||
|
JMAPContacts.getcontactgroupupdates
|
||||||
|
JMAPContacts.getcontactupdates
|
||||||
|
JMAPMail.getmailboxupdates
|
||||||
|
JMAPMail.getmessageupdates
|
||||||
|
JMAPMail.getthreadupdates
|
||||||
|
)
|
||||||
|
for i in ${tests[@]}; do exclude+=("!$i"); done
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%ifarch i686 armv7hl
|
||||||
|
# Some additional failures only on 32-bit machines.
|
||||||
|
# 14 failures are due to Fedora's perl not supporting quad types in unpack.
|
||||||
|
# This is due to be fixed in rawhide soon, so some of these can go away.
|
||||||
|
tests=(
|
||||||
|
JMAPContacts.setcontacts_importance_later
|
||||||
|
Metadata.expunge_messages
|
||||||
|
Metadata.msg_replication_new_mas_partial_wwd
|
||||||
|
Metadata.msg_replication_new_rep
|
||||||
|
Metadata.msg_replication_new_mas
|
||||||
|
Metadata.msg_replication_exp_bot
|
||||||
|
Metadata.msg_replication_new_mas_partial_wwsw
|
||||||
|
Metadata.msg_replication_exp_mas
|
||||||
|
Metadata.msg_replication_mod_mas
|
||||||
|
Metadata.msg_replication_exp_rep
|
||||||
|
Metadata.msg_replication_mod_bot_msl
|
||||||
|
Metadata.msg_replication_new_bot_mse_gul
|
||||||
|
Metadata.msg_replication_mod_bot_msh
|
||||||
|
Metadata.msg_replication_new_bot_mse_guh
|
||||||
|
Metadata.msg_replication_mod_rep
|
||||||
|
Reconstruct.reconstruct_removedfile
|
||||||
|
Reconstruct.reconstruct_truncated
|
||||||
|
Reconstruct.reconstruct_zerouid
|
||||||
|
Quota.reconstruct
|
||||||
|
Quota.reconstruct_orphans
|
||||||
|
)
|
||||||
|
for i in ${tests[@]}; do exclude+=("!$i"); done
|
||||||
|
%endif
|
||||||
|
|
||||||
# Add -vvv for too much output
|
# Add -vvv for too much output
|
||||||
./testrunner.pl %{?_smp_mflags} -f pretty \
|
./testrunner.pl %{?_smp_mflags} -f pretty ${exclude[@]} 2>&1
|
||||||
!Cassandane::Test::Core \
|
|
||||||
!Admin.imap_admins \
|
|
||||||
!Fetch.fetch_flags_before_exists \
|
|
||||||
\
|
|
||||||
!JMAPCalendars.creationids \
|
|
||||||
!JMAPCalendars.getcalendareventlist \
|
|
||||||
!JMAPCalendars.getcalendareventlist_date \
|
|
||||||
!JMAPCalendars.getcalendareventlist_datetime \
|
|
||||||
!JMAPCalendars.getcalendareventlist_text \
|
|
||||||
!JMAPCalendars.getcalendarevents_privacy \
|
|
||||||
!JMAPCalendars.getcalendarevents_properties \
|
|
||||||
!JMAPCalendars.getcalendarevents_relatedto \
|
|
||||||
!JMAPCalendars.getcalendarevents_simple \
|
|
||||||
!JMAPCalendars.getcalendareventupdates \
|
|
||||||
\
|
|
||||||
!JMAPCalendars.setcalendarevents_alerts \
|
|
||||||
!JMAPCalendars.setcalendarevents_caldav \
|
|
||||||
!JMAPCalendars.setcalendarevents_endtimezone \
|
|
||||||
!JMAPCalendars.setcalendarevents_endtimezone_recurrence \
|
|
||||||
!JMAPCalendars.setcalendarevents_isallday \
|
|
||||||
!JMAPCalendars.setcalendarevents_links \
|
|
||||||
!JMAPCalendars.setcalendarevents_localizations \
|
|
||||||
!JMAPCalendars.setcalendarevents_locations \
|
|
||||||
!JMAPCalendars.setcalendarevents_move \
|
|
||||||
!JMAPCalendars.setcalendarevents_participantid \
|
|
||||||
!JMAPCalendars.setcalendarevents_participants \
|
|
||||||
!JMAPCalendars.setcalendarevents_prodid \
|
|
||||||
!JMAPCalendars.setcalendarevents_recurrenceoverrides \
|
|
||||||
!JMAPCalendars.setcalendarevents_relatedto \
|
|
||||||
!JMAPCalendars.setcalendarevents_recurrence \
|
|
||||||
!JMAPCalendars.setcalendarevents_schedule_cancel \
|
|
||||||
!JMAPCalendars.setcalendarevents_schedule_reply \
|
|
||||||
!JMAPCalendars.setcalendarevents_schedule_request \
|
|
||||||
!JMAPCalendars.setcalendarevents_simple \
|
|
||||||
\
|
|
||||||
!JMAPMail.getmessagelist_attachments \
|
|
||||||
!JMAPMail.getmessagelist_window \
|
|
||||||
!JMAPMail.getmessages_body_nontext \
|
|
||||||
!JMAPMail.getmessages_attachment_name \
|
|
||||||
!JMAPMail.setmailboxes_destroy_empty \
|
|
||||||
!JMAPMail.setmessages_attachments \
|
|
||||||
\
|
|
||||||
!Quota.num_folders_rename \
|
|
||||||
!SearchFuzzy.cjk_words \
|
|
||||||
!SearchFuzzy.xattachmentname \
|
|
||||||
2>&1
|
|
||||||
|
|
||||||
%endif
|
|
||||||
%endif
|
|
||||||
|
|
||||||
|
|
||||||
%pre
|
%pre
|
||||||
@ -581,6 +623,11 @@ getent passwd cyrus >/dev/null || /usr/sbin/useradd -c "Cyrus IMAP Server" -d /v
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Jun 02 2017 Jason L Tibbitts III <tibbs@math.uh.edu> - 3.0.1-2
|
||||||
|
- Add patch to fix up some endianness issues.
|
||||||
|
- Enable both test suites on all architectures.
|
||||||
|
- Add arch-specific excludes for a few Cassandane tests.
|
||||||
|
|
||||||
* Thu Apr 20 2017 Jason L Tibbitts III <tibbs@math.uh.edu> - 3.0.1-1
|
* Thu Apr 20 2017 Jason L Tibbitts III <tibbs@math.uh.edu> - 3.0.1-1
|
||||||
- Initial attempt at importing 3.0. Many new dependencies.
|
- Initial attempt at importing 3.0. Many new dependencies.
|
||||||
- Use a stock sample imapd.conf file instead of a Fedora-provided one.
|
- Use a stock sample imapd.conf file instead of a Fedora-provided one.
|
||||||
|
66
patch-cyrus-fix-endianness-checks
Normal file
66
patch-cyrus-fix-endianness-checks
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
diff --git a/lib/crc32.c b/lib/crc32.c
|
||||||
|
index c42e7d6..4193f0f 100644
|
||||||
|
--- a/lib/crc32.c
|
||||||
|
+++ b/lib/crc32.c
|
||||||
|
@@ -611,7 +611,7 @@ static const uint32_t crc32_lookup[16][256] =
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
-#ifndef LITTLE_ENDIAN
|
||||||
|
+#if BYTE_ORDER != LITTLE_ENDIAN
|
||||||
|
/* swap endianness */
|
||||||
|
static uint32_t swap(uint32_t x)
|
||||||
|
{
|
||||||
|
@@ -634,7 +634,7 @@ static uint32_t crc32_slice8(uint32_t prev, const void *data, size_t length)
|
||||||
|
|
||||||
|
/* process eight bytes at once (Slicing-by-8) */
|
||||||
|
while (length >= 8) {
|
||||||
|
-#ifdef LITTLE_ENDIAN
|
||||||
|
+#if BYTE_ORDER == LITTLE_ENDIAN
|
||||||
|
uint32_t one = *current++ ^ crc;
|
||||||
|
uint32_t two = *current++;
|
||||||
|
crc = crc32_lookup[0][(two>>24) & 0xFF] ^
|
||||||
|
@@ -682,7 +682,7 @@ static uint32_t crc32_slice16(uint32_t prev, const void *data, size_t length)
|
||||||
|
while (length >= bytes_at_once) {
|
||||||
|
size_t unrolling;
|
||||||
|
for (unrolling = 0; unrolling < unroll; unrolling++) {
|
||||||
|
-#ifdef LITTLE_ENDIAN
|
||||||
|
+#if BYTE_ORDER == LITTLE_ENDIAN
|
||||||
|
uint32_t one = *current++ ^ crc;
|
||||||
|
uint32_t two = *current++;
|
||||||
|
uint32_t three = *current++;
|
||||||
|
diff --git a/lib/crc32c.c b/lib/crc32c.c
|
||||||
|
index e33e793..66fc16e 100644
|
||||||
|
--- a/lib/crc32c.c
|
||||||
|
+++ b/lib/crc32c.c
|
||||||
|
@@ -591,7 +591,7 @@ static const uint32_t crc32c_lookup[4][256] = {
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
-#ifndef LITTLE_ENDIAN
|
||||||
|
+#if BYTE_ORDER != LITTLE_ENDIAN
|
||||||
|
/* swap endianness */
|
||||||
|
static uint32_t swap(uint32_t x)
|
||||||
|
{
|
||||||
|
@@ -615,7 +615,7 @@ static uint32_t crc32c_sw(uint32_t crc, const void *buf, size_t len) {
|
||||||
|
|
||||||
|
/* process four bytes at once (slicing-by-4) */
|
||||||
|
while (len >= 4) {
|
||||||
|
-#ifdef LITTLE_ENDIAN
|
||||||
|
+#if BYTE_ORDER == LITTLE_ENDIAN
|
||||||
|
crc1 = *cur++ ^ crc0;
|
||||||
|
crc0 = crc32c_lookup[0][(crc1>>24) & 0xff] ^
|
||||||
|
crc32c_lookup[1][(crc1>>16) & 0xff] ^
|
||||||
|
diff --git a/lib/xsha1.c b/lib/xsha1.c
|
||||||
|
index 1c4547e..6e41eee 100644
|
||||||
|
--- a/lib/xsha1.c
|
||||||
|
+++ b/lib/xsha1.c
|
||||||
|
@@ -89,7 +89,7 @@ struct _SHA_CTX {
|
||||||
|
/* blk0() and blk() perform the initial expand. */
|
||||||
|
/* I got the idea of expanding during the round function from SSLeay */
|
||||||
|
|
||||||
|
-#ifdef LITTLE_ENDIAN
|
||||||
|
+#if BYTE_ORDER == LITTLE_ENDIAN
|
||||||
|
#define blk0(i) (block->l[i] = (rol(block->l[i],24)&(sha1_quadbyte)0xFF00FF00) \
|
||||||
|
|(rol(block->l[i],8)&(sha1_quadbyte)0x00FF00FF))
|
||||||
|
#else
|
Loading…
Reference in New Issue
Block a user