Skip to content

feat: add BYO filesystem e2e test and supporting infrastructure#1461

Open
padmak30 wants to merge 2 commits into
mainfrom
feat/filesystem-e2e-test
Open

feat: add BYO filesystem e2e test and supporting infrastructure#1461
padmak30 wants to merge 2 commits into
mainfrom
feat/filesystem-e2e-test

Conversation

@padmak30
Copy link
Copy Markdown
Contributor

@padmak30 padmak30 commented Jun 4, 2026

  • Add strands-bedrock-byo-filesystem.test.ts: e2e test for EFS and S3 Files mounts with unique file content assertion
  • Add e2e-tests/fixtures/filesystem/setup_byo_filesystem.py: one-time setup script to provision VPC, EFS, S3 Files access points in AWS
  • Extend E2EConfig with apiKeyEnvVar, requiredEnvVars, efsAccessPoints, s3AccessPoints, networkConfig, invokePrompt, invokeResponseCheck
  • Fix VPC warning in invoke action to suppress when --json is passed
  • Add filesystem env vars to e2e-tests.yml env blocks
  • Add filesystem resources fixture file

- Add strands-bedrock-byo-filesystem.test.ts: e2e test for EFS and S3
  Files mounts with unique file content assertion
- Add e2e-tests/fixtures/filesystem/setup_byo_filesystem.py: one-time
  setup script to provision VPC, EFS, S3 Files access points in AWS
- Extend E2EConfig with apiKeyEnvVar, requiredEnvVars, efsAccessPoints,
  s3AccessPoints, networkConfig, invokePrompt, invokeResponseCheck
- Fix VPC warning in invoke action to suppress when --json is passed
- Add filesystem env vars to e2e-tests.yml env blocks
- Add filesystem resources fixture file
@padmak30 padmak30 requested a review from a team June 4, 2026 01:15
@github-actions github-actions Bot added the size/l PR size: L label Jun 4, 2026
@github-actions github-actions Bot added the agentcore-harness-reviewing AgentCore Harness review in progress label Jun 4, 2026
@agentcore-devx-automation agentcore-devx-automation Bot added the claude-security-reviewing Claude Code /security-review in progress label Jun 4, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

Package Tarball

aws-agentcore-0.17.0.tgz

How to install

gh release download pr-1461-tarball --repo aws/agentcore-cli --pattern "*.tgz" --dir /tmp/pr-tarball
npm install -g /tmp/pr-tarball/aws-agentcore-0.17.0.tgz

@agentcore-devx-automation
Copy link
Copy Markdown
Contributor

Claude Security Review: no high-confidence findings. (run)

@agentcore-devx-automation agentcore-devx-automation Bot removed the claude-security-reviewing Claude Code /security-review in progress label Jun 4, 2026
Copy link
Copy Markdown

@agentcore-cli-automation agentcore-cli-automation left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work setting up filesystem e2e coverage end-to-end. A few issues to address before merging:

  1. The S3 Files IAM trust policy looks wrong — it allows elasticfilesystem.amazonaws.com to assume the role, which is the EFS service principal, not S3 Files. This will likely make the S3 Files mount unable to read the bucket.
  2. The new invokeResponseCheck is silently skipped when json.response is falsy, which weakens the assertion. The whole point of this check is to fail when the response is wrong (or missing).
  3. The test prompt only exercises the EFS mount; the S3 Files mount is configured but never read or written from at runtime, so a misconfigured S3 mount would still pass.

Inline comments below.

"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {"Service": "elasticfilesystem.amazonaws.com"},
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wrong service principal. This is the trust policy for the S3 Files role (the role passed as roleArn to s3files:CreateFileSystem), but the principal here is elasticfilesystem.amazonaws.com — that's the EFS service. With this trust policy, S3 Files won't be able to assume the role and the mount will fail to access the bucket at runtime.

This should be the S3 Files service principal (most likely s3files.amazonaws.com — please verify against the S3 Files docs / what the CDK construct expects).

Also, since this is for S3 Files, consider scoping the aws:SourceAccount condition to the S3 Files file system ARN via aws:SourceArn once known, but at minimum the principal needs to change.

Comment thread e2e-tests/e2e-helper.ts Outdated
const json = parseJsonOutput(result.stdout) as { success: boolean };
const json = parseJsonOutput(result.stdout) as { success: boolean; response?: string };
expect(json.success, 'Invoke should report success').toBe(true);
if (cfg.invokeResponseCheck && json.response) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This silently skips the configured assertion when json.response is empty/undefined, which defeats the purpose of invokeResponseCheck — a response that's missing the expected token (or missing entirely) would still let the test pass.

A couple of options:

  1. Drop the && json.response guard and let the check run unconditionally — the assertion inside (expect(...).toContain(...)) will fail loudly on undefined/empty, which is what we want.
  2. Add an explicit expect(json.response, 'Invoke should return a response').toBeTruthy() before invoking the check.

Either way, an e2e test that's specifically asserting on response content shouldn't quietly become a no-op.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

},
efsAccessPoints: [{ accessPointArn: process.env.E2E_EFS_ACCESS_POINT_ARN!, mountPath: '/mnt/efs' }],
s3AccessPoints: [{ accessPointArn: process.env.E2E_S3_ACCESS_POINT_ARN!, mountPath: '/mnt/s3' }],
invokePrompt: `Write the text "${uniqueFileContent}" to /mnt/efs/test.txt using file_write, then read it back using file_read and return the contents.`,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The prompt only writes to and reads back from /mnt/efs/test.txt, so the S3 Files mount (/mnt/s3) is provisioned and configured on the runtime but is never actually exercised at runtime. A broken S3 Files mount target / access point / IAM policy would still let this test pass.

Consider either:

  1. Extending the prompt to also write+read a unique token under /mnt/s3/ (e.g. a second UUID, asserted on as well), so both mounts are exercised end-to-end.
  2. Splitting into two tests (one EFS, one S3) so failures localize cleanly.

Given the cost of standing up the VPC/EFS/S3 infra in CI, exercising both in a single invocation seems like the better tradeoff.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated to also test s3 mounts

@github-actions github-actions Bot removed the agentcore-harness-reviewing AgentCore Harness review in progress label Jun 4, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

Coverage Report

Status Category Percentage Covered / Total
🔵 Lines 35.54% 11183 / 31461
🔵 Statements 34.88% 11890 / 34084
🔵 Functions 30.28% 1880 / 6207
🔵 Branches 29.31% 7134 / 24334
Generated in workflow #3488 for commit 946d9f6 by the Vitest Coverage Report Action

- Fix invokeResponseCheck to assert response is truthy before running
  the check — previously silently skipped on empty/undefined response
- Extend filesystem test prompt to write and read unique tokens on both
  EFS (/mnt/efs) and S3 Files (/mnt/s3) mounts, asserting both appear
  in the response so a misconfigured S3 mount is caught
@github-actions github-actions Bot added size/l PR size: L and removed size/l PR size: L labels Jun 4, 2026
@agentcore-devx-automation agentcore-devx-automation Bot added the claude-security-reviewing Claude Code /security-review in progress label Jun 4, 2026
@agentcore-devx-automation
Copy link
Copy Markdown
Contributor

Claude Security Review: no high-confidence findings. (run)

@agentcore-devx-automation agentcore-devx-automation Bot removed the claude-security-reviewing Claude Code /security-review in progress label Jun 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/l PR size: L

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants