diff --git a/package.json b/package.json index a9676848..f78eca03 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "test:e2e:obsidian:cli-to-obsidian-sync": "tsx test/e2e-obsidian/scripts/cli-to-obsidian-sync.ts", "test:e2e:obsidian:minio-upload": "tsx test/e2e-obsidian/scripts/minio-upload.ts", "test:e2e:obsidian:object-storage-setup-uri-workflow": "tsx test/e2e-obsidian/scripts/object-storage-setup-uri-workflow.ts", + "test:e2e:obsidian:object-storage-custom-http-handler-setup-uri-workflow": "tsx test/e2e-obsidian/scripts/object-storage-setup-uri-workflow.ts --custom-http-handler", "test:e2e:obsidian:p2p-setup-uri-workflow": "tsx test/e2e-obsidian/scripts/p2p-setup-uri-workflow.ts", "pretest:e2e:obsidian:p2p-connection-check": "npm run build && npm run build --workspace webpeer", "test:e2e:obsidian:p2p-connection-check": "tsx test/e2e-obsidian/scripts/p2p-connection-check.ts", diff --git a/test/e2e-obsidian/scripts/local-suite.ts b/test/e2e-obsidian/scripts/local-suite.ts index 9cb9404f..87da7263 100644 --- a/test/e2e-obsidian/scripts/local-suite.ts +++ b/test/e2e-obsidian/scripts/local-suite.ts @@ -35,6 +35,10 @@ const testSteps: Step[] = [ name: "Object Storage Setup URI workflow", args: ["run", "test:e2e:obsidian:object-storage-setup-uri-workflow"], }, + { + name: "Object Storage Custom HTTP Handler Setup URI workflow", + args: ["run", "test:e2e:obsidian:object-storage-custom-http-handler-setup-uri-workflow"], + }, { name: "P2P Setup URI workflow", args: ["run", "test:e2e:obsidian:p2p-setup-uri-workflow"] }, { name: "startup scan", args: ["run", "test:e2e:obsidian:startup-scan"] }, { name: "provisioned Setup URI workflow", args: ["run", "test:e2e:obsidian:setup-uri-workflow"] }, diff --git a/test/e2e-obsidian/scripts/object-storage-setup-uri-workflow.ts b/test/e2e-obsidian/scripts/object-storage-setup-uri-workflow.ts index a75993c8..9316e4b8 100644 --- a/test/e2e-obsidian/scripts/object-storage-setup-uri-workflow.ts +++ b/test/e2e-obsidian/scripts/object-storage-setup-uri-workflow.ts @@ -45,7 +45,10 @@ import { createTemporaryVault, type TemporaryVault } from "../runner/vault.ts"; process.env.E2E_OBSIDIAN_CLI_TIMEOUT_MS ??= "90000"; const execFileAsync = promisify(execFile); -const captures: SetupCaptureNames = { scenario: "object-storage-setup-uri", guide: "object-storage-setup" }; +const useCustomRequestHandler = process.argv.includes("--custom-http-handler"); +const captures: SetupCaptureNames = useCustomRequestHandler + ? { scenario: "object-storage-custom-http-handler-setup-uri", guide: "object-storage-custom-http-handler-setup" } + : { scenario: "object-storage-setup-uri", guide: "object-storage-setup" }; const noteFromFirst = "E2E/object-storage/from-first.md"; const noteFromSecond = "E2E/object-storage/from-second.md"; const firstContent = @@ -94,7 +97,8 @@ async function runDeno(script: string, environment: NodeJS.ProcessEnv): Promise< async function generateBootstrapSetupURI( objectStorage: ObjectStorageConfig, - bucketPrefix: string + bucketPrefix: string, + useCustomRequestHandler: boolean ): Promise { const setupPassphrase = randomBytes(24).toString("base64url"); const output = await runDeno("utils/setup/generate_setup_uri.ts", { @@ -107,7 +111,7 @@ async function generateBootstrapSetupURI( region: objectStorage.region, force_path_style: String(objectStorage.forcePathStyle), bucket_prefix: bucketPrefix, - use_custom_request_handler: "true", + ...(useCustomRequestHandler ? { use_custom_request_handler: "true" } : {}), passphrase: randomBytes(24).toString("base64url"), uri_passphrase: setupPassphrase, }); @@ -252,7 +256,7 @@ async function main(): Promise { const objectStorage = await loadObjectStorageConfig(); const bucketPrefix = makeUniqueBucketPrefix("setup-uri-workflow"); - const bootstrapArtifact = await generateBootstrapSetupURI(objectStorage, bucketPrefix); + const bootstrapArtifact = await generateBootstrapSetupURI(objectStorage, bucketPrefix, useCustomRequestHandler); const vaultA = await createTemporaryVault(); const vaultB = await createTemporaryVault(); const [portA, portB] = sessionPorts(); @@ -288,8 +292,8 @@ async function main(): Promise { ); assertEqual( firstState.useCustomRequestHandler, - true, - "The first device did not activate the Custom HTTP Handler." + useCustomRequestHandler, + "The first device did not preserve the expected Custom HTTP Handler setting." ); await writeNote(context.cliBinary, sessionA.cliEnv, noteFromFirst, firstContent); @@ -338,8 +342,8 @@ async function main(): Promise { ); assertEqual( secondState.useCustomRequestHandler, - true, - "The second device did not import the Custom HTTP Handler setting." + useCustomRequestHandler, + "The second device did not import the expected Custom HTTP Handler setting." ); await pushLocalChanges(context.cliBinary, sessionB.cliEnv); await waitForPathContent(vaultB, noteFromFirst, firstContent); @@ -348,7 +352,7 @@ async function main(): Promise { portB, noteFromFirst, "Object Storage from the first device", - "guide-object-storage-setup-first-to-second.png" + `guide-${captures.guide}-first-to-second.png` ) ); @@ -368,12 +372,14 @@ async function main(): Promise { portA, noteFromSecond, "Object Storage from the second device", - "guide-object-storage-setup-second-to-first.png" + `guide-${captures.guide}-second-to-first.png` ) ); console.log( - `Object Storage Setup URI and two-device roundtrip succeeded. Screenshots: ${screenshots.join(", ")}` + `Object Storage Setup URI and two-device roundtrip succeeded with the ${ + useCustomRequestHandler ? "Custom HTTP Handler" : "default HTTP handler" + }. Screenshots: ${screenshots.join(", ")}` ); } finally { await stopSessions(context).catch((error: unknown) => { diff --git a/test/e2e-obsidian/scripts/run-focused.ts b/test/e2e-obsidian/scripts/run-focused.ts index f5697217..508f258c 100644 --- a/test/e2e-obsidian/scripts/run-focused.ts +++ b/test/e2e-obsidian/scripts/run-focused.ts @@ -21,6 +21,7 @@ const focusedScenarios = new Set([ "cli-to-obsidian-sync", "minio-upload", "object-storage-setup-uri-workflow", + "object-storage-custom-http-handler-setup-uri-workflow", "p2p-setup-uri-workflow", "partial-startup-file-failure", "startup-scan",