diff --git a/.gitignore b/.gitignore index bf6304b..503a193 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,4 @@ /os-autoinst-ab6013d738344791507525e45cbd9f972a444968.tar.gz /os-autoinst-8a7a14fa5175e3ce1dbd0f59c2c2ec2d73c572d6.tar.gz /os-autoinst-ddf414b8d83576d0f5373c15acd70ab2c3ea9fb8.tar.gz +/os-autoinst-d3d433bda958b473ba7c60bb434760566c0d356b.tar.gz diff --git a/0002-NOT-UPSTREAMABLE-disable-test-that-fails-on-s390x.patch b/0002-NOT-UPSTREAMABLE-disable-test-that-fails-on-s390x.patch deleted file mode 100644 index b2ea114..0000000 --- a/0002-NOT-UPSTREAMABLE-disable-test-that-fails-on-s390x.patch +++ /dev/null @@ -1,30 +0,0 @@ -From aec13b4c88d1a569f1fd377bf943dd16e23b161a Mon Sep 17 00:00:00 2001 -From: Adam Williamson -Date: Mon, 30 May 2022 11:34:17 -0700 -Subject: [PATCH 3/3] NOT UPSTREAMABLE: disable test that fails on s390x - -Signed-off-by: Adam Williamson ---- - t/27-consoles-vnc.t | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/t/27-consoles-vnc.t b/t/27-consoles-vnc.t -index c53d21d4..f1c272d5 100755 ---- a/t/27-consoles-vnc.t -+++ b/t/27-consoles-vnc.t -@@ -164,9 +164,9 @@ subtest 'update framebuffer' => sub { - $c->_framebuffer(undef)->width(1024)->height(512)->vncinfo($vncinfo); - ok $c->update_framebuffer, 'truthy return value for successful pixel update'; - my ($blue, $green, $red) = $c->_framebuffer->get_pixel(43, 47); -- is $blue, 41, 'pixel data updated in framebuffer (blue)'; -- is $green, 37, 'pixel data updated in framebuffer (green)'; -- is $red, 31, 'pixel data updated in framebuffer (red)'; -+ #is $blue, 41, 'pixel data updated in framebuffer (blue)'; -+ #is $green, 37, 'pixel data updated in framebuffer (green)'; -+ #is $red, 31, 'pixel data updated in framebuffer (red)'; - - my $last_rectangle = pack(nnnnN => 0, 0, 0, 0, -224); - $s->set_series(mocked_read => $update_message, $one_rectangle, $last_rectangle); --- -2.36.1 - diff --git a/2096.patch b/2096.patch new file mode 100644 index 0000000..0373aaf --- /dev/null +++ b/2096.patch @@ -0,0 +1,118 @@ +From 9a861cb3e5e7bd58dc0d4aa549c6d3df25f8b24d Mon Sep 17 00:00:00 2001 +From: Marius Kittler +Date: Fri, 17 Jun 2022 17:29:20 +0200 +Subject: [PATCH] Fix using little-endian VNC server on big-endian + +* Fix connecting to a little-endian VNC server from a big-endian + system +* Use byte swap functions instead of custom code to swap the + byte order + * The bswap_32()/bswap_16() functions have the same + behavior as our custom code on little-endian systems and + therefore this change should not do anything on + little-endian systems. + * The bswap_32()/bswap_16() functions change the byte order + also on big-endian systems (in contrast to our custom + code). +* The VNC consoles test has been updated to test both cases + (byte order swap necassary and not necassary). Before it + only tested the case of a little-endian VNC server (and was + therefore only failing on bit-endian systems before this + change). +* Tested the behavior on x86_64 and also on a Tumbleweed + ppc64 VM. +* See https://progress.opensuse.org/issues/111608. +--- + ppmclibs/tinycv_impl.cc | 23 +++++++---------------- + t/27-consoles-vnc.t | 14 +++++++++++++- + 2 files changed, 20 insertions(+), 17 deletions(-) + +diff --git a/ppmclibs/tinycv_impl.cc b/ppmclibs/tinycv_impl.cc +index c987127d5d..93f40571e8 100644 +--- a/ppmclibs/tinycv_impl.cc ++++ b/ppmclibs/tinycv_impl.cc +@@ -10,6 +10,7 @@ + #include + #include + #include ++#include + + #include // std::min + #include +@@ -647,13 +648,10 @@ void image_map_raw_data_rgb555(Image* a, const unsigned char* data) + static uint16_t read_u16(const unsigned char* data, size_t& offset, + bool do_endian_conversion) + { +- uint16_t pixel; ++ uint16_t pixel = *(uint16_t*)(data + offset); ++ offset += 2; + if (do_endian_conversion) { +- pixel = data[offset++] * 256; +- pixel += data[offset++]; +- } else { +- pixel = data[offset++]; +- pixel += data[offset++] * 256; ++ pixel = bswap_16(pixel); + } + return pixel; + } +@@ -668,17 +666,10 @@ Vec3b VNCInfo::read_pixel(const unsigned char* data, size_t& offset) + if (bytes_per_pixel == 2) { + pixel = read_u16(data, offset, do_endian_conversion); + } else if (bytes_per_pixel == 4) { ++ pixel = *(uint32_t*)(data + offset); ++ offset += 4; + if (do_endian_conversion) { +- pixel = data[offset++]; +- pixel <<= 8; +- pixel |= data[offset++]; +- pixel <<= 8; +- pixel |= data[offset++]; +- pixel <<= 8; +- pixel |= data[offset++]; +- } else { +- pixel = *(uint32_t*)(data + offset); +- offset += 4; ++ pixel = bswap_32(pixel); + } + } else if (bytes_per_pixel == 1) { + pixel = data[offset++]; +diff --git a/t/27-consoles-vnc.t b/t/27-consoles-vnc.t +index 455afc0646..be0731c9d6 100755 +--- a/t/27-consoles-vnc.t ++++ b/t/27-consoles-vnc.t +@@ -41,7 +41,6 @@ is_deeply \@printed, ['RFB 003.006', pack('C', 1)], 'protocol version and securi + + # ensure endian conversion is setup correctly (despite initially mocking _server_initialization) + my $machine_is_big_endian = unpack('h*', pack('s', 1)) =~ /01/ ? 1 : 0; +-$c->_do_endian_conversion($machine_is_big_endian); + + subtest 'send update request' => sub { + $c->width(1024); +@@ -161,6 +160,7 @@ subtest 'update framebuffer' => sub { + ok $logged_in, 'relogin on protocol error'; + + # test with full data (just one pixel, though) and vncinfo present (defines endianness and chroma subsampling) ++ $c->_do_endian_conversion($machine_is_big_endian); # assume server is little-endian + my $vncinfo = tinycv::new_vncinfo($c->_do_endian_conversion, $c->_true_colour, $c->_bpp / 8, 255, 0, 255, 8, 255, 16); + my $gray_pixel = pack(CCCC => 31, 37, 41, 0); # dark prime grey + my $of_type_raw_with_coordinates_43_47_1_1 = pack(nnnnN => 43, 47, 1, 1, 0); +@@ -181,6 +181,18 @@ subtest 'update framebuffer' => sub { + throws_ok { $c->update_framebuffer } qr/unsupported update encoding -225/, 'dies on unsupported encoding'; + is $s->mocked_read, undef, 'no more messages left to read after reading unknown encoding'; + ++ # test with full data again, assuming the server is big-endian ++ $c->_do_endian_conversion(!$machine_is_big_endian); # assume server is big-endian ++ $vncinfo = tinycv::new_vncinfo($c->_do_endian_conversion, $c->_true_colour, $c->_bpp / 8, 255, 0, 255, 8, 255, 16); ++ $gray_pixel = pack(CCCC => 0, 41, 37, 31); # dark prime grey ++ $s->set_series(mocked_read => $update_message, $one_rectangle, $of_type_raw_with_coordinates_43_47_1_1, $gray_pixel); ++ $c->_framebuffer(undef)->width(1024)->height(512)->vncinfo($vncinfo); ++ ok $c->update_framebuffer, 'truthy return value for successful pixel update of big-endian server'; ++ ($blue, $green, $red) = $c->_framebuffer->get_pixel(43, 47); ++ is $blue, 41, 'pixel data updated in framebuffer (blue, big-endian server)'; ++ is $green, 37, 'pixel data updated in framebuffer (green, big-endian server)'; ++ is $red, 31, 'pixel data updated in framebuffer (red, big-endian server)'; ++ + $c->ikvm(1); + my $unsupported_ikvm_encoding = pack(nnnnN => 0, 0, 1, 1, 88); + my $ikvm_specific_data = pack(NN => 0, 9); # some "prefix" and data length diff --git a/os-autoinst.spec b/os-autoinst.spec index 38df163..1156ed9 100644 --- a/os-autoinst.spec +++ b/os-autoinst.spec @@ -30,21 +30,22 @@ %global github_owner os-autoinst %global github_name os-autoinst %global github_version 4.6 -%global github_commit ddf414b8d83576d0f5373c15acd70ab2c3ea9fb8 +%global github_commit d3d433bda958b473ba7c60bb434760566c0d356b # if set, will be a post-release snapshot build, otherwise a 'normal' build -%global github_date 20220617 +%global github_date 20220620 %global shortcommit %(c=%{github_commit}; echo ${c:0:7}) Name: os-autoinst Version: %{github_version}%{?github_date:^%{github_date}git%{shortcommit}} -Release: 3%{?dist} +Release: 1%{?dist} Summary: OS-level test automation License: GPLv2+ URL: https://os-autoinst.github.io/openQA/ Source0: https://github.com/%{github_owner}/%{github_name}/archive/%{github_commit}/%{github_name}-%{github_commit}.tar.gz -# Disable some checks that fail on s390x: +# Fix endian conversion issues that broke tests on s390x: # https://progress.opensuse.org/issues/111608 -Patch0: 0002-NOT-UPSTREAMABLE-disable-test-that-fails-on-s390x.patch +# https://github.com/os-autoinst/os-autoinst/pull/2096 +Patch0: 2096.patch # on SUSE this is conditional, for us it doesn't have to be but we # still use a macro just to keep build_requires similar for ease of @@ -134,10 +135,7 @@ BuildRequires: systemd This package contains Open vSwitch support for os-autoinst. %prep -%setup -n %{github_name}-%{github_commit} -q -%ifarch s390x -%patch0 -p1 -%endif +%autosetup -n %{github_name}-%{github_commit} -p1 %if 0%{?no_fullstack} rm -f t/99-full-stack.t @@ -243,6 +241,9 @@ rm tools/lib/perlcritic/Perl/Critic/Policy/*.pm %files devel %changelog +* Mon Jun 20 2022 Adam Williamson - 4.6^20220620gitd3d433b-1 +- Update to latest git, backport PR #2096 to fix s390x properly + * Fri Jun 17 2022 Adam Williamson - 4.6^20220617gitddf414b-3 - Update to latest git, drop merged/superseded patches diff --git a/sources b/sources index 619c24e..621ecf8 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (os-autoinst-ddf414b8d83576d0f5373c15acd70ab2c3ea9fb8.tar.gz) = 973629123c6ba484113acc287afe2525e84a791fbc8aa01a8431fcd3cfa55bd2c7fce793f9c205a51cf26e212120b7f871c3a1236ab29e9c4f09fef974d54f26 +SHA512 (os-autoinst-d3d433bda958b473ba7c60bb434760566c0d356b.tar.gz) = 16aadb1ce6207e1e326412d820eb6b33a43a84ac0518462553b0b9bce308a3255f5f0f5b377b29318582848969a03db4d0ea3c8e1444698b09c9e44ae2d5a38e