From 43139f0dd6ed880c314b45972be79dfeb3c3d223 Mon Sep 17 00:00:00 2001 From: Dominik Picheta Date: Thu, 16 Jan 2025 17:24:34 +0000 Subject: [PATCH] Fixes Python SDK tests when external package loading is enabled. --- src/workerd/server/tests/python/BUILD.bazel | 2 -- src/workerd/server/tests/python/sdk/proxy.js | 12 +++++++++ .../server/tests/python/sdk/sdk.wd-test | 27 ++++++++++++++++--- 3 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 src/workerd/server/tests/python/sdk/proxy.js diff --git a/src/workerd/server/tests/python/BUILD.bazel b/src/workerd/server/tests/python/BUILD.bazel index bfa7eb38bbd..27e0872920b 100644 --- a/src/workerd/server/tests/python/BUILD.bazel +++ b/src/workerd/server/tests/python/BUILD.bazel @@ -30,8 +30,6 @@ py_wd_test("subdirectory") py_wd_test( "sdk", - # TODO(EW-8976): Disabled in dev due to test getting stuck - python_flags = ["0.26.0a2"], tags = [ # TODO(someday): Fix asan failure for this, see https://github.com/cloudflare/workerd/pull/3140#discussion_r1858273318 "no-asan", diff --git a/src/workerd/server/tests/python/sdk/proxy.js b/src/workerd/server/tests/python/sdk/proxy.js new file mode 100644 index 00000000000..f32b8b93d27 --- /dev/null +++ b/src/workerd/server/tests/python/sdk/proxy.js @@ -0,0 +1,12 @@ +export default { + async fetch(req, env) { + const url = new URL(req.url); + if (url.hostname == 'pyodide-packages.runtime-playground.workers.dev') { + return env.INTERNET.fetch(req); + } else if (url.hostname == 'example.com') { + return env.PYTHON.fetch(req); + } + + throw new Error('Invalid url: ' + url); + }, +}; diff --git a/src/workerd/server/tests/python/sdk/sdk.wd-test b/src/workerd/server/tests/python/sdk/sdk.wd-test index 7060d4ecc9c..3809929bf14 100644 --- a/src/workerd/server/tests/python/sdk/sdk.wd-test +++ b/src/workerd/server/tests/python/sdk/sdk.wd-test @@ -19,13 +19,34 @@ const server :Workerd.Worker = ( compatibilityFlags = [%PYTHON_FEATURE_FLAGS], ); +# We need this proxy so that internal requests made to fetch packages for Python Workers are sent +# out to the open internet and not to the python-server worker. +const jsChooserProxy :Workerd.Worker = ( + modules = [ + (name = "proxy.js", esModule = embed "proxy.js") + ], + bindings = [ + ( name = "PYTHON", service = "python-server" ), + ( name = "INTERNET", service = "external" ), + ], + compatibilityDate = "2024-10-01", +); + const unitTests :Workerd.Config = ( services = [ - ( name = "python-sdk", - worker = .python + ( name = "external", + network = ( + tlsOptions = (trustBrowserCas = true) + ) ), ( name = "internet", + worker = .jsChooserProxy + ), + ( name = "python-server", worker = .server - ) + ), + ( name = "python-sdk", + worker = .python + ), ], );