diff --git a/clients/client-s3/test/e2e/S3.browser.e2e.spec.ts b/clients/client-s3/test/e2e/S3.browser.e2e.spec.ts
index 83be642ca4b5..156d26239b54 100644
--- a/clients/client-s3/test/e2e/S3.browser.e2e.spec.ts
+++ b/clients/client-s3/test/e2e/S3.browser.e2e.spec.ts
@@ -1,4 +1,4 @@
-import type { S3, SelectObjectContentEventStream, waitUntilObjectExists } from "@aws-sdk/client-s3";
+import type { S3, waitUntilObjectExists } from "@aws-sdk/client-s3";
import { fromNodeProviderChain } from "@aws-sdk/credential-providers";
import { FetchHttpHandler } from "@smithy/fetch-http-handler";
import { Browser } from "happy-dom";
@@ -315,50 +315,6 @@ describe("@aws-sdk/client-s3", () => {
});
});
- describe("selectObjectContent", () => {
- const csvFile = `user_name,age
-jsrocks,13
-node4life,22
-esfuture,29`;
-
- beforeEach(async () => {
- Key = `${Date.now()}`;
- await client.putObject({ Bucket, Key, Body: csvFile });
- });
-
- afterEach(async () => {
- await client.deleteObject({ Bucket, Key });
- });
-
- it("should succeed", async () => {
- onTestFailed(setTestFailed);
- const { Payload } = await client.selectObjectContent({
- Bucket,
- Key,
- ExpressionType: "SQL",
- Expression: "SELECT user_name FROM S3Object WHERE cast(age as int) > 20",
- InputSerialization: {
- CSV: {
- FileHeaderInfo: "USE",
- RecordDelimiter: "\n",
- FieldDelimiter: ",",
- },
- },
- OutputSerialization: {
- CSV: {},
- },
- });
- const events: SelectObjectContentEventStream[] = [];
- for await (const event of Payload!) {
- events.push(event);
- }
- expect(events.length).toEqual(3);
- expect(new TextDecoder().decode(events[0].Records?.Payload)).toEqual("node4life\nesfuture\n");
- expect(events[1].Stats?.Details).toBeDefined();
- expect(events[2].End).toBeDefined();
- });
- });
-
describe("Multi-region access point", () => {
beforeEach(async () => {
Key = `${Date.now()}`;
diff --git a/clients/client-s3/test/e2e/S3.e2e.spec.ts b/clients/client-s3/test/e2e/S3.e2e.spec.ts
index ee10ca80b9a7..b212bf9a4c6f 100644
--- a/clients/client-s3/test/e2e/S3.e2e.spec.ts
+++ b/clients/client-s3/test/e2e/S3.e2e.spec.ts
@@ -1,6 +1,6 @@
import "@aws-sdk/signature-v4-crt";
-import { ChecksumAlgorithm, S3, SelectObjectContentEventStream } from "@aws-sdk/client-s3";
+import { ChecksumAlgorithm, S3 } from "@aws-sdk/client-s3";
import { afterAll, afterEach, beforeAll, describe, expect, test as it } from "vitest";
import { getIntegTestResources } from "../../../../tests/e2e/get-integ-test-resources";
@@ -231,46 +231,6 @@ describe("@aws-sdk/client-s3", () => {
});
});
- describe("selectObjectContent", () => {
- const csvFile = `user_name,age
-jsrocks,13
-node4life,22
-esfuture,29`;
- beforeAll(async () => {
- Key = `${Date.now()}`;
- await client.putObject({ Bucket, Key, Body: csvFile });
- });
- afterAll(async () => {
- await client.deleteObject({ Bucket, Key });
- });
- it("should succeed", async () => {
- const { Payload } = await client.selectObjectContent({
- Bucket,
- Key,
- ExpressionType: "SQL",
- Expression: "SELECT user_name FROM S3Object WHERE cast(age as int) > 20",
- InputSerialization: {
- CSV: {
- FileHeaderInfo: "USE",
- RecordDelimiter: "\n",
- FieldDelimiter: ",",
- },
- },
- OutputSerialization: {
- CSV: {},
- },
- });
- const events: SelectObjectContentEventStream[] = [];
- for await (const event of Payload!) {
- events.push(event);
- }
- expect(events.length).toEqual(3);
- expect(new TextDecoder().decode(events[0].Records?.Payload)).toEqual("node4life\nesfuture\n");
- expect(events[1].Stats?.Details).toBeDefined();
- expect(events[2].End).toBeDefined();
- });
- });
-
describe("Multi-region access point", () => {
beforeAll(async () => {
Key = `${Date.now()}`;
diff --git a/clients/client-s3/test/integ/s3-selectObjectContent.integ.spec.ts b/clients/client-s3/test/integ/s3-selectObjectContent.integ.spec.ts
new file mode 100644
index 000000000000..cf93507ce369
--- /dev/null
+++ b/clients/client-s3/test/integ/s3-selectObjectContent.integ.spec.ts
@@ -0,0 +1,73 @@
+import { S3 } from "@aws-sdk/client-s3";
+import { HttpResponse } from "@smithy/protocol-http";
+import { Readable } from "stream";
+import { describe, expect, test as it } from "vitest";
+
+import { requireRequestsFrom } from "../../../../private/aws-util-test/src";
+
+describe("selectObjectContent", () => {
+ const credentials = {
+ accessKeyId: "INTEG",
+ secretAccessKey: "INTEG",
+ };
+
+ it("should make correct request", async () => {
+ const client = new S3({ region: "us-west-2", credentials });
+
+ requireRequestsFrom(client)
+ .toMatch({
+ hostname: /aws-sdk-js-integ-test-bucket\.s3\.us-west-2\.amazonaws\.com/,
+ method: "POST",
+ path: "/test-key",
+ headers: {
+ authorization: /AWS4-HMAC-SHA256 Credential/,
+ "content-type": "application/xml",
+ "x-amz-content-sha256": /./,
+ },
+ body(xmlBody) {
+ expect(xmlBody).toContain(
+ "SELECT user_name FROM S3Object WHERE cast(age as int) > 20"
+ );
+ expect(xmlBody).toContain("SQL");
+ },
+ })
+ .respondWith(
+ new HttpResponse({
+ statusCode: 200,
+ body: Readable.from([
+ ``,
+ ``,
+ `blob`,
+ `10050100 `,
+ ``,
+ ``,
+ ``,
+ ``,
+ ]),
+ })
+ );
+
+ const response = await client.selectObjectContent({
+ Bucket: "aws-sdk-js-integ-test-bucket",
+ Key: "test-key",
+ ExpressionType: "SQL",
+ Expression: "SELECT user_name FROM S3Object WHERE cast(age as int) > 20",
+ InputSerialization: {
+ CSV: {
+ FileHeaderInfo: "USE",
+ RecordDelimiter: "\n",
+ FieldDelimiter: ",",
+ },
+ },
+ OutputSerialization: {
+ CSV: {},
+ },
+ });
+
+ expect.hasAssertions();
+ expect(response).toHaveProperty("$metadata");
+ expect(response.$metadata.httpStatusCode).toBe(200);
+ expect(response).toHaveProperty("Payload");
+ expect(response.Payload).toBeDefined();
+ });
+});