Skip to content

Commit da9b4a8

Browse files
authored
Merge pull request #263 from aws-solutions/release/v4.0.1
Changes for release/v4.0.1
2 parents ab63644 + 715a8c3 commit da9b4a8

File tree

32 files changed

+110
-56
lines changed

32 files changed

+110
-56
lines changed

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,20 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [4.0.1] - 2025-11-21
9+
10+
### Security
11+
12+
- Pin Amazon Linux base image to SHA256 hash in order to improve integrity, prevent tampering, and improve the reproducibility of builds across environments.
13+
14+
### Fixed
15+
16+
- Fix regression where load tests with zipped test scripts will fail to unzip when zipped without a parent directory.
17+
818
## [4.0.0] - 2025-11-19
919

1020
### Added
21+
1122
- **MCP Server Integration** - Added the ability for AI agents to programmatically create, run, and analyze load tests through Amazon Bedrock AgentCore
1223
- **Live Data Visualization** - Added the ability to visualize live test data by region with auto-refresh functionality
1324
- **Test Results Comparison** - Added the ability to highlight differences between
@@ -16,13 +27,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1627
- **Downloadable Test Results** - Added the ability to download test results from the front-end
1728

1829
### Changed
30+
1931
- **User Interface** - A complete frontend rewrite built on React, the Cloudscape design system, and Redux state management
2032

2133
### Fixed
34+
2235
- **Cron Scheduling Issues** - Fixed cron expression parsing and validation
2336
- **Infinite Fetching** - Fixed infinite fetching of test results
2437

2538
### Security
39+
2640
- **CloudFront Security Headers** - Added security headers policy with CSP, HSTS, Permissions-Policy, and CORP
2741
- **Resolved Vulnerabilities** - Resolved security vulnerabilities in multiple npm and Python dependencies
2842

VERSION.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4.0.0
1+
4.0.1

deployment/ecr/distributed-load-testing-on-aws-load-tester/Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM public.ecr.aws/amazonlinux/amazonlinux:2023-minimal
1+
FROM public.ecr.aws/amazonlinux/amazonlinux:2023-minimal@sha256:c69a151043b0e0e7d0362ab283299267580f5a5a4cf08131eb61b9528eaec882
22

33
RUN dnf upgrade -y --refresh && \
44
dnf install -y python3.11 python3.11-pip java-21-amazon-corretto bc procps jq findutils unzip && \
@@ -9,7 +9,7 @@ ENV PIP_INSTALL="pip3.11 install --no-cache-dir"
99

1010
# install bzt
1111
RUN $PIP_INSTALL --upgrade pip && \
12-
$PIP_INSTALL --upgrade bzt awscli setuptools==78.1.1 h11 urllib3==2.2.2 && \
12+
$PIP_INSTALL --upgrade bzt awscli setuptools==78.1.1 h11 && \
1313
$PIP_INSTALL --upgrade bzt
1414
COPY ./.bzt-rc /root/.bzt-rc
1515
RUN chmod 755 /root/.bzt-rc

deployment/ecr/distributed-load-testing-on-aws-load-tester/load-test.sh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,11 @@ if [ "$TEST_TYPE" != "simple" ]; then
7979
# Find the parent folder and copy its contents
8080
PARENT_FOLDER=$(find $TEMP_DIR -mindepth 1 -maxdepth 1 -type d | head -n 1)
8181
if [ -n "$PARENT_FOLDER" ]; then
82-
echo "Copying contents from $PARENT_FOLDER"
82+
echo "Copying contents from parent folder: $PARENT_FOLDER"
8383
cp -r $PARENT_FOLDER/* ./
84+
else
85+
echo "No parent folder found, copying all contents from temp directory"
86+
cp -r $TEMP_DIR/* ./
8487
fi
8588

8689
# Cleanup temp directory

solution-manifest.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
id: SO0062
22
name: distributed-load-testing-on-aws
3-
version: v4.0.0
3+
version: v4.0.1
44
cloudformation_templates:
55
- template: distributed-load-testing-on-aws.template
66
main_template: true
@@ -9,4 +9,4 @@ cloudformation_templates:
99
build_environment:
1010
build_image: 'aws/codebuild/standard:7.0'
1111
container_images:
12-
- distributed-load-testing-on-aws-load-tester
12+
- distributed-load-testing-on-aws-load-tester

source/api-services/lib/scenarios/index.spec.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1432,7 +1432,7 @@ describe("#SCENARIOS API:: ", () => {
14321432
{
14331433
CreationTime: new Date("2025-09-09T19:40:22Z"),
14341434
StackId: "arn:aws:cloudformation:us-west-2:123456789012:stack/test-stack/12345",
1435-
Tags: [{ Key: "SolutionVersion", Value: "v4.0.0" }],
1435+
Tags: [{ Key: "SolutionVersion", Value: "v4.0.1" }],
14361436
},
14371437
],
14381438
};
@@ -1442,7 +1442,7 @@ describe("#SCENARIOS API:: ", () => {
14421442
expect(response).toEqual({
14431443
created_time: "2025-09-09T19:40:22.000Z",
14441444
region: "us-west-2",
1445-
version: "v4.0.0",
1445+
version: "v4.0.1",
14461446
});
14471447
});
14481448

@@ -1468,7 +1468,7 @@ describe("#SCENARIOS API:: ", () => {
14681468
{
14691469
CreationTime: new Date("2025-09-09T19:40:22Z"),
14701470
StackId: "arn:aws:cloudformation:us-east-1:123456789012:stack/test-stack/12345",
1471-
Description: "Distributed Load Testing Solution v4.0.0 - Creates infrastructure for load testing",
1471+
Description: "Distributed Load Testing Solution v4.0.1 - Creates infrastructure for load testing",
14721472
Tags: [{ Key: "OtherTag", Value: "value" }],
14731473
},
14741474
],
@@ -1479,7 +1479,7 @@ describe("#SCENARIOS API:: ", () => {
14791479
expect(response).toEqual({
14801480
created_time: "2025-09-09T19:40:22.000Z",
14811481
region: "us-east-1",
1482-
version: "v4.0.0",
1482+
version: "v4.0.1",
14831483
});
14841484
});
14851485

source/api-services/lib/validation/schemas.spec.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -385,11 +385,17 @@ describe("Validation Schemas", () => {
385385

386386
it("should validate cron expressions", () => {
387387
const validCronExpressions = [
388-
"0 * * * *", // every hour
389-
"0 9 * * 1", // 9 AM every Monday
388+
"0 0 * * *", // Midnight daily
390389
"30 14 * * 5", // 2:30 PM every Friday
391-
"0 0 1 * *", // midnight on 1st of every month
392-
"15 6 * * 0", // 6:15 AM every Sunday
390+
"0 9 * * 1", // 9 AM every Monday
391+
"0 */4 * * *", // Every 4 hours at minute 0
392+
"0 */6 * * 1-5", // Every 6 hours on weekdays
393+
"30 9 * * 1-5", // 9:30 AM weekdays
394+
"0 0 * * 0-6", // Midnight every day (range)
395+
"0 9,12,15 * * *", // 9 AM, 12 PM, 3 PM daily
396+
"30 8,17 * * 1-5", // 8:30 AM and 5:30 PM weekdays
397+
"0 5,22 * * 1,2,3", // 5 AM and 10 PM on Mon/Tue/Wed
398+
"15 6,18 * * 1,3,5", // 6:15 AM and 6:15 PM on Mon/Wed/Fri
393399
];
394400

395401
validCronExpressions.forEach((cronValue) => {

source/api-services/lib/validation/schemas.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,14 @@ const isoDateString = z
2727

2828
/**
2929
* Validates cron expression (Linux format: min hour day month dayOfWeek)
30+
* Supports hour step values and comma lists, day-of-week ranges and lists
3031
*/
32+
const CRON_EXPRESSION_REGEX =
33+
/^([0-5]?\d) (\*|\*\/\d+|([01]?\d|2[0-3])(,([01]?\d|2[0-3]))*) (\*|[0-2]?\d|3[01]) (\*|[1-9]|1[0-2]) (\*|[0-6]([-,][0-6])*)$/; // NOSONAR
34+
3135
const cronExpressionSchema = z.string().regex(
32-
/^(\*|([0-5]?\d)) (\*|([01]?\d|2[0-3])) (\*|([0-2]?\d|3[01])) (\*|([1-9]|1[0-2])) (\*|[0-7])$/, // NOSONAR
33-
"Invalid cron expression format. Expected 5 field cron expression (example: * * * * *)."
36+
CRON_EXPRESSION_REGEX, // NOSONAR
37+
"Invalid cron expression format. Hours support step values and lists. Day-of-week supports ranges and lists."
3438
);
3539

3640
/**

source/api-services/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

source/api-services/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "api-services",
3-
"version": "4.0.0",
3+
"version": "4.0.1",
44
"description": "REST API micro services",
55
"repository": {
66
"type": "git",

0 commit comments

Comments
 (0)