| # Copyright 2024 The Bazel Authors. All rights reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| "" |
| |
| load("@rules_testing//lib:test_suite.bzl", "test_suite") |
| load("//python/private:whl_target_platforms.bzl", "select_whl") # buildifier: disable=bzl-visibility |
| |
| WHL_LIST = [ |
| struct( |
| filename = f, |
| url = "https://" + f, |
| sha256 = "sha256://" + f, |
| ) |
| for f in [ |
| "pkg-0.0.1-cp311-cp311-macosx_10_9_universal2.whl", |
| "pkg-0.0.1-cp311-cp311-macosx_10_9_x86_64.whl", |
| "pkg-0.0.1-cp311-cp311-macosx_11_0_arm64.whl", |
| "pkg-0.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", |
| "pkg-0.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", |
| "pkg-0.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", |
| "pkg-0.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", |
| "pkg-0.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", |
| "pkg-0.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", |
| "pkg-0.0.1-cp311-cp311-musllinux_1_1_i686.whl", |
| "pkg-0.0.1-cp311-cp311-musllinux_1_1_ppc64le.whl", |
| "pkg-0.0.1-cp311-cp311-musllinux_1_1_s390x.whl", |
| "pkg-0.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", |
| "pkg-0.0.1-cp311-cp311-win32.whl", |
| "pkg-0.0.1-cp311-cp311-win_amd64.whl", |
| "pkg-0.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", |
| "pkg-0.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", |
| "pkg-0.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", |
| "pkg-0.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", |
| "pkg-0.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", |
| "pkg-0.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", |
| "pkg-0.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", |
| "pkg-0.0.1-cp37-cp37m-musllinux_1_1_i686.whl", |
| "pkg-0.0.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", |
| "pkg-0.0.1-cp37-cp37m-musllinux_1_1_s390x.whl", |
| "pkg-0.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", |
| "pkg-0.0.1-cp37-cp37m-win32.whl", |
| "pkg-0.0.1-cp37-cp37m-win_amd64.whl", |
| "pkg-0.0.1-cp39-cp39-macosx_10_9_universal2.whl", |
| "pkg-0.0.1-cp39-cp39-macosx_10_9_x86_64.whl", |
| "pkg-0.0.1-cp39-cp39-macosx_11_0_arm64.whl", |
| "pkg-0.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", |
| "pkg-0.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", |
| "pkg-0.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", |
| "pkg-0.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", |
| "pkg-0.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", |
| "pkg-0.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", |
| "pkg-0.0.1-cp39-cp39-musllinux_1_1_i686.whl", |
| "pkg-0.0.1-cp39-cp39-musllinux_1_1_ppc64le.whl", |
| "pkg-0.0.1-cp39-cp39-musllinux_1_1_s390x.whl", |
| "pkg-0.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", |
| "pkg-0.0.1-cp39-cp39-win32.whl", |
| "pkg-0.0.1-cp39-cp39-win_amd64.whl", |
| "pkg-0.0.1-py3-abi3-any.whl", |
| "pkg-0.0.1-py3-none-any.whl", |
| ] |
| ] |
| |
| def _match(env, got, want_filename): |
| if want_filename: |
| env.expect.that_str(got.filename).equals(want_filename) |
| env.expect.that_str(got.sha256).equals("sha256://" + want_filename) |
| env.expect.that_str(got.url).equals("https://" + want_filename) |
| else: |
| env.expect.that_int(got).equals(None) |
| |
| _tests = [] |
| |
| def _test_selecting(env): |
| got = select_whl(whls = WHL_LIST, want_abis = ["none"], want_os = "ignored", want_cpu = "ignored") |
| _match(env, got, "pkg-0.0.1-py3-none-any.whl") |
| |
| got = select_whl(whls = WHL_LIST, want_abis = ["abi3"], want_os = "ignored", want_cpu = "ignored") |
| _match(env, got, "pkg-0.0.1-py3-abi3-any.whl") |
| |
| # Check the selection failure |
| got = select_whl(whls = WHL_LIST, want_abis = ["cp39"], want_os = "fancy", want_cpu = "exotic") |
| _match(env, got, None) |
| |
| # Check we match the ABI and not the py version |
| got = select_whl(whls = WHL_LIST, want_abis = ["cp37m"], want_os = "linux", want_cpu = "amd64") |
| _match(env, got, "pkg-0.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl") |
| |
| # Check we can select a filename with many platform tags |
| got = select_whl(whls = WHL_LIST, want_abis = ["cp39"], want_os = "linux", want_cpu = "i686") |
| _match(env, got, "pkg-0.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl") |
| |
| # Check that we prefer the specific wheel |
| got = select_whl(whls = WHL_LIST, want_abis = ["cp311"], want_os = "mac os", want_cpu = "x86_64") |
| _match(env, got, "pkg-0.0.1-cp311-cp311-macosx_10_9_x86_64.whl") |
| |
| got = select_whl(whls = WHL_LIST, want_abis = ["cp311"], want_os = "mac os", want_cpu = "aarch64") |
| _match(env, got, "pkg-0.0.1-cp311-cp311-macosx_11_0_arm64.whl") |
| |
| # Check that we can use the universal2 if the arm wheel is not available |
| got = select_whl(whls = [w for w in WHL_LIST if "arm64" not in w.filename], want_abis = ["cp311"], want_os = "mac os", want_cpu = "aarch64") |
| _match(env, got, "pkg-0.0.1-cp311-cp311-macosx_10_9_universal2.whl") |
| |
| # Check we prefer platform specific wheels |
| got = select_whl(whls = WHL_LIST, want_abis = ["none", "abi3", "cp39"], want_os = "linux", want_cpu = "x86_64") |
| _match(env, got, "pkg-0.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl") |
| |
| _tests.append(_test_selecting) |
| |
| def select_whl_test_suite(name): |
| """Create the test suite. |
| |
| Args: |
| name: the name of the test suite |
| """ |
| test_suite(name = name, basic_tests = _tests) |