From 21fe0a233c3f07490d52f847e60cf7a777c94c96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Wed, 8 Jul 2020 17:49:13 +0200 Subject: [PATCH] Backport: Update tests to be endian safe, fix FTBFS on s390x Also, use %autopatch to apply the patches. --- b30dd1e04e.patch | 75 ++++++++++++++++++++++++++++++++++++++++++++++++ python-pip.spec | 12 ++++---- 2 files changed, 82 insertions(+), 5 deletions(-) create mode 100644 b30dd1e04e.patch diff --git a/b30dd1e04e.patch b/b30dd1e04e.patch new file mode 100644 index 0000000..1a6b663 --- /dev/null +++ b/b30dd1e04e.patch @@ -0,0 +1,75 @@ +From b30dd1e04e1f37901733f1be0a5a1e02c466ad0c Mon Sep 17 00:00:00 2001 +From: gutsytechster +Date: Wed, 15 Apr 2020 19:54:48 +0530 +Subject: [PATCH] fix(tests/unit): Update tests to be endian safe + +This updates `test_path_to_display` and `test_str_to_display__encoding` +to use the endian safe expected result instead of the hardcoded one. + +This fixes https://github.com/pypa/pip/issues/7921 +--- + tests/unit/test_compat.py | 8 +++++++- + tests/unit/test_utils.py | 16 +++++++++++++--- + 2 files changed, 20 insertions(+), 4 deletions(-) + +diff --git a/tests/unit/test_compat.py b/tests/unit/test_compat.py +index 1f31bc5ce8..b13087a1dd 100644 +--- a/tests/unit/test_compat.py ++++ b/tests/unit/test_compat.py +@@ -2,6 +2,7 @@ + + import locale + import os ++import sys + + import pytest + +@@ -91,8 +92,13 @@ def test_str_to_display__decode_error(monkeypatch, caplog): + # Encode with an incompatible encoding. + data = u'ab'.encode('utf-16') + actual = str_to_display(data) ++ # Keep the expected value endian safe ++ if sys.byteorder == "little": ++ expected = "\\xff\\xfea\x00b\x00" ++ elif sys.byteorder == "big": ++ expected = "\\xfe\\xff\x00a\x00b" + +- assert actual == u'\\xff\\xfea\x00b\x00', ( ++ assert actual == expected, ( + # Show the encoding for easier troubleshooting. + 'encoding: {!r}'.format(locale.getpreferredencoding()) + ) +diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py +index 7d74a66498..ebabd29e26 100644 +--- a/tests/unit/test_utils.py ++++ b/tests/unit/test_utils.py +@@ -375,6 +375,18 @@ def test_rmtree_retries_for_3sec(tmpdir, monkeypatch): + rmtree('foo') + + ++if sys.byteorder == "little": ++ expected_byte_string = ( ++ u"b'\\xff\\xfe/\\x00p\\x00a\\x00t\\x00h\\x00/" ++ "\\x00d\\x00\\xe9\\x00f\\x00'" ++ ) ++elif sys.byteorder == "big": ++ expected_byte_string = ( ++ u"b'\\xfe\\xff\\x00/\\x00p\\x00a\\x00t\\x00h\\" ++ "x00/\\x00d\\x00\\xe9\\x00f'" ++ ) ++ ++ + @pytest.mark.parametrize('path, fs_encoding, expected', [ + (None, None, None), + # Test passing a text (unicode) string. +@@ -383,9 +395,7 @@ def test_rmtree_retries_for_3sec(tmpdir, monkeypatch): + (u'/path/déf'.encode('utf-8'), 'utf-8', u'/path/déf'), + # Test a bytes object with a character that can't be decoded. + (u'/path/déf'.encode('utf-8'), 'ascii', u"b'/path/d\\xc3\\xa9f'"), +- (u'/path/déf'.encode('utf-16'), 'utf-8', +- u"b'\\xff\\xfe/\\x00p\\x00a\\x00t\\x00h\\x00/" +- "\\x00d\\x00\\xe9\\x00f\\x00'"), ++ (u'/path/déf'.encode('utf-16'), 'utf-8', expected_byte_string), + ]) + def test_path_to_display(monkeypatch, path, fs_encoding, expected): + monkeypatch.setattr(sys, 'getfilesystemencoding', lambda: fs_encoding) diff --git a/python-pip.spec b/python-pip.spec index 2f48fa6..37ca568 100644 --- a/python-pip.spec +++ b/python-pip.spec @@ -90,6 +90,12 @@ Patch4: dummy-certifi.patch # this warning is juts moot. Also, the warning breaks CPython test suite. Patch5: nowarn-pip._internal.main.patch +# Backport: Update tests to be endian safe +# This updates `test_path_to_display` and `test_str_to_display__encoding` +# to use the endian safe expected result instead of the hardcoded one. +# This fixes https://github.com/pypa/pip/issues/7921 +Patch6: https://github.com/pypa/pip/commit/b30dd1e04e.patch + # Downstream only patch # Users might have local installations of pip from using # `pip install --user --upgrade pip` on older/newer versions. @@ -253,11 +259,7 @@ mv python-docs-theme-2018.2 python-docs-theme popd %endif -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 +%autopatch -p1 # this goes together with patch4 rm src/pip/_vendor/certifi/*.pem