Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 35.2k
gh-90548: Make musl test skips smarter (fixes Alpine errors)#131313
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Uh oh!
There was an error while loading. Please reload this page.
Changes from all commits
234871135960c1417143eef36eb2909ea3b4e76d7883add5d4d6aa92111e2ecFile filter
Filter by extension
Conversations
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Uh oh!
There was an error while loading. Please reload this page.
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -552,6 +552,10 @@ def test_libc_ver(self): | ||
| (b'GLIBC_2.9', ('glibc', '2.9')), | ||
| (b'libc.so.1.2.5', ('libc', '1.2.5')), | ||
| (b'libc_pthread.so.1.2.5', ('libc', '1.2.5_pthread')), | ||
| (b'/aports/main/musl/src/musl-1.2.5', ('musl', '1.2.5')), | ||
Member There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can you add tests on version with 2 numbers and 4 numbers? Like MemberAuthor There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I could, but I don't believe musl will ever have such release numbers, so is it worth doing? Member There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Parsing a binary file using a regular expression is a strange thing for me. So I prefer to have tests to make sure that the implementation is reliable. The question is more if the regex will match versions with 2 members (x.y) or 4 members (x.y.z.a), or if it only matchs version with 3 members (x.y.z). MemberAuthor There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fair enough, though the existing tests don't do that, nor do they test the no-match cases. I could add such tests, but at that point I'd want to rewrite this test method to split it up into multiple tests, and I don't think that's in scope for this PR :) I'll add the couple of extra checks, though. | ||
| # musl uses semver, but we accept some variations anyway: | ||
| (b'/aports/main/musl/src/musl-12.5', ('musl', '12.5')), | ||
| (b'/aports/main/musl/src/musl-1.2.5.7', ('musl', '1.2.5.7')), | ||
| (b'', ('', '')), | ||
| ): | ||
| with open(filename, 'wb') as fp: | ||
| @@ -563,14 +567,29 @@ def test_libc_ver(self): | ||
| expected) | ||
| # binary containing multiple versions: get the most recent, | ||
| # make sure that 1.9 is seen as older than 1.23.4 | ||
| chunksize = 16384 | ||
| with open(filename, 'wb') as f: | ||
| # test match at chunk boundary | ||
| f.write(b'x'*(chunksize - 10)) | ||
| f.write(b'GLIBC_1.23.4\0GLIBC_1.9\0GLIBC_1.21\0') | ||
| self.assertEqual(platform.libc_ver(filename, chunksize=chunksize), | ||
| ('glibc', '1.23.4')) | ||
| # make sure that eg 1.9 is seen as older than 1.23.4, and that | ||
| # the arguments don't count even if they are set. | ||
| chunksize = 200 | ||
| for data, expected in ( | ||
| (b'GLIBC_1.23.4\0GLIBC_1.9\0GLIBC_1.21\0', ('glibc', '1.23.4')), | ||
| (b'libc.so.2.4\0libc.so.9\0libc.so.23.1\0', ('libc', '23.1')), | ||
| (b'musl-1.4.1\0musl-2.1.1\0musl-2.0.1\0', ('musl', '2.1.1')), | ||
| (b'no match here, so defaults are used', ('test', '100.1.0')), | ||
| ): | ||
picnixz marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| with open(filename, 'wb') as f: | ||
| # test match at chunk boundary | ||
| f.write(b'x'*(chunksize - 10)) | ||
| f.write(data) | ||
| self.assertEqual( | ||
| expected, | ||
| platform.libc_ver( | ||
| filename, | ||
| lib='test', | ||
| version='100.1.0', | ||
| chunksize=chunksize, | ||
| ), | ||
| ) | ||
picnixz marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| def test_android_ver(self): | ||
| res = platform.android_ver() | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -544,10 +544,7 @@ def test_date_locale(self): | ||
| self.roundtrip('%x', slice(0, 3), time.localtime(now - 366*24*3600)) | ||
| # NB: Dates before 1969 do not roundtrip on many locales, including C. | ||
| @unittest.skipIf( | ||
| support.is_emscripten or support.is_wasi, | ||
| "musl libc issue on Emscripten, bpo-46390" | ||
| ) | ||
| @unittest.skipIf(support.linked_to_musl(), "musl libc issue, bpo-46390") | ||
| @run_with_locales('LC_TIME', 'en_US', 'fr_FR', 'de_DE', 'ja_JP', | ||
Member There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We can add the | ||
| 'eu_ES', 'ar_AE', 'my_MM', 'shn_MM') | ||
| def test_date_locale2(self): | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -746,7 +746,18 @@ def test_get_signal_name(self): | ||
| def test_linked_to_musl(self): | ||
| linked = support.linked_to_musl() | ||
| self.assertIsInstance(linked, bool) | ||
| self.assertIsNotNone(linked) | ||
| if support.is_wasi or support.is_emscripten: | ||
| self.assertTrue(linked) | ||
vstinner marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| # The value is cached, so make sure it returns the same value again. | ||
| self.assertIs(linked, support.linked_to_musl()) | ||
| # The unlike libc, the musl version is a triple. | ||
| if linked: | ||
| self.assertIsInstance(linked, tuple) | ||
| self.assertEqual(3, len(linked)) | ||
picnixz marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| for v in linked: | ||
| self.assertIsInstance(v, int) | ||
| # XXX -follows a list of untested API | ||
| # make_legacy_pyc | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| :func:`platform.libc_ver` can now detect and report the version of ``musl`` | ||
| on Alpine Linux. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I prefer the style I used because it lines up better with how python's statements work (first line only is outdented, lack of outdent signals return to outer logic block). This is accepted by PEP 8, are there additional style constrains on the cpython code base these days?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I haven't seen lots of use of hanging indents in the lib. There is no additional constraints but usually we try to be consistent with the surrounding code when possible.