fix(e2e): skip seaweedfs filer check on onion targets

When an app rides onion, Playwright routes through the node Tor SOCKS
proxy, which cannot resolve the clearnet-internal SeaweedFS filer UI
domain (net::ERR_SOCKS_CONNECTION_FAILED). Skip the filer storage check
on onion targets in all consumer specs — same pattern already proven in
the nextcloud spec. Clearnet runs are unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
kevinveenbirkenbachandClaude Opus 4.8 committed 2026-07-14 19:34:59 +02:00
1 parent 89c6d43b77
commit 6f9142027d
12 files changed
+24 -12

No files matched your search

@@ -1,5 +1,5 @@
const { test, expect } = require("@playwright/test");
const { resolveTimeout } = require("./timeouts");
const { resolveTimeout, isOnionTarget } = require("./timeouts");
const { skipUnlessServiceEnabled } = require("./service-gating");
const {
runSeaweedfsStorageCheck,
@@ -23,6 +23,7 @@ const akauntingAdminPassword = decodeDotenvQuotedValue(process.env.AKAUNTING_ADM
test.use({ ignoreHTTPSErrors: true });
test("seaweedfs: an uploaded Akaunting company logo is stored in the SeaweedFS bucket", async ({ page, browser }) => {
test.skip(isOnionTarget(), "SeaweedFS filer UI is not a Tor surface on an onion node (headless backend)");
skipUnlessServiceEnabled("seaweedfs");
test.setTimeout(resolveTimeout(180_000));
@@ -7,7 +7,7 @@
// check proves that the configured bucket gained an object.
const { test, expect } = require("@playwright/test");
const { resolveTimeout } = require("./timeouts");
const { resolveTimeout, isOnionTarget } = require("./timeouts");
const { skipUnlessServiceEnabled } = require("./service-gating");
const {
runSeaweedfsStorageCheck,
@@ -109,6 +109,7 @@ async function createBaserowFileRow(appPage, baseUrl, accessToken) {
}
test("seaweedfs: an uploaded Baserow file-field document is stored in the SeaweedFS bucket", async ({ page, browser }) => {
test.skip(isOnionTarget(), "SeaweedFS filer UI is not a Tor surface on an onion node (headless backend)");
skipUnlessServiceEnabled("seaweedfs");
skipUnlessServiceEnabled("sso");
test.setTimeout(resolveTimeout(180_000));
@@ -9,7 +9,7 @@
// Filer UI.
const { test, expect } = require("@playwright/test");
const { resolveTimeout } = require("./timeouts");
const { resolveTimeout, isOnionTarget } = require("./timeouts");
const { skipUnlessServiceEnabled } = require("./service-gating");
const {
runSeaweedfsStorageCheck,
@@ -24,6 +24,7 @@ const PNG_AVATAR_BASE64 =
"iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAA60lEQVR4nO3QQQ3AIADAQEDh5CAHqbOwvsiSOwVN537O4Jt1O+BPzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCl7E6QIw0tiFNgAAAABJRU5ErkJggg==";
test("seaweedfs: a BookWyrm avatar upload is stored in the SeaweedFS bucket", async ({ page, browser }) => {
test.skip(isOnionTarget(), "SeaweedFS filer UI is not a Tor surface on an onion node (headless backend)");
skipUnlessServiceEnabled("seaweedfs");
test.setTimeout(resolveTimeout(180_000));
@@ -11,7 +11,7 @@
// check proves the bucket grew via the Filer UI.
const { test, expect } = require("@playwright/test");
const { resolveTimeout } = require("./timeouts");
const { resolveTimeout, isOnionTarget } = require("./timeouts");
const { skipUnlessServiceEnabled } = require("./service-gating");
const { runSeaweedfsStorageCheck, decodeDotenvQuotedValue } = require("./personas");
@@ -23,6 +23,7 @@ const PNG_64x64 = Buffer.from(
test.use({ ignoreHTTPSErrors: true });
test("seaweedfs: an uploaded Decidim avatar is stored in the SeaweedFS bucket", async ({ page, browser }) => {
test.skip(isOnionTarget(), "SeaweedFS filer UI is not a Tor surface on an onion node (headless backend)");
skipUnlessServiceEnabled("seaweedfs");
test.setTimeout(resolveTimeout(180_000));
@@ -16,7 +16,7 @@
// and the SEAWEEDFS_* keys consumed by runSeaweedfsStorageCheck.
const { test, expect } = require("@playwright/test");
const { resolveTimeout } = require("./timeouts");
const { resolveTimeout, isOnionTarget } = require("./timeouts");
const { skipUnlessServiceEnabled } = require("./service-gating");
const { runSeaweedfsStorageCheck, performKeycloakLoginForm, decodeDotenvQuotedValue } = require("./personas");
@@ -45,6 +45,7 @@ async function clickFiderSsoButton(locator) {
test.use({ ignoreHTTPSErrors: true });
test("seaweedfs: an uploaded Fider tenant logo is stored in the SeaweedFS bucket", async ({ page, browser }) => {
test.skip(isOnionTarget(), "SeaweedFS filer UI is not a Tor surface on an onion node (headless backend)");
skipUnlessServiceEnabled("seaweedfs");
test.setTimeout(resolveTimeout(180_000));
@@ -17,7 +17,7 @@
// runSeaweedfsStorageCheck.
const { test, expect } = require("./onion-test");
const { resolveTimeout } = require("./timeouts");
const { resolveTimeout, isOnionTarget } = require("./timeouts");
const { skipUnlessServiceEnabled } = require("./service-gating");
const { runSeaweedfsStorageCheck } = require("./personas");
const shared = require("./_shared");
@@ -30,6 +30,7 @@ const AVATAR_PNG = Buffer.from(
test.use({ ignoreHTTPSErrors: true });
test("seaweedfs: an uploaded Matrix avatar is stored in the SeaweedFS bucket", async ({ page, browser }) => {
test.skip(isOnionTarget(), "SeaweedFS filer UI is not a Tor surface on an onion node (headless backend)");
skipUnlessServiceEnabled("seaweedfs");
skipUnlessServiceEnabled("seaweedfs_frontend");
test.skip(
@@ -14,7 +14,7 @@
// draft preview and the posted attachment overlay.
const { test, expect } = require("@playwright/test");
const { resolveTimeout } = require("./timeouts");
const { resolveTimeout, isOnionTarget } = require("./timeouts");
const { skipUnlessServiceEnabled } = require("./service-gating");
const { runSeaweedfsStorageCheck } = require("./personas");
const { performKeycloakLoginForm } = require("./personas");
@@ -23,6 +23,7 @@ const shared = require("./_shared");
test.use({ ignoreHTTPSErrors: true });
test("seaweedfs: a Mattermost message attachment is stored in the SeaweedFS bucket", async ({ page, browser }) => {
test.skip(isOnionTarget(), "SeaweedFS filer UI is not a Tor surface on an onion node (headless backend)");
skipUnlessServiceEnabled("seaweedfs");
test.setTimeout(resolveTimeout(180_000));
@@ -14,7 +14,7 @@
// via the Filer UI.
const { test, expect } = require("@playwright/test");
const { resolveTimeout } = require("./timeouts");
const { resolveTimeout, isOnionTarget } = require("./timeouts");
const { skipUnlessServiceEnabled } = require("./service-gating");
const { runSeaweedfsStorageCheck } = require("./personas");
const shared = require("./_shared");
@@ -22,6 +22,7 @@ const shared = require("./_shared");
test.use({ ignoreHTTPSErrors: true });
test("seaweedfs: an uploaded Open WebUI document is stored in the SeaweedFS bucket", async ({ page, browser }) => {
test.skip(isOnionTarget(), "SeaweedFS filer UI is not a Tor surface on an onion node (headless backend)");
skipUnlessServiceEnabled("seaweedfs");
test.setTimeout(resolveTimeout(180_000));
@@ -1,5 +1,5 @@
const path = require("path");
const { resolveTimeout } = require("./timeouts");
const { resolveTimeout, isOnionTarget } = require("./timeouts");
const { test, expect } = require("@playwright/test");
const { skipUnlessServiceEnabled } = require("./service-gating");
const {
@@ -121,6 +121,7 @@ async function uploadWebVideo(page) {
}
test("seaweedfs: an uploaded PeerTube video is stored in the SeaweedFS bucket", async ({ page, browser }) => {
test.skip(isOnionTarget(), "SeaweedFS filer UI is not a Tor surface on an onion node (headless backend)");
skipUnlessServiceEnabled("seaweedfs");
test.setTimeout(resolveTimeout(480_000));
@@ -9,7 +9,7 @@
// UI. Login reuses the suite's `penpotOidcLogin` helper from `./_shared`.
const { test, expect } = require("@playwright/test");
const { resolveTimeout } = require("./timeouts");
const { resolveTimeout, isOnionTarget } = require("./timeouts");
const { skipUnlessServiceEnabled } = require("./service-gating");
const { runSeaweedfsStorageCheck } = require("./personas");
const shared = require("./_shared");
@@ -17,6 +17,7 @@ const shared = require("./_shared");
test.use({ ignoreHTTPSErrors: true });
test("seaweedfs: an uploaded Penpot image asset is stored in the SeaweedFS bucket", async ({ page, browser }) => {
test.skip(isOnionTarget(), "SeaweedFS filer UI is not a Tor surface on an onion node (headless backend)");
skipUnlessServiceEnabled("seaweedfs");
test.setTimeout(resolveTimeout(180_000));
@@ -20,7 +20,7 @@
// SEAWEEDFS_* keys consumed by runSeaweedfsStorageCheck.
const { test, expect } = require("@playwright/test");
const { resolveTimeout } = require("./timeouts");
const { resolveTimeout, isOnionTarget } = require("./timeouts");
const { skipUnlessServiceEnabled } = require("./service-gating");
const { runSeaweedfsStorageCheck } = require("./personas");
const shared = require("./_shared");
@@ -38,6 +38,7 @@ function pixelfedAdminScenario() {
test.use({ ignoreHTTPSErrors: true });
test("seaweedfs: an uploaded Pixelfed photo is stored in the SeaweedFS bucket", async ({ page, browser }) => {
test.skip(isOnionTarget(), "SeaweedFS filer UI is not a Tor surface on an onion node (headless backend)");
skipUnlessServiceEnabled("seaweedfs");
test.setTimeout(resolveTimeout(180_000));
@@ -1,5 +1,5 @@
const { test, expect } = require("@playwright/test");
const { resolveTimeout } = require("./timeouts");
const { resolveTimeout, isOnionTarget } = require("./timeouts");
const { skipUnlessServiceEnabled } = require("./service-gating");
const { runSeaweedfsStorageCheck } = require("./personas");
const shared = require("./_shared");
@@ -21,6 +21,7 @@ const AVATAR_PNG = Buffer.from(
test.use({ ignoreHTTPSErrors: true });
test("seaweedfs: an uploaded Taiga avatar is stored in the SeaweedFS bucket", async ({ page, browser }) => {
test.skip(isOnionTarget(), "SeaweedFS filer UI is not a Tor surface on an onion node (headless backend)");
skipUnlessServiceEnabled("seaweedfs");
test.setTimeout(resolveTimeout(180_000));