From cfb08a1e9a62e7cad54b79597935573987b4abde Mon Sep 17 00:00:00 2001 From: George Fu Date: Mon, 28 Oct 2024 19:08:13 +0000 Subject: [PATCH 01/12] test: throw final error in turbo script --- scripts/turbo/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/turbo/index.js b/scripts/turbo/index.js index 1bf55e046dc3..efa10156efaa 100644 --- a/scripts/turbo/index.js +++ b/scripts/turbo/index.js @@ -32,6 +32,7 @@ const runTurbo = async (task, args, { apiSecret, apiEndpoint, apiSignatureKey } // Retry without additional filters return await runTurbo(task, null, apiSecret, apiEndpoint); } + throw error; } }; From 079bc0f1325ba06bc1b1b43ac07843af23334f5b Mon Sep 17 00:00:00 2001 From: George Fu Date: Mon, 28 Oct 2024 19:21:46 +0000 Subject: [PATCH 02/12] test: add region --- private/aws-util-test/src/clients/Weather.integ.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/private/aws-util-test/src/clients/Weather.integ.spec.ts b/private/aws-util-test/src/clients/Weather.integ.spec.ts index 2efeb8bcdd95..56851f77d40c 100644 --- a/private/aws-util-test/src/clients/Weather.integ.spec.ts +++ b/private/aws-util-test/src/clients/Weather.integ.spec.ts @@ -1,6 +1,5 @@ -import { test as it, describe, expect } from "vitest"; - import { Weather } from "@aws-sdk/weather"; +import { describe, expect, test as it } from "vitest"; import { requireRequestsFrom } from "../requests/test-http-handler"; @@ -12,6 +11,7 @@ describe(Weather.name, () => { secretAccessKey: "", }, endpoint: "https://localhost", + region: "us-west-2", }); requireRequestsFrom(client).toMatch({ From b19d776550fea08710fa2917bf62d387725ed5f8 Mon Sep 17 00:00:00 2001 From: "Kamat, Trivikram" <16024985+trivikr@users.noreply.github.com> Date: Mon, 28 Oct 2024 19:40:48 +0000 Subject: [PATCH 03/12] test(middleware-user-agent): add client region in integ test --- .../src/middleware-user-agent.integ.spec.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/middleware-user-agent/src/middleware-user-agent.integ.spec.ts b/packages/middleware-user-agent/src/middleware-user-agent.integ.spec.ts index 0289ad462e1d..657c7b81ca18 100644 --- a/packages/middleware-user-agent/src/middleware-user-agent.integ.spec.ts +++ b/packages/middleware-user-agent/src/middleware-user-agent.integ.spec.ts @@ -30,6 +30,7 @@ describe("middleware-user-agent", () => { describe("features", () => { it("should detect DDB mapper, account id, and account id mode", async () => { const client = new DynamoDB({ + region: "us-west-2", accountIdEndpointMode: async () => "required" as const, }); From b70ec981bfb87b3a230650472e31fe2a6ed56eb8 Mon Sep 17 00:00:00 2001 From: George Fu Date: Mon, 28 Oct 2024 20:08:18 +0000 Subject: [PATCH 04/12] test(middleware-websocket): set mock credentials --- .../src/middleware-websocket.integ.spec.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/middleware-websocket/src/middleware-websocket.integ.spec.ts b/packages/middleware-websocket/src/middleware-websocket.integ.spec.ts index 926bac4fb669..d8d9119dc4b7 100644 --- a/packages/middleware-websocket/src/middleware-websocket.integ.spec.ts +++ b/packages/middleware-websocket/src/middleware-websocket.integ.spec.ts @@ -16,6 +16,10 @@ describe("middleware-websocket", () => { const client = new RekognitionStreaming({ region: "us-west-2", logger, + credentials: { + accessKeyId: "INTEG", + secretAccessKey: "INTEG", + }, }); requireRequestsFrom(client).toMatch({ protocol: "wss:", From cf2e21d4e747d41d6eb937378dc74e6f227efcdd Mon Sep 17 00:00:00 2001 From: George Fu Date: Mon, 28 Oct 2024 20:19:25 +0000 Subject: [PATCH 05/12] chore(scripts): no retry in turbo --- scripts/turbo/index.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/scripts/turbo/index.js b/scripts/turbo/index.js index efa10156efaa..b5640e799e7e 100644 --- a/scripts/turbo/index.js +++ b/scripts/turbo/index.js @@ -28,10 +28,6 @@ const runTurbo = async (task, args, { apiSecret, apiEndpoint, apiSignatureKey } }); } catch (error) { console.error("Error running turbo:", error); - if (args?.length > 0) { - // Retry without additional filters - return await runTurbo(task, null, apiSecret, apiEndpoint); - } throw error; } }; From 0d3edf71c4967045c2cf092d1f5c8b22d34ea746 Mon Sep 17 00:00:00 2001 From: George Fu Date: Mon, 28 Oct 2024 20:34:57 +0000 Subject: [PATCH 06/12] test(aws-util-test): delete AWS env vars, set mock credentials in integ tests --- .../src/middleware-eventstream.integ.spec.ts | 9 +++++++- .../src/requests/test-http-handler.ts | 23 ++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/packages/middleware-eventstream/src/middleware-eventstream.integ.spec.ts b/packages/middleware-eventstream/src/middleware-eventstream.integ.spec.ts index 781f563e5300..b8cf25b96cbc 100644 --- a/packages/middleware-eventstream/src/middleware-eventstream.integ.spec.ts +++ b/packages/middleware-eventstream/src/middleware-eventstream.integ.spec.ts @@ -40,7 +40,14 @@ describe("middleware-eventstream", () => { describe(RekognitionStreaming.name, () => { it("should set streaming headers", async () => { - const client = new RekognitionStreaming({ region: "us-west-2", logger }); + const client = new RekognitionStreaming({ + region: "us-west-2", + logger, + credentials: { + accessKeyId: "INTEG", + secretAccessKey: "INTEG", + }, + }); requireRequestsFrom(client).toMatch({ headers: { diff --git a/private/aws-util-test/src/requests/test-http-handler.ts b/private/aws-util-test/src/requests/test-http-handler.ts index e27282cd780b..664d6df5761e 100644 --- a/private/aws-util-test/src/requests/test-http-handler.ts +++ b/private/aws-util-test/src/requests/test-http-handler.ts @@ -47,7 +47,28 @@ export class TestHttpHandler implements HttpHandler { private client?: Client; private assertions = 0; - public constructor(public readonly matcher: HttpRequestMatcher) {} + public constructor(public readonly matcher: HttpRequestMatcher) { + const RESERVED_ENVIRONMENT_VARIABLES = { + AWS_DEFAULT_REGION: 1, + AWS_REGION: 1, + AWS_PROFILE: 1, + AWS_ACCESS_KEY_ID: 1, + AWS_SECRET_ACCESS_KEY: 1, + AWS_SESSION_TOKEN: 1, + AWS_CREDENTIAL_EXPIRATION: 1, + AWS_CREDENTIAL_SCOPE: 1, + AWS_EC2_METADATA_DISABLED: 1, + AWS_WEB_IDENTITY_TOKEN_FILE: 1, + AWS_ROLE_ARN: 1, + AWS_CONTAINER_CREDENTIALS_FULL_URI: 1, + AWS_CONTAINER_CREDENTIALS_RELATIVE_URI: 1, + AWS_CONTAINER_AUTHORIZATION_TOKEN: 1, + AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE: 1, + }; + for (const key in RESERVED_ENVIRONMENT_VARIABLES) { + delete process.env[key]; + } + } /** * @param client - to watch for requests. From bdb87263b56f0d83b775b160fc36edb0fd5cd47f Mon Sep 17 00:00:00 2001 From: George Fu Date: Mon, 28 Oct 2024 22:28:44 +0000 Subject: [PATCH 07/12] test(aws-middleware-test): add mock creds for integration tests --- .../middleware-apply-body-checksum.spec.ts | 11 +++-- .../src/middleware-content-length.spec.ts | 43 ++++++++++++++++--- .../src/middleware-endpoint.spec.ts | 11 ++++- .../src/middleware-retry.spec.ts | 7 ++- .../src/middleware-serde.spec.ts | 35 ++++++++++++--- .../src/util-stream.spec.ts | 15 +++++-- 6 files changed, 99 insertions(+), 23 deletions(-) diff --git a/private/aws-middleware-test/src/middleware-apply-body-checksum.spec.ts b/private/aws-middleware-test/src/middleware-apply-body-checksum.spec.ts index 6b8ee965e9c3..d9fd64247a07 100644 --- a/private/aws-middleware-test/src/middleware-apply-body-checksum.spec.ts +++ b/private/aws-middleware-test/src/middleware-apply-body-checksum.spec.ts @@ -1,13 +1,18 @@ -import { test as it, describe, expect } from "vitest"; - import { S3Control } from "@aws-sdk/client-s3-control"; +import { describe, expect, test as it } from "vitest"; import { requireRequestsFrom } from "../../aws-util-test/src"; describe("middleware-apply-body-checksum", () => { describe(S3Control.name, () => { it("should add body-checksum", async () => { - const client = new S3Control({ region: "us-west-2" }); + const client = new S3Control({ + region: "us-west-2", + credentials: { + accessKeyId: "INTEG", + secretAccessKey: "INTEG", + }, + }); requireRequestsFrom(client).toMatch({ headers: { "content-md5": /^.{22}(==)?$/i, diff --git a/private/aws-middleware-test/src/middleware-content-length.spec.ts b/private/aws-middleware-test/src/middleware-content-length.spec.ts index 2c9d73db112b..95b19fc468c6 100644 --- a/private/aws-middleware-test/src/middleware-content-length.spec.ts +++ b/private/aws-middleware-test/src/middleware-content-length.spec.ts @@ -1,15 +1,20 @@ -import { test as it, describe, expect } from "vitest"; - import { AccessAnalyzer } from "@aws-sdk/client-accessanalyzer"; import { S3 } from "@aws-sdk/client-s3"; import { XRay } from "@aws-sdk/client-xray"; +import { describe, expect, test as it } from "vitest"; import { requireRequestsFrom } from "../../../private/aws-util-test/src"; describe("middleware-content-length", () => { describe(AccessAnalyzer.name, () => { it("should not add content-length if no body", async () => { - const client = new AccessAnalyzer({ region: "us-west-2" }); + const client = new AccessAnalyzer({ + region: "us-west-2", + credentials: { + accessKeyId: "INTEG", + secretAccessKey: "INTEG", + }, + }); requireRequestsFrom(client).toMatch({ headers: { "content-length": /undefined/, @@ -24,7 +29,13 @@ describe("middleware-content-length", () => { }); it("should add content-length if body present", async () => { - const client = new AccessAnalyzer({ region: "us-west-2" }); + const client = new AccessAnalyzer({ + region: "us-west-2", + credentials: { + accessKeyId: "INTEG", + secretAccessKey: "INTEG", + }, + }); requireRequestsFrom(client).toMatch({ headers: { "content-length": /106/, @@ -42,7 +53,13 @@ describe("middleware-content-length", () => { describe(S3.name, () => { it("should not add content-length if no body", async () => { - const client = new S3({ region: "us-west-2" }); + const client = new S3({ + region: "us-west-2", + credentials: { + accessKeyId: "INTEG", + secretAccessKey: "INTEG", + }, + }); requireRequestsFrom(client).toMatch({ headers: { "content-length": /undefined/, @@ -58,7 +75,13 @@ describe("middleware-content-length", () => { }); it("should add content-length if body present", async () => { - const client = new S3({ region: "us-west-2" }); + const client = new S3({ + region: "us-west-2", + credentials: { + accessKeyId: "INTEG", + secretAccessKey: "INTEG", + }, + }); requireRequestsFrom(client).toMatch({ headers: { "content-length": /4/, @@ -77,7 +100,13 @@ describe("middleware-content-length", () => { describe(XRay.name, () => { it("should add content-length if body present", async () => { - const client = new XRay({ region: "us-west-2" }); + const client = new XRay({ + region: "us-west-2", + credentials: { + accessKeyId: "INTEG", + secretAccessKey: "INTEG", + }, + }); requireRequestsFrom(client).toMatch({ headers: { "content-length": /24/, diff --git a/private/aws-middleware-test/src/middleware-endpoint.spec.ts b/private/aws-middleware-test/src/middleware-endpoint.spec.ts index c3b504b8da6e..2f2a8eb5aa8b 100644 --- a/private/aws-middleware-test/src/middleware-endpoint.spec.ts +++ b/private/aws-middleware-test/src/middleware-endpoint.spec.ts @@ -1,7 +1,6 @@ -import { test as it, describe, expect } from "vitest"; - import { S3 } from "@aws-sdk/client-s3"; import { S3Control } from "@aws-sdk/client-s3-control"; +import { describe, expect, test as it } from "vitest"; import { requireRequestsFrom } from "../../aws-util-test/src"; @@ -13,6 +12,10 @@ describe("middleware-endpoint", () => { it("should resolve endpoints", async () => { const client = new S3({ region: "us-west-2", + credentials: { + accessKeyId: "INTEG", + secretAccessKey: "INTEG", + }, useFipsEndpoint: true, useDualstackEndpoint: true, useArnRegion: true, @@ -33,6 +36,10 @@ describe("middleware-endpoint", () => { it("should resolve endpoints", async () => { const client = new S3Control({ region: "us-west-2", + credentials: { + accessKeyId: "INTEG", + secretAccessKey: "INTEG", + }, useFipsEndpoint: true, useDualstackEndpoint: true, useArnRegion: true, diff --git a/private/aws-middleware-test/src/middleware-retry.spec.ts b/private/aws-middleware-test/src/middleware-retry.spec.ts index 83e13baf61bf..e36ab8b540f9 100644 --- a/private/aws-middleware-test/src/middleware-retry.spec.ts +++ b/private/aws-middleware-test/src/middleware-retry.spec.ts @@ -1,6 +1,5 @@ -import { test as it, describe, expect } from "vitest"; - import { Lambda } from "@aws-sdk/client-lambda"; +import { describe, expect, test as it } from "vitest"; import { requireRequestsFrom } from "../../aws-util-test/src"; @@ -9,6 +8,10 @@ describe("middleware-retry", () => { it("should set retry headers", async () => { const client = new Lambda({ region: "us-west-2", + credentials: { + accessKeyId: "INTEG", + secretAccessKey: "INTEG", + }, }); requireRequestsFrom(client).toMatch({ diff --git a/private/aws-middleware-test/src/middleware-serde.spec.ts b/private/aws-middleware-test/src/middleware-serde.spec.ts index 89c5e26fcbc1..0d2f4ea3cfe2 100644 --- a/private/aws-middleware-test/src/middleware-serde.spec.ts +++ b/private/aws-middleware-test/src/middleware-serde.spec.ts @@ -1,16 +1,21 @@ -import { test as it, describe } from "vitest"; - import { EC2 } from "@aws-sdk/client-ec2"; import { S3 } from "@aws-sdk/client-s3"; import { SageMaker } from "@aws-sdk/client-sagemaker"; import { SageMakerRuntime } from "@aws-sdk/client-sagemaker-runtime"; +import { describe, test as it } from "vitest"; import { requireRequestsFrom } from "../../aws-util-test/src"; describe("middleware-serde", () => { describe(S3.name, () => { it("should serialize xml", async () => { - const client = new S3({ region: "us-west-2" }); + const client = new S3({ + region: "us-west-2", + credentials: { + accessKeyId: "INTEG", + secretAccessKey: "INTEG", + }, + }); requireRequestsFrom(client).toMatch({ method: "PUT", hostname: "s3.us-west-2.amazonaws.com", @@ -55,7 +60,13 @@ describe("middleware-serde", () => { describe(EC2.name, () => { it("should serialize query", async () => { - const client = new EC2({ region: "us-west-2" }); + const client = new EC2({ + region: "us-west-2", + credentials: { + accessKeyId: "INTEG", + secretAccessKey: "INTEG", + }, + }); requireRequestsFrom(client).toMatch({ method: "POST", hostname: "ec2.us-west-2.amazonaws.com", @@ -79,7 +90,13 @@ describe("middleware-serde", () => { describe(SageMaker.name, () => { it("should serialize json", async () => { - const client = new SageMaker({ region: "us-west-2" }); + const client = new SageMaker({ + region: "us-west-2", + credentials: { + accessKeyId: "INTEG", + secretAccessKey: "INTEG", + }, + }); requireRequestsFrom(client).toMatch({ method: "POST", hostname: "api.sagemaker.us-west-2.amazonaws.com", @@ -102,7 +119,13 @@ describe("middleware-serde", () => { describe(SageMakerRuntime.name, () => { it("should serialize json", async () => { - const client = new SageMakerRuntime({ region: "us-west-2" }); + const client = new SageMakerRuntime({ + region: "us-west-2", + credentials: { + accessKeyId: "INTEG", + secretAccessKey: "INTEG", + }, + }); requireRequestsFrom(client).toMatch({ method: "POST", hostname: "runtime.sagemaker.us-west-2.amazonaws.com", diff --git a/private/aws-middleware-test/src/util-stream.spec.ts b/private/aws-middleware-test/src/util-stream.spec.ts index a069a53c7d87..ca897549397a 100644 --- a/private/aws-middleware-test/src/util-stream.spec.ts +++ b/private/aws-middleware-test/src/util-stream.spec.ts @@ -1,18 +1,23 @@ -import { test as it, describe, expect } from "vitest"; - import { Lambda } from "@aws-sdk/client-lambda"; import { HttpHandler, HttpResponse } from "@smithy/protocol-http"; import { HttpRequest as IHttpRequest } from "@smithy/types"; import { Uint8ArrayBlobAdapter } from "@smithy/util-stream"; import { fromUtf8 } from "@smithy/util-utf8"; import { Readable } from "stream"; +import { describe, expect, test as it } from "vitest"; import { requireRequestsFrom } from "../../aws-util-test/src"; describe("util-stream", () => { describe(Lambda.name, () => { it("should be uniform between string and Uint8Array payloads", async () => { - const client = new Lambda({ region: "us-west-2" }); + const client = new Lambda({ + region: "us-west-2", + credentials: { + accessKeyId: "INTEG", + secretAccessKey: "INTEG", + }, + }); requireRequestsFrom(client).toMatch({ method: "POST", hostname: "lambda.us-west-2.amazonaws.com", @@ -54,6 +59,10 @@ describe("util-stream", () => { const lambda = new Lambda({ region: "us-west-2", + credentials: { + accessKeyId: "INTEG", + secretAccessKey: "INTEG", + }, }); requireRequestsFrom(lambda).toMatch({ From f5e4b0c4cdaed8c87c3d4e20cc3cc645501b866a Mon Sep 17 00:00:00 2001 From: George Fu Date: Tue, 29 Oct 2024 00:19:41 +0000 Subject: [PATCH 08/12] test(aws-util-test): add httpAuthScheme mocking for integ tests --- .../src/middleware-token.integ.spec.ts | 2 +- .../aws-util-test/src/requests/test-http-handler.ts | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/middleware-token/src/middleware-token.integ.spec.ts b/packages/middleware-token/src/middleware-token.integ.spec.ts index 4bd743114947..0ad919475182 100644 --- a/packages/middleware-token/src/middleware-token.integ.spec.ts +++ b/packages/middleware-token/src/middleware-token.integ.spec.ts @@ -13,7 +13,7 @@ describe("middleware-token", () => { }, }); requireRequestsFrom(client).toMatch({ - headers: new Map([[/authorization/i, /Bearer my-token/]]), + headers: new Map([[/authorization/i, /Bearer MOCK_TOKEN/]]), }); await client.getUserDetails({ id: "my-id", diff --git a/private/aws-util-test/src/requests/test-http-handler.ts b/private/aws-util-test/src/requests/test-http-handler.ts index 664d6df5761e..e10b270abcc1 100644 --- a/private/aws-util-test/src/requests/test-http-handler.ts +++ b/private/aws-util-test/src/requests/test-http-handler.ts @@ -99,6 +99,18 @@ export class TestHttpHandler implements HttpHandler { return _signer; }; } + if (client.config.httpAuthSchemes) { + for (const authScheme of client.config.httpAuthSchemes) { + authScheme.identityProvider = () => { + return async () => { + return { + ...MOCK_CREDENTIALS, + token: "MOCK_TOKEN", + }; + }; + }; + } + } client.config.requestHandler = new TestHttpHandler(matcher); if (!(client as any)[TestHttpHandler.WATCHER]) { From 467913ad7d9510da8b00504bb13052881a664581 Mon Sep 17 00:00:00 2001 From: George Fu Date: Tue, 29 Oct 2024 01:47:10 +0000 Subject: [PATCH 09/12] test: override selected httpAuthScheme.identity in integration tests --- .../src/requests/test-http-handler.ts | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/private/aws-util-test/src/requests/test-http-handler.ts b/private/aws-util-test/src/requests/test-http-handler.ts index e10b270abcc1..8cfa8ec76455 100644 --- a/private/aws-util-test/src/requests/test-http-handler.ts +++ b/private/aws-util-test/src/requests/test-http-handler.ts @@ -1,5 +1,12 @@ import { HttpHandler, HttpRequest, HttpResponse } from "@smithy/protocol-http"; -import { Client, HttpHandlerOptions, RequestHandler, RequestHandlerOutput } from "@smithy/types"; +import { + Client, + HandlerExecutionContext, + HttpHandlerOptions, + RequestHandler, + RequestHandlerOutput, + SMITHY_CONTEXT_KEY, +} from "@smithy/types"; import { expect } from "vitest"; /** @@ -34,6 +41,7 @@ export type HttpRequestMatcher = { const MOCK_CREDENTIALS = { accessKeyId: "MOCK_ACCESS_KEY_ID", secretAccessKey: "MOCK_SECRET_ACCESS_KEY_ID", + token: "MOCK_TOKEN", }; /** @@ -103,14 +111,25 @@ export class TestHttpHandler implements HttpHandler { for (const authScheme of client.config.httpAuthSchemes) { authScheme.identityProvider = () => { return async () => { - return { - ...MOCK_CREDENTIALS, - token: "MOCK_TOKEN", - }; + return MOCK_CREDENTIALS; }; }; } } + client.middlewareStack.addRelativeTo( + (next: any, context: HandlerExecutionContext) => (args: any) => { + if (context[SMITHY_CONTEXT_KEY]?.selectedHttpAuthScheme) { + (context[SMITHY_CONTEXT_KEY] as any).selectedHttpAuthScheme.identity = MOCK_CREDENTIALS; + } + return next(args); + }, + { + name: "integrationTestMiddleware", + override: true, + toMiddleware: "httpSigningMiddleware", + relation: "before", + } + ); client.config.requestHandler = new TestHttpHandler(matcher); if (!(client as any)[TestHttpHandler.WATCHER]) { From e0f9e81b2bcb5d15d3f3a51c5e817de36f58c1ac Mon Sep 17 00:00:00 2001 From: George Fu Date: Tue, 29 Oct 2024 14:49:17 +0000 Subject: [PATCH 10/12] test: override signer credential provider in integration --- private/aws-util-test/package.json | 1 + .../aws-util-test/src/requests/test-http-handler.ts | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/private/aws-util-test/package.json b/private/aws-util-test/package.json index 509094bb7c7a..82b8421df0ff 100644 --- a/private/aws-util-test/package.json +++ b/private/aws-util-test/package.json @@ -19,6 +19,7 @@ "dependencies": { "@aws-sdk/aws-protocoltests-json": "*", "@smithy/protocol-http": "^4.1.4", + "@smithy/signature-v4": "^4.2.0", "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, diff --git a/private/aws-util-test/src/requests/test-http-handler.ts b/private/aws-util-test/src/requests/test-http-handler.ts index 8cfa8ec76455..487b0e24a3ad 100644 --- a/private/aws-util-test/src/requests/test-http-handler.ts +++ b/private/aws-util-test/src/requests/test-http-handler.ts @@ -1,10 +1,14 @@ import { HttpHandler, HttpRequest, HttpResponse } from "@smithy/protocol-http"; +import type { SignatureV4 } from "@smithy/signature-v4"; import { + AwsCredentialIdentity, Client, HandlerExecutionContext, HttpHandlerOptions, + IdentityProvider, RequestHandler, RequestHandlerOutput, + SelectedHttpAuthScheme, SMITHY_CONTEXT_KEY, } from "@smithy/types"; import { expect } from "vitest"; @@ -118,8 +122,13 @@ export class TestHttpHandler implements HttpHandler { } client.middlewareStack.addRelativeTo( (next: any, context: HandlerExecutionContext) => (args: any) => { - if (context[SMITHY_CONTEXT_KEY]?.selectedHttpAuthScheme) { - (context[SMITHY_CONTEXT_KEY] as any).selectedHttpAuthScheme.identity = MOCK_CREDENTIALS; + const scheme = context[SMITHY_CONTEXT_KEY]?.selectedHttpAuthScheme as SelectedHttpAuthScheme; + if (scheme) { + scheme.identity = MOCK_CREDENTIALS as AwsCredentialIdentity; + if ((scheme.signer as any).credentialProvider) { + (scheme.signer as any).credentialProvider = (async () => + MOCK_CREDENTIALS) as IdentityProvider; + } } return next(args); }, From 08bc9a84eff35b441b10870a71026eab72f9344f Mon Sep 17 00:00:00 2001 From: George Fu Date: Tue, 29 Oct 2024 16:00:44 +0000 Subject: [PATCH 11/12] test: use static credentials in integration --- ...iddleware-flexible-checksums.integ.spec.ts | 2 +- .../middleware-s3-express.integ.spec.ts | 2 +- .../src/middleware-token.integ.spec.ts | 2 +- private/aws-util-test/package.json | 1 - .../src/requests/test-http-handler.ts | 62 +------------------ 5 files changed, 6 insertions(+), 63 deletions(-) diff --git a/packages/middleware-flexible-checksums/src/middleware-flexible-checksums.integ.spec.ts b/packages/middleware-flexible-checksums/src/middleware-flexible-checksums.integ.spec.ts index 7dae9a2145fb..5d304c5a467f 100644 --- a/packages/middleware-flexible-checksums/src/middleware-flexible-checksums.integ.spec.ts +++ b/packages/middleware-flexible-checksums/src/middleware-flexible-checksums.integ.spec.ts @@ -138,7 +138,7 @@ describe("middleware-flexible-checksums", () => { requireRequestsFrom(client).toMatch({ headers: { - "user-agent": new RegExp(`(.*?) m\/${id},E$`), + "user-agent": new RegExp(`(.*?) m\/(.*?)${id}(.*?)$`), }, }); diff --git a/packages/middleware-sdk-s3/src/s3-express/middleware-s3-express.integ.spec.ts b/packages/middleware-sdk-s3/src/s3-express/middleware-s3-express.integ.spec.ts index 7b3727f83959..6273d3938f53 100644 --- a/packages/middleware-sdk-s3/src/s3-express/middleware-s3-express.integ.spec.ts +++ b/packages/middleware-sdk-s3/src/s3-express/middleware-s3-express.integ.spec.ts @@ -94,7 +94,7 @@ describe("middleware-s3-express", () => { requireRequestsFrom(client).toMatch({ headers: { - "user-agent": /(.*?) m\/J,E$/, + "user-agent": /(.*?) m\/(.*?)J(.*?)$/, }, }); diff --git a/packages/middleware-token/src/middleware-token.integ.spec.ts b/packages/middleware-token/src/middleware-token.integ.spec.ts index 0ad919475182..4bd743114947 100644 --- a/packages/middleware-token/src/middleware-token.integ.spec.ts +++ b/packages/middleware-token/src/middleware-token.integ.spec.ts @@ -13,7 +13,7 @@ describe("middleware-token", () => { }, }); requireRequestsFrom(client).toMatch({ - headers: new Map([[/authorization/i, /Bearer MOCK_TOKEN/]]), + headers: new Map([[/authorization/i, /Bearer my-token/]]), }); await client.getUserDetails({ id: "my-id", diff --git a/private/aws-util-test/package.json b/private/aws-util-test/package.json index 82b8421df0ff..509094bb7c7a 100644 --- a/private/aws-util-test/package.json +++ b/private/aws-util-test/package.json @@ -19,7 +19,6 @@ "dependencies": { "@aws-sdk/aws-protocoltests-json": "*", "@smithy/protocol-http": "^4.1.4", - "@smithy/signature-v4": "^4.2.0", "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, diff --git a/private/aws-util-test/src/requests/test-http-handler.ts b/private/aws-util-test/src/requests/test-http-handler.ts index 487b0e24a3ad..687aaeefc25b 100644 --- a/private/aws-util-test/src/requests/test-http-handler.ts +++ b/private/aws-util-test/src/requests/test-http-handler.ts @@ -1,16 +1,5 @@ import { HttpHandler, HttpRequest, HttpResponse } from "@smithy/protocol-http"; -import type { SignatureV4 } from "@smithy/signature-v4"; -import { - AwsCredentialIdentity, - Client, - HandlerExecutionContext, - HttpHandlerOptions, - IdentityProvider, - RequestHandler, - RequestHandlerOutput, - SelectedHttpAuthScheme, - SMITHY_CONTEXT_KEY, -} from "@smithy/types"; +import { Client, HttpHandlerOptions, RequestHandler, RequestHandlerOutput } from "@smithy/types"; import { expect } from "vitest"; /** @@ -80,6 +69,8 @@ export class TestHttpHandler implements HttpHandler { for (const key in RESERVED_ENVIRONMENT_VARIABLES) { delete process.env[key]; } + process.env.AWS_ACCESS_KEY_ID = "INTEGRATION_TEST_MOCK"; + process.env.AWS_SECRET_ACCESS_KEY = "INTEGRATION_TEST_MOCK"; } /** @@ -92,53 +83,6 @@ export class TestHttpHandler implements HttpHandler { this.client = client; this.originalRequestHandler = client.config.requestHandler; // mock credentials to avoid default chain lookup. - client.config.credentials = async () => MOCK_CREDENTIALS; - client.config.credentialDefaultProvider = () => { - return async () => { - return MOCK_CREDENTIALS; - }; - }; - const signerProvider = client.config.signer; - if (typeof signerProvider === "function") { - client.config.signer = async () => { - const _signer = await signerProvider(); - if (typeof _signer.credentialProvider === "function") { - // signer is instance of SignatureV4 - _signer.credentialProvider = async () => { - return MOCK_CREDENTIALS; - }; - } - return _signer; - }; - } - if (client.config.httpAuthSchemes) { - for (const authScheme of client.config.httpAuthSchemes) { - authScheme.identityProvider = () => { - return async () => { - return MOCK_CREDENTIALS; - }; - }; - } - } - client.middlewareStack.addRelativeTo( - (next: any, context: HandlerExecutionContext) => (args: any) => { - const scheme = context[SMITHY_CONTEXT_KEY]?.selectedHttpAuthScheme as SelectedHttpAuthScheme; - if (scheme) { - scheme.identity = MOCK_CREDENTIALS as AwsCredentialIdentity; - if ((scheme.signer as any).credentialProvider) { - (scheme.signer as any).credentialProvider = (async () => - MOCK_CREDENTIALS) as IdentityProvider; - } - } - return next(args); - }, - { - name: "integrationTestMiddleware", - override: true, - toMiddleware: "httpSigningMiddleware", - relation: "before", - } - ); client.config.requestHandler = new TestHttpHandler(matcher); if (!(client as any)[TestHttpHandler.WATCHER]) { From 4f0daf8a730bd3c2c9e0a5dabe0c86c14b9847fb Mon Sep 17 00:00:00 2001 From: George Fu Date: Tue, 29 Oct 2024 16:18:47 +0000 Subject: [PATCH 12/12] test: remove unused --- .../aws-util-test/src/requests/test-http-handler.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/private/aws-util-test/src/requests/test-http-handler.ts b/private/aws-util-test/src/requests/test-http-handler.ts index 687aaeefc25b..f4bbe7126e2f 100644 --- a/private/aws-util-test/src/requests/test-http-handler.ts +++ b/private/aws-util-test/src/requests/test-http-handler.ts @@ -28,15 +28,6 @@ export type HttpRequestMatcher = { log?: boolean; }; -/** - * @internal - */ -const MOCK_CREDENTIALS = { - accessKeyId: "MOCK_ACCESS_KEY_ID", - secretAccessKey: "MOCK_SECRET_ACCESS_KEY_ID", - token: "MOCK_TOKEN", -}; - /** * Supplied to test clients to assert correct requests. * @internal @@ -82,7 +73,6 @@ export class TestHttpHandler implements HttpHandler { public watch(client: Client, matcher: HttpRequestMatcher = this.matcher) { this.client = client; this.originalRequestHandler = client.config.requestHandler; - // mock credentials to avoid default chain lookup. client.config.requestHandler = new TestHttpHandler(matcher); if (!(client as any)[TestHttpHandler.WATCHER]) {