From c3bf9f12c7866438c57013a92cc973d3a10d2b78 Mon Sep 17 00:00:00 2001 From: Kess Plasmeier Date: Mon, 10 Nov 2025 18:12:12 -0800 Subject: [PATCH 01/10] attempt to speed up ci --- .github/workflows/test.yml | 50 ++++++++++++++++++++++--- test-server/Makefile | 28 ++++++++++---- test-server/java-tests/build.gradle.kts | 24 +++++++++--- 3 files changed, 85 insertions(+), 17 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c29cfb5a..8a8a65a1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -107,19 +107,19 @@ jobs: with: go-version: 1.25 - # Cache uv dependencies + # Enhanced caching for multiple language dependencies - name: Cache uv dependencies - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.cache/uv - key: ${{ runner.os }}-uv-${{ hashFiles('./test-server/python-v3-server/**/pyproject.toml') }} + key: ${{ runner.os }}-uv-${{ hashFiles('./test-server/python-v3-server/**/pyproject.toml', './pyproject.toml') }} restore-keys: | ${{ runner.os }}-uv- - name: Install Uv run: pip install uv - # Cache Gradle dependencies and build outputs + # Enhanced Gradle caching with build cache - name: Cache Gradle packages uses: actions/cache@v4 with: @@ -128,10 +128,50 @@ jobs: ~/.gradle/wrapper test-server/java-v3-server/.gradle test-server/java-tests/.gradle - key: ${{ runner.os }}-gradle-${{ hashFiles('test-server/java-v3-server/**/*.gradle*', 'test-server/java-tests/**/gradle-wrapper.properties', 'test-server/java-tests/**/*.gradle*', 'test-server/java-v3-server/**/gradle-wrapper.properties') }} + test-server/java-v3-transition-server/.gradle + test-server/java-v4-server/.gradle + key: ${{ runner.os }}-gradle-${{ hashFiles('test-server/**/gradle-wrapper.properties', 'test-server/**/*.gradle*') }} restore-keys: | ${{ runner.os }}-gradle- + # Cache Go modules + - name: Cache Go modules + uses: actions/cache@v4 + with: + path: | + ~/go/pkg/mod + ~/.cache/go-build + key: ${{ runner.os }}-go-${{ hashFiles('test-server/**/go.sum') }} + restore-keys: | + ${{ runner.os }}-go- + + # Cache .NET packages + - name: Cache .NET packages + uses: actions/cache@v4 + with: + path: ~/.nuget/packages + key: ${{ runner.os }}-nuget-${{ hashFiles('test-server/**/*.csproj', 'test-server/**/*.fsproj') }} + restore-keys: | + ${{ runner.os }}-nuget- + + # Cache Ruby gems + - name: Cache Ruby gems + uses: actions/cache@v4 + with: + path: ~/.gem + key: ${{ runner.os }}-gems-${{ hashFiles('test-server/**/Gemfile.lock') }} + restore-keys: | + ${{ runner.os }}-gems- + + # Cache PHP Composer dependencies + - name: Cache PHP Composer dependencies + uses: actions/cache@v4 + with: + path: ~/.composer/cache + key: ${{ runner.os }}-composer-${{ hashFiles('test-server/**/composer.lock') }} + restore-keys: | + ${{ runner.os }}-composer- + - name: Install dependencies run: make install diff --git a/test-server/Makefile b/test-server/Makefile index dc3bdad3..55619e7a 100644 --- a/test-server/Makefile +++ b/test-server/Makefile @@ -13,16 +13,30 @@ SERVER_DIRS := $(shell find . -maxdepth 1 -type d -name '*-server' | sed 's|^\./ START_SERVER_TARGETS := $(addprefix start-, $(SERVER_DIRS)) WAIT_SERVER_TARGETS := $(addprefix wait-, $(SERVER_DIRS)) -# Start all servers in parallel +# Start all servers in parallel for maximum speed start-servers: - @echo "Starting all servers..." - $(MAKE) start-all-servers - @echo "Waiting for servers to start..." + @echo "Starting all servers in parallel..." + @echo "Server directories: $(SERVER_DIRS)" + @# Start all servers in parallel @for dir in $(SERVER_DIRS); do \ - echo "Waiting for server in $$dir..."; \ - $(MAKE) -C $$dir wait-for-server; \ + if [ -f $$dir/Makefile ]; then \ + echo "Starting server in $$dir..."; \ + $(MAKE) -C $$dir start-server & \ + else \ + echo "❌ Error: no Makefile found in $$dir"; \ + fi; \ + done + @echo "All servers starting in parallel, waiting for them to be ready..." + @# Wait for all servers to be ready + @for dir in $(SERVER_DIRS); do \ + if [ -f $$dir/Makefile ]; then \ + echo "Waiting for server in $$dir..."; \ + $(MAKE) -C $$dir wait-for-server; \ + fi; \ done + @echo "All servers are ready!" +# Keep the original sequential method as backup start-all-servers: $(START_SERVER_TARGETS) $(START_SERVER_TARGETS): start-%: @@ -63,7 +77,7 @@ run-tests: stop-servers: @echo "Stopping servers..." @for dir in $(SERVER_DIRS); do \ - echo "Starting server in $$dir..."; \ + echo "Stopping server in $$dir..."; \ $(MAKE) -C $$dir stop-server; \ done @echo "Servers stopped" diff --git a/test-server/java-tests/build.gradle.kts b/test-server/java-tests/build.gradle.kts index 106f82ef..9f5d97e3 100644 --- a/test-server/java-tests/build.gradle.kts +++ b/test-server/java-tests/build.gradle.kts @@ -49,17 +49,31 @@ tasks { classpath = sourceSets["it"].runtimeClasspath outputs.upToDateWhen { false } outputs.cacheIf { false } + + // Optimize test execution for performance + maxParallelForks = Runtime.getRuntime().availableProcessors() + forkEvery = 100 + + // JVM optimizations for faster test execution + jvmArgs = listOf( + "-XX:+UseG1GC", + "-XX:MaxGCPauseMillis=100", + "-Xmx2g", + "-XX:+TieredCompilation", + "-XX:TieredStopAtLevel=1" + ) + // Passing information from Gradle into the tests so that we can filter our servers systemProperty("test.filter.servers", System.getProperty("test.filter.servers")) - // For debugging - // // Enable System.out output + + // Disable AWS SDK v1 deprecation warnings for cleaner output + systemProperty("aws.java.v1.disableDeprecationAnnouncement", "true") + + // For debugging (uncomment if needed) // testLogging { // events("passed", "skipped", "failed", "standardOut", "standardError") // showStandardStreams = true // } - - // // Disable AWS SDK v1 deprecation warnings - // systemProperty("aws.java.v1.disableDeprecationAnnouncement", "true") } } From f407aae41e131313fdcf6116bbd6e7f5c19395c8 Mon Sep 17 00:00:00 2001 From: Kess Plasmeier Date: Mon, 10 Nov 2025 18:49:30 -0800 Subject: [PATCH 02/10] brew once --- test-server/Makefile | 14 ++++++++++++-- test-server/cpp-v2-server/Makefile | 1 - test-server/cpp-v2-transition-server/Makefile | 1 - test-server/cpp-v3-server/Makefile | 1 - 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/test-server/Makefile b/test-server/Makefile index 55619e7a..69037e2f 100644 --- a/test-server/Makefile +++ b/test-server/Makefile @@ -13,8 +13,18 @@ SERVER_DIRS := $(shell find . -maxdepth 1 -type d -name '*-server' | sed 's|^\./ START_SERVER_TARGETS := $(addprefix start-, $(SERVER_DIRS)) WAIT_SERVER_TARGETS := $(addprefix wait-, $(SERVER_DIRS)) +# Install shared dependencies to avoid conflicts during parallel startup +install-shared-deps: + @echo "Installing shared dependencies..." + @# Install brew packages needed by C++ servers to avoid parallel conflicts + @if command -v brew >/dev/null 2>&1; then \ + echo "Installing C++ dependencies via brew..."; \ + brew install libmicrohttpd nlohmann-json ossp-uuid || true; \ + fi + @echo "Shared dependencies installed" + # Start all servers in parallel for maximum speed -start-servers: +start-servers: install-shared-deps @echo "Starting all servers in parallel..." @echo "Server directories: $(SERVER_DIRS)" @# Start all servers in parallel @@ -23,7 +33,7 @@ start-servers: echo "Starting server in $$dir..."; \ $(MAKE) -C $$dir start-server & \ else \ - echo "❌ Error: no Makefile found in $$dir"; \ + echo "Error: no Makefile found in $$dir"; \ fi; \ done @echo "All servers starting in parallel, waiting for them to be ready..." diff --git a/test-server/cpp-v2-server/Makefile b/test-server/cpp-v2-server/Makefile index 9e0f04b1..f392d408 100644 --- a/test-server/cpp-v2-server/Makefile +++ b/test-server/cpp-v2-server/Makefile @@ -6,7 +6,6 @@ PID_FILE := server.pid PORT := 8085 build/s3ec-server: - brew install libmicrohttpd nlohmann-json ossp-uuid git clone --recurse-submodules https://github.com/aws/aws-sdk-cpp.git cd aws-sdk-cpp mkdir -p build && cd build && cmake .. diff --git a/test-server/cpp-v2-transition-server/Makefile b/test-server/cpp-v2-transition-server/Makefile index 05803c78..cd725209 100644 --- a/test-server/cpp-v2-transition-server/Makefile +++ b/test-server/cpp-v2-transition-server/Makefile @@ -6,7 +6,6 @@ PID_FILE := server.pid PORT := 8097 build/s3ec-server: - brew install libmicrohttpd nlohmann-json ossp-uuid mkdir -p build && cd build && cmake .. start-server: | build/s3ec-server diff --git a/test-server/cpp-v3-server/Makefile b/test-server/cpp-v3-server/Makefile index 86fc285e..6be22b87 100644 --- a/test-server/cpp-v3-server/Makefile +++ b/test-server/cpp-v3-server/Makefile @@ -6,7 +6,6 @@ PID_FILE := server.pid PORT := 8091 build/s3ec-server: - brew install libmicrohttpd nlohmann-json ossp-uuid mkdir -p build && cd build && cmake .. start-server: | build/s3ec-server From a4accbbd30039fc6a8de4232960fa6f11700f0d6 Mon Sep 17 00:00:00 2001 From: Kess Plasmeier Date: Mon, 10 Nov 2025 19:32:04 -0800 Subject: [PATCH 03/10] scope down caching, move wait to Java --- .github/workflows/test.yml | 10 +-- test-server/Makefile | 21 ++--- .../amazon/encryption/s3/TestUtils.java | 78 +++++++++++++++++-- 3 files changed, 85 insertions(+), 24 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8a8a65a1..99429643 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -130,7 +130,7 @@ jobs: test-server/java-tests/.gradle test-server/java-v3-transition-server/.gradle test-server/java-v4-server/.gradle - key: ${{ runner.os }}-gradle-${{ hashFiles('test-server/**/gradle-wrapper.properties', 'test-server/**/*.gradle*') }} + key: ${{ runner.os }}-gradle-${{ hashFiles('test-server/java-*/gradle-wrapper.properties', 'test-server/java-*/*.gradle*') }} restore-keys: | ${{ runner.os }}-gradle- @@ -141,7 +141,7 @@ jobs: path: | ~/go/pkg/mod ~/.cache/go-build - key: ${{ runner.os }}-go-${{ hashFiles('test-server/**/go.sum') }} + key: ${{ runner.os }}-go-${{ hashFiles('test-server/go-*/go.sum') }} restore-keys: | ${{ runner.os }}-go- @@ -150,7 +150,7 @@ jobs: uses: actions/cache@v4 with: path: ~/.nuget/packages - key: ${{ runner.os }}-nuget-${{ hashFiles('test-server/**/*.csproj', 'test-server/**/*.fsproj') }} + key: ${{ runner.os }}-nuget-${{ hashFiles('test-server/net-*/*.csproj', 'test-server/net-*/*.fsproj') }} restore-keys: | ${{ runner.os }}-nuget- @@ -159,7 +159,7 @@ jobs: uses: actions/cache@v4 with: path: ~/.gem - key: ${{ runner.os }}-gems-${{ hashFiles('test-server/**/Gemfile.lock') }} + key: ${{ runner.os }}-gems-${{ hashFiles('test-server/ruby-*/Gemfile.lock') }} restore-keys: | ${{ runner.os }}-gems- @@ -168,7 +168,7 @@ jobs: uses: actions/cache@v4 with: path: ~/.composer/cache - key: ${{ runner.os }}-composer-${{ hashFiles('test-server/**/composer.lock') }} + key: ${{ runner.os }}-composer-${{ hashFiles('test-server/php-*/composer.lock') }} restore-keys: | ${{ runner.os }}-composer- diff --git a/test-server/Makefile b/test-server/Makefile index 69037e2f..76f55848 100644 --- a/test-server/Makefile +++ b/test-server/Makefile @@ -1,6 +1,6 @@ # Makefile for S3 Encryption Client Testing -.PHONY: all start-servers run-tests stop-servers clean ci check-env help +.PHONY: all start-servers run-tests stop-servers clean ci check-env help install-shared-deps # Default target all: start-all-servers wait-all-servers run-tests @@ -24,6 +24,7 @@ install-shared-deps: @echo "Shared dependencies installed" # Start all servers in parallel for maximum speed +# Java tests will handle server readiness validation start-servers: install-shared-deps @echo "Starting all servers in parallel..." @echo "Server directories: $(SERVER_DIRS)" @@ -36,15 +37,8 @@ start-servers: install-shared-deps echo "Error: no Makefile found in $$dir"; \ fi; \ done - @echo "All servers starting in parallel, waiting for them to be ready..." - @# Wait for all servers to be ready - @for dir in $(SERVER_DIRS); do \ - if [ -f $$dir/Makefile ]; then \ - echo "Waiting for server in $$dir..."; \ - $(MAKE) -C $$dir wait-for-server; \ - fi; \ - done - @echo "All servers are ready!" + @echo "All servers started in parallel" + @echo "Note: Java tests will validate server readiness before running" # Keep the original sequential method as backup start-all-servers: $(START_SERVER_TARGETS) @@ -54,7 +48,7 @@ $(START_SERVER_TARGETS): start-%: echo "Starting server in $*..."; \ $(MAKE) -C $* start-server; \ else \ - echo "❌ Error: no Makefile found in $*"; \ + echo "Error: no Makefile found in $*"; \ exit 1; \ fi; \ @@ -65,11 +59,10 @@ $(WAIT_SERVER_TARGETS): wait-%: echo "Waiting server in $*..."; \ $(MAKE) -C $* wait-for-server; \ else \ - echo "❌ Error: no Makefile found in $*"; \ + echo "Error: no Makefile found in $*"; \ exit 1; \ fi; \ - # Run the Java tests run-tests: @echo "Running Java tests..." @@ -115,7 +108,7 @@ TIMEOUT := 360 wait-for-port: @if [ -z "$(PORT)" ]; then \ - echo "❌ Error: PORT is required"; \ + echo "Error: PORT is required"; \ exit 1; \ fi @for i in $$(seq 1 $(TIMEOUT)); do \ diff --git a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/TestUtils.java b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/TestUtils.java index 26afb9ae..13359d69 100644 --- a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/TestUtils.java +++ b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/TestUtils.java @@ -14,6 +14,7 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -312,16 +313,83 @@ public static List metadataMapToList(Map md) { } /** - * Validates that all servers in the server map are running - * @throws RuntimeException if any server is not running + * Validates that all servers in the server map are running with parallel waiting and timeouts + * @throws RuntimeException if any server is not running after timeout */ public static void validateServersRunning() { + validateServersRunning(6 * 60); // 6 minutes default timeout + } + + /** + * Validates that all servers are running with specified timeout + * Uses parallel threads to wait for each server independently + * @param timeoutSeconds Maximum time to wait for each server + * @throws RuntimeException if any server is not running after timeout + */ + public static void validateServersRunning(int timeoutSeconds) { + System.out.println("Waiting for " + serverMap.size() + " servers to be ready (timeout: " + timeoutSeconds + "s each)..."); + + List waitThreads = new ArrayList<>(); + List failedServers = Collections.synchronizedList(new ArrayList<>()); + List readyServers = Collections.synchronizedList(new ArrayList<>()); + + // Start a thread for each server to wait independently for (LanguageServerTarget server : serverMap.values()) { - if (!serverListening(server.getServerURI())) { - throw new RuntimeException(String.format("Test Server for %s is not running at endpoint: %s", - server.getLanguageName(), server.getServerURI())); + Thread waitThread = new Thread(() -> { + String serverName = server.getLanguageName(); + URI serverURI = server.getServerURI(); + + System.out.println("Waiting for server: " + serverName + " at " + serverURI); + + long startTime = System.currentTimeMillis(); + long timeoutMillis = timeoutSeconds * 1000L; + + while (System.currentTimeMillis() - startTime < timeoutMillis) { + if (serverListening(serverURI)) { + readyServers.add(serverName); + System.out.println("Server ready: " + serverName + " (took " + + (System.currentTimeMillis() - startTime) / 1000 + "s)"); + return; + } + + try { + Thread.sleep(2000); // Check every 2 seconds + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + failedServers.add(serverName + " (interrupted)"); + return; + } + } + + // Timeout reached + failedServers.add(serverName + " (timeout after " + timeoutSeconds + "s)"); + System.err.println("Timeout waiting for server: " + serverName + " at " + serverURI); + }); + + waitThread.setName("ServerWaiter-" + server.getLanguageName()); + waitThread.start(); + waitThreads.add(waitThread); + } + + // Wait for all threads to complete + for (Thread thread : waitThreads) { + try { + thread.join(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new RuntimeException("Interrupted while waiting for servers", e); } } + + // Report results + System.out.println("Server readiness check complete:"); + System.out.println(" Ready servers (" + readyServers.size() + "): " + readyServers); + if (!failedServers.isEmpty()) { + System.err.println(" Failed servers (" + failedServers.size() + "): " + failedServers); + throw new RuntimeException("Failed to start servers: " + failedServers); + } + + System.out.println("All " + serverMap.size() + " servers are ready!"); } /** From 3e31294bc69c6ea6ff6466abc22f35b9924b00ce Mon Sep 17 00:00:00 2001 From: Kess Plasmeier Date: Mon, 10 Nov 2025 19:53:07 -0800 Subject: [PATCH 04/10] wait for servers in all tests --- .../software/amazon/encryption/s3/CBCDecryptTests.java | 2 ++ .../it/java/software/amazon/encryption/s3/GCMTests.java | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/CBCDecryptTests.java b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/CBCDecryptTests.java index 093ba2ab..5a877b36 100644 --- a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/CBCDecryptTests.java +++ b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/CBCDecryptTests.java @@ -78,6 +78,8 @@ static void encryptCBCObject() { .build(); v1Client.putObject(TestUtils.BUCKET, sharedObjectKey, sharedObjectKey); + + validateServersRunning(); } @ParameterizedTest(name = "{0}: Transition configured with the default should decrypt CBC") diff --git a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/GCMTests.java b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/GCMTests.java index 6eef0b5f..2be94ea5 100644 --- a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/GCMTests.java +++ b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/GCMTests.java @@ -64,7 +64,12 @@ class GCMTests { .kmsKeyId(TestUtils.KMS_KEY_ARN) .build(); private static List crossLanguageObjects = new ArrayList<>(); - + + @BeforeAll + public static void setup() { + validateServersRunning(); + } + @Order(1) @ParameterizedTest(name = "{0}: Improved configured with ForbidEncryptAllowDecrypt should encrypt GCM") @MethodSource("software.amazon.encryption.s3.TestUtils#improvedClientsForTest") From 8358d377a85a16b4f4c33eab7d892da5bb80ea22 Mon Sep 17 00:00:00 2001 From: Kess Plasmeier Date: Mon, 10 Nov 2025 20:11:51 -0800 Subject: [PATCH 05/10] trim AWS SDK Java v1 deps --- test-server/java-tests/build.gradle.kts | 32 ++++++++++--------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/test-server/java-tests/build.gradle.kts b/test-server/java-tests/build.gradle.kts index 9f5d97e3..f53127a8 100644 --- a/test-server/java-tests/build.gradle.kts +++ b/test-server/java-tests/build.gradle.kts @@ -16,7 +16,13 @@ dependencies { // Test dependencies testImplementation("org.junit.jupiter:junit-jupiter:5.13.0") testRuntimeOnly("org.junit.platform:junit-platform-launcher") - testImplementation("com.amazonaws:aws-java-sdk:1.12.788") + + // AWS SDK v1 - Only include S3 and KMS modules instead of entire SDK + testImplementation("com.amazonaws:aws-java-sdk-core:1.12.788") + testImplementation("com.amazonaws:aws-java-sdk-s3:1.12.788") + testImplementation("com.amazonaws:aws-java-sdk-kms:1.12.788") + + // AWS SDK v2 - S3 module testImplementation("software.amazon.awssdk:s3:2.37.1") testImplementation("org.bouncycastle:bcprov-jdk15on:1.70") } @@ -49,31 +55,17 @@ tasks { classpath = sourceSets["it"].runtimeClasspath outputs.upToDateWhen { false } outputs.cacheIf { false } - - // Optimize test execution for performance - maxParallelForks = Runtime.getRuntime().availableProcessors() - forkEvery = 100 - - // JVM optimizations for faster test execution - jvmArgs = listOf( - "-XX:+UseG1GC", - "-XX:MaxGCPauseMillis=100", - "-Xmx2g", - "-XX:+TieredCompilation", - "-XX:TieredStopAtLevel=1" - ) - // Passing information from Gradle into the tests so that we can filter our servers systemProperty("test.filter.servers", System.getProperty("test.filter.servers")) - - // Disable AWS SDK v1 deprecation warnings for cleaner output - systemProperty("aws.java.v1.disableDeprecationAnnouncement", "true") - - // For debugging (uncomment if needed) + // For debugging + // // Enable System.out output // testLogging { // events("passed", "skipped", "failed", "standardOut", "standardError") // showStandardStreams = true // } + + // // Disable AWS SDK v1 deprecation warnings + // systemProperty("aws.java.v1.disableDeprecationAnnouncement", "true") } } From 4a6fa94b492c6ea522a4eb2297f753e2b5a2ef12 Mon Sep 17 00:00:00 2001 From: Kess Plasmeier Date: Mon, 10 Nov 2025 20:16:07 -0800 Subject: [PATCH 06/10] reduce logspam --- .../src/it/java/software/amazon/encryption/s3/TestUtils.java | 1 - 1 file changed, 1 deletion(-) diff --git a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/TestUtils.java b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/TestUtils.java index 13359d69..0de8ef3a 100644 --- a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/TestUtils.java +++ b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/TestUtils.java @@ -273,7 +273,6 @@ public static boolean serverListening(URI uri) { try (Socket ignored = new Socket(uri.getHost(), uri.getPort())) { return true; } catch (Exception e) { - e.printStackTrace(); return false; } } From cad7ffdcd4f43723018d2304ac761a58d4dd9c8f Mon Sep 17 00:00:00 2001 From: Kess Plasmeier Date: Mon, 10 Nov 2025 20:32:40 -0800 Subject: [PATCH 07/10] gate KCGCM tests, do CPP first by itself --- test-server/Makefile | 35 +++++++++++++++---- .../amazon/encryption/s3/KC_GCMTests.java | 7 +++- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/test-server/Makefile b/test-server/Makefile index 76f55848..146993c2 100644 --- a/test-server/Makefile +++ b/test-server/Makefile @@ -23,13 +23,37 @@ install-shared-deps: fi @echo "Shared dependencies installed" -# Start all servers in parallel for maximum speed +# Start servers with optimized strategy: C++ first (resource-intensive), then others in parallel # Java tests will handle server readiness validation start-servers: install-shared-deps - @echo "Starting all servers in parallel..." + @echo "Starting servers with optimized strategy..." @echo "Server directories: $(SERVER_DIRS)" - @# Start all servers in parallel - @for dir in $(SERVER_DIRS); do \ + $(MAKE) start-cpp-servers-sequential + $(MAKE) start-remaining-servers-parallel + @echo "All servers started" + @echo "Note: Java tests will validate server readiness before running" + +# Identify C++ servers and other servers +CPP_SERVERS := $(filter cpp-%,$(SERVER_DIRS)) +NON_CPP_SERVERS := $(filter-out cpp-%,$(SERVER_DIRS)) + +# Start C++ servers sequentially (resource-intensive builds) +start-cpp-servers-sequential: + @echo "Starting C++ servers sequentially (resource-intensive builds)..." + @for dir in $(CPP_SERVERS); do \ + if [ -f $$dir/Makefile ]; then \ + echo "Building and starting C++ server in $$dir..."; \ + $(MAKE) -C $$dir start-server; \ + else \ + echo "Error: no Makefile found in $$dir"; \ + fi; \ + done + @echo "C++ servers started" + +# Start remaining servers in parallel (lightweight) +start-remaining-servers-parallel: + @echo "Starting remaining servers in parallel..." + @for dir in $(NON_CPP_SERVERS); do \ if [ -f $$dir/Makefile ]; then \ echo "Starting server in $$dir..."; \ $(MAKE) -C $$dir start-server & \ @@ -37,8 +61,7 @@ start-servers: install-shared-deps echo "Error: no Makefile found in $$dir"; \ fi; \ done - @echo "All servers started in parallel" - @echo "Note: Java tests will validate server readiness before running" + @echo "Non-C++ servers started in parallel" # Keep the original sequential method as backup start-all-servers: $(START_SERVER_TARGETS) diff --git a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/KC_GCMTests.java b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/KC_GCMTests.java index 99e8d37d..e9e3a0f5 100644 --- a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/KC_GCMTests.java +++ b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/KC_GCMTests.java @@ -64,7 +64,12 @@ class KC_GCMTests { .kmsKeyId(TestUtils.KMS_KEY_ARN) .build(); private static List crossLanguageObjects = new ArrayList<>(); - + + @BeforeAll + public static void setup() { + validateServersRunning(); + } + @Order(1) @ParameterizedTest(name = "{0}: Improved configured with RequireEncryptAllowDecrypt should encrypt KC-GCM") @MethodSource("software.amazon.encryption.s3.TestUtils#improvedClientsForTest") From c86ee3b2fc92171a5c4095f27df83d322278609d Mon Sep 17 00:00:00 2001 From: Kess Plasmeier Date: Mon, 10 Nov 2025 20:54:04 -0800 Subject: [PATCH 08/10] wait for CPP --- test-server/Makefile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test-server/Makefile b/test-server/Makefile index 146993c2..22e4ee59 100644 --- a/test-server/Makefile +++ b/test-server/Makefile @@ -37,18 +37,20 @@ start-servers: install-shared-deps CPP_SERVERS := $(filter cpp-%,$(SERVER_DIRS)) NON_CPP_SERVERS := $(filter-out cpp-%,$(SERVER_DIRS)) -# Start C++ servers sequentially (resource-intensive builds) +# Start C++ servers sequentially (resource-intensive builds) and wait for each to be ready start-cpp-servers-sequential: @echo "Starting C++ servers sequentially (resource-intensive builds)..." @for dir in $(CPP_SERVERS); do \ if [ -f $$dir/Makefile ]; then \ echo "Building and starting C++ server in $$dir..."; \ $(MAKE) -C $$dir start-server; \ + echo "Waiting for C++ server in $$dir to be ready..."; \ + $(MAKE) -C $$dir wait-for-server; \ else \ echo "Error: no Makefile found in $$dir"; \ fi; \ done - @echo "C++ servers started" + @echo "All C++ servers built and ready" # Start remaining servers in parallel (lightweight) start-remaining-servers-parallel: From 1f297104feac93183bee7c4c7e82f9984e957c04 Mon Sep 17 00:00:00 2001 From: Kess Plasmeier Date: Mon, 10 Nov 2025 21:22:07 -0800 Subject: [PATCH 09/10] return to og --- .github/workflows/test.yml | 50 ++++---------------------------------- test-server/Makefile | 46 ++++++----------------------------- 2 files changed, 12 insertions(+), 84 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 99429643..c29cfb5a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -107,19 +107,19 @@ jobs: with: go-version: 1.25 - # Enhanced caching for multiple language dependencies + # Cache uv dependencies - name: Cache uv dependencies - uses: actions/cache@v4 + uses: actions/cache@v3 with: path: ~/.cache/uv - key: ${{ runner.os }}-uv-${{ hashFiles('./test-server/python-v3-server/**/pyproject.toml', './pyproject.toml') }} + key: ${{ runner.os }}-uv-${{ hashFiles('./test-server/python-v3-server/**/pyproject.toml') }} restore-keys: | ${{ runner.os }}-uv- - name: Install Uv run: pip install uv - # Enhanced Gradle caching with build cache + # Cache Gradle dependencies and build outputs - name: Cache Gradle packages uses: actions/cache@v4 with: @@ -128,50 +128,10 @@ jobs: ~/.gradle/wrapper test-server/java-v3-server/.gradle test-server/java-tests/.gradle - test-server/java-v3-transition-server/.gradle - test-server/java-v4-server/.gradle - key: ${{ runner.os }}-gradle-${{ hashFiles('test-server/java-*/gradle-wrapper.properties', 'test-server/java-*/*.gradle*') }} + key: ${{ runner.os }}-gradle-${{ hashFiles('test-server/java-v3-server/**/*.gradle*', 'test-server/java-tests/**/gradle-wrapper.properties', 'test-server/java-tests/**/*.gradle*', 'test-server/java-v3-server/**/gradle-wrapper.properties') }} restore-keys: | ${{ runner.os }}-gradle- - # Cache Go modules - - name: Cache Go modules - uses: actions/cache@v4 - with: - path: | - ~/go/pkg/mod - ~/.cache/go-build - key: ${{ runner.os }}-go-${{ hashFiles('test-server/go-*/go.sum') }} - restore-keys: | - ${{ runner.os }}-go- - - # Cache .NET packages - - name: Cache .NET packages - uses: actions/cache@v4 - with: - path: ~/.nuget/packages - key: ${{ runner.os }}-nuget-${{ hashFiles('test-server/net-*/*.csproj', 'test-server/net-*/*.fsproj') }} - restore-keys: | - ${{ runner.os }}-nuget- - - # Cache Ruby gems - - name: Cache Ruby gems - uses: actions/cache@v4 - with: - path: ~/.gem - key: ${{ runner.os }}-gems-${{ hashFiles('test-server/ruby-*/Gemfile.lock') }} - restore-keys: | - ${{ runner.os }}-gems- - - # Cache PHP Composer dependencies - - name: Cache PHP Composer dependencies - uses: actions/cache@v4 - with: - path: ~/.composer/cache - key: ${{ runner.os }}-composer-${{ hashFiles('test-server/php-*/composer.lock') }} - restore-keys: | - ${{ runner.os }}-composer- - - name: Install dependencies run: make install diff --git a/test-server/Makefile b/test-server/Makefile index 22e4ee59..e6001d1e 100644 --- a/test-server/Makefile +++ b/test-server/Makefile @@ -23,47 +23,15 @@ install-shared-deps: fi @echo "Shared dependencies installed" -# Start servers with optimized strategy: C++ first (resource-intensive), then others in parallel -# Java tests will handle server readiness validation +# Start all servers sequentially (original approach) start-servers: install-shared-deps - @echo "Starting servers with optimized strategy..." - @echo "Server directories: $(SERVER_DIRS)" - $(MAKE) start-cpp-servers-sequential - $(MAKE) start-remaining-servers-parallel - @echo "All servers started" - @echo "Note: Java tests will validate server readiness before running" - -# Identify C++ servers and other servers -CPP_SERVERS := $(filter cpp-%,$(SERVER_DIRS)) -NON_CPP_SERVERS := $(filter-out cpp-%,$(SERVER_DIRS)) - -# Start C++ servers sequentially (resource-intensive builds) and wait for each to be ready -start-cpp-servers-sequential: - @echo "Starting C++ servers sequentially (resource-intensive builds)..." - @for dir in $(CPP_SERVERS); do \ - if [ -f $$dir/Makefile ]; then \ - echo "Building and starting C++ server in $$dir..."; \ - $(MAKE) -C $$dir start-server; \ - echo "Waiting for C++ server in $$dir to be ready..."; \ - $(MAKE) -C $$dir wait-for-server; \ - else \ - echo "Error: no Makefile found in $$dir"; \ - fi; \ - done - @echo "All C++ servers built and ready" - -# Start remaining servers in parallel (lightweight) -start-remaining-servers-parallel: - @echo "Starting remaining servers in parallel..." - @for dir in $(NON_CPP_SERVERS); do \ - if [ -f $$dir/Makefile ]; then \ - echo "Starting server in $$dir..."; \ - $(MAKE) -C $$dir start-server & \ - else \ - echo "Error: no Makefile found in $$dir"; \ - fi; \ + @echo "Starting all servers..." + $(MAKE) start-all-servers + @echo "Waiting for servers to start..." + @for dir in $(SERVER_DIRS); do \ + echo "Waiting for server in $$dir..."; \ + $(MAKE) -C $$dir wait-for-server; \ done - @echo "Non-C++ servers started in parallel" # Keep the original sequential method as backup start-all-servers: $(START_SERVER_TARGETS) From 598dc62801adbe8f97163a5b57cc8c5579919886 Mon Sep 17 00:00:00 2001 From: Kess Plasmeier Date: Tue, 11 Nov 2025 00:38:44 -0800 Subject: [PATCH 10/10] reduce logging --- test-server/cpp-v3-server/main.cpp | 12 +-- test-server/go-v3-server/main.go | 4 +- .../amazon/encryption/s3/TestUtils.java | 79 ++----------------- .../Controllers/ClientController.cs | 10 +-- .../Controllers/ObjectController.cs | 6 +- .../Controllers/ClientController.cs | 14 ++-- .../Controllers/ObjectController.cs | 6 +- test-server/php-v3-server/src/index.php | 12 +-- 8 files changed, 38 insertions(+), 105 deletions(-) diff --git a/test-server/cpp-v3-server/main.cpp b/test-server/cpp-v3-server/main.cpp index 1f74974c..25a404a7 100644 --- a/test-server/cpp-v3-server/main.cpp +++ b/test-server/cpp-v3-server/main.cpp @@ -51,7 +51,7 @@ std::string make_error(const std::string &message, int status_code) { } MHD_Result unsupported(struct MHD_Connection *connection, std::string & commitmentPolicy, std::string & encryptionAlgorithm) { - fprintf(stderr, "Unsupported %s %s\n",commitmentPolicy.c_str(), encryptionAlgorithm.c_str() ); + // fprintf(stderr, "Unsupported %s %s\n",commitmentPolicy.c_str(), encryptionAlgorithm.c_str() ); send_response(connection, 404, "{\"error\":\"Unsupported Option.\"}"); return MHD_YES; } @@ -109,7 +109,7 @@ MHD_Result handle_create_client(struct MHD_Connection *connection, json response = {{"clientId", client_id}}; return send_response(connection, 200, response.dump()); } catch (const std::exception &e) { - fprintf(stderr, "handle_create_client exception %s\n", e.what()); + // fprintf(stderr, "handle_create_client exception %s\n", e.what()); return send_response(connection, 500, "{\"error\":\"An exception was thrown.\"}"); } catch (...) { @@ -205,11 +205,11 @@ MHD_Result handle_get_object(struct MHD_Connection *connection, return send_response(connection, 200, content); } else { auto msg = make_error(outcome.GetError().GetMessage(), 500); - fprintf(stderr, "handle_get_object error %s\n", msg.c_str()); + // fprintf(stderr, "handle_get_object error %s\n", msg.c_str()); return send_response(connection, 500, msg); } } catch (const std::exception &e) { - fprintf(stderr, "handle_get_object exception %s\n", e.what()); + // fprintf(stderr, "handle_get_object exception %s\n", e.what()); auto msg = make_error("An exception was thrown", 500); return send_response(connection, 500, msg); } @@ -242,11 +242,11 @@ MHD_Result handle_put_object(struct MHD_Connection *connection, return send_response(connection, 200, response.dump()); } else { auto msg = make_error(outcome.GetError().GetMessage(), 500); - fprintf(stderr, "handle_put_object error %s\n", msg.c_str()); + // fprintf(stderr, "handle_put_object error %s\n", msg.c_str()); return send_response(connection, 500, msg); } } catch (const std::exception &e) { - fprintf(stderr, "handle_put_object exception %s\n", e.what()); + // fprintf(stderr, "handle_put_object exception %s\n", e.what()); auto msg = make_error(e.what(), 500); return send_response(connection, 500, msg); } diff --git a/test-server/go-v3-server/main.go b/test-server/go-v3-server/main.go index d201ffe2..908cf931 100644 --- a/test-server/go-v3-server/main.go +++ b/test-server/go-v3-server/main.go @@ -80,7 +80,7 @@ func NewServer() (*Server, error) { // createGenericServerError creates a generic server error response func (s *Server) createGenericServerError(w http.ResponseWriter, message string, statusCode int) { // Echo error to console - log.Printf("[Go V3] GenericServerError: %s (Status: %d)", message, statusCode) + // log.Printf("[Go V3] GenericServerError: %s (Status: %d)", message, statusCode) w.Header().Set("Content-Type", "application/json") w.WriteHeader(statusCode) @@ -93,7 +93,7 @@ func (s *Server) createGenericServerError(w http.ResponseWriter, message string, // createS3EncryptionClientError creates an S3 encryption client error response func (s *Server) createS3EncryptionClientError(w http.ResponseWriter, message string, statusCode int) { // Echo error to console - log.Printf("[Go V3] S3EncryptionClientError: %s (Status: %d)", message, statusCode) + // log.Printf("[Go V3] S3EncryptionClientError: %s (Status: %d)", message, statusCode) w.Header().Set("Content-Type", "application/json") w.WriteHeader(statusCode) diff --git a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/TestUtils.java b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/TestUtils.java index 0de8ef3a..26afb9ae 100644 --- a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/TestUtils.java +++ b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/TestUtils.java @@ -14,7 +14,6 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -273,6 +272,7 @@ public static boolean serverListening(URI uri) { try (Socket ignored = new Socket(uri.getHost(), uri.getPort())) { return true; } catch (Exception e) { + e.printStackTrace(); return false; } } @@ -312,83 +312,16 @@ public static List metadataMapToList(Map md) { } /** - * Validates that all servers in the server map are running with parallel waiting and timeouts - * @throws RuntimeException if any server is not running after timeout + * Validates that all servers in the server map are running + * @throws RuntimeException if any server is not running */ public static void validateServersRunning() { - validateServersRunning(6 * 60); // 6 minutes default timeout - } - - /** - * Validates that all servers are running with specified timeout - * Uses parallel threads to wait for each server independently - * @param timeoutSeconds Maximum time to wait for each server - * @throws RuntimeException if any server is not running after timeout - */ - public static void validateServersRunning(int timeoutSeconds) { - System.out.println("Waiting for " + serverMap.size() + " servers to be ready (timeout: " + timeoutSeconds + "s each)..."); - - List waitThreads = new ArrayList<>(); - List failedServers = Collections.synchronizedList(new ArrayList<>()); - List readyServers = Collections.synchronizedList(new ArrayList<>()); - - // Start a thread for each server to wait independently for (LanguageServerTarget server : serverMap.values()) { - Thread waitThread = new Thread(() -> { - String serverName = server.getLanguageName(); - URI serverURI = server.getServerURI(); - - System.out.println("Waiting for server: " + serverName + " at " + serverURI); - - long startTime = System.currentTimeMillis(); - long timeoutMillis = timeoutSeconds * 1000L; - - while (System.currentTimeMillis() - startTime < timeoutMillis) { - if (serverListening(serverURI)) { - readyServers.add(serverName); - System.out.println("Server ready: " + serverName + " (took " + - (System.currentTimeMillis() - startTime) / 1000 + "s)"); - return; - } - - try { - Thread.sleep(2000); // Check every 2 seconds - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - failedServers.add(serverName + " (interrupted)"); - return; - } - } - - // Timeout reached - failedServers.add(serverName + " (timeout after " + timeoutSeconds + "s)"); - System.err.println("Timeout waiting for server: " + serverName + " at " + serverURI); - }); - - waitThread.setName("ServerWaiter-" + server.getLanguageName()); - waitThread.start(); - waitThreads.add(waitThread); - } - - // Wait for all threads to complete - for (Thread thread : waitThreads) { - try { - thread.join(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - throw new RuntimeException("Interrupted while waiting for servers", e); + if (!serverListening(server.getServerURI())) { + throw new RuntimeException(String.format("Test Server for %s is not running at endpoint: %s", + server.getLanguageName(), server.getServerURI())); } } - - // Report results - System.out.println("Server readiness check complete:"); - System.out.println(" Ready servers (" + readyServers.size() + "): " + readyServers); - if (!failedServers.isEmpty()) { - System.err.println(" Failed servers (" + failedServers.size() + "): " + failedServers); - throw new RuntimeException("Failed to start servers: " + failedServers); - } - - System.out.println("All " + serverMap.size() + " servers are ready!"); } /** diff --git a/test-server/net-v2-v3-server/Controllers/ClientController.cs b/test-server/net-v2-v3-server/Controllers/ClientController.cs index 01bf610c..1c8e64cb 100644 --- a/test-server/net-v2-v3-server/Controllers/ClientController.cs +++ b/test-server/net-v2-v3-server/Controllers/ClientController.cs @@ -35,14 +35,14 @@ public IActionResult CreateClient([FromBody] ClientRequest request) // So, we are passing empty dictionary. var encryptionContext = new Dictionary(); var encryptionMaterial = new EncryptionMaterialsV2(kmsKeyId, KmsType.KmsContext, encryptionContext); - logger.LogInformation( - "Created EncryptionMaterialsV2: KMS={KmsKeyId}", - kmsKeyId); + // logger.LogInformation( + // "Created EncryptionMaterialsV2: KMS={KmsKeyId}", + // kmsKeyId); // SecurityProfile V2AndLegacy can decrypt from legacy S3EC but V2 cannot var enableLegacyMode = enableLegacyUnauthenticatedModes || enableLegacyWrappingAlgorithms; var securityProfile = enableLegacyMode ? SecurityProfile.V2AndLegacy : SecurityProfile.V2; - logger.LogInformation("Created securityProfile= {securityProfile}", securityProfile.ToString()); + // logger.LogInformation("Created securityProfile= {securityProfile}", securityProfile.ToString()); var configuration = new AmazonS3CryptoConfigurationV2(securityProfile); // Create S3 encryption client @@ -69,4 +69,4 @@ public IActionResult CreateClient([FromBody] ClientRequest request) }); } } -} \ No newline at end of file +} diff --git a/test-server/net-v2-v3-server/Controllers/ObjectController.cs b/test-server/net-v2-v3-server/Controllers/ObjectController.cs index bf1842ae..cdb4ca93 100644 --- a/test-server/net-v2-v3-server/Controllers/ObjectController.cs +++ b/test-server/net-v2-v3-server/Controllers/ObjectController.cs @@ -13,7 +13,7 @@ public class ObjectController(IClientCacheService clientCacheService, ILogger PutObject(string bucket, string key) { - logger.LogInformation("Starting PutObject"); + // logger.LogInformation("Starting PutObject"); var clientId = Request.Headers["clientId"].FirstOrDefault(); if (string.IsNullOrEmpty(clientId)) return BadRequest(new GenericServerError { Message = "ClientID header is required" }); @@ -62,7 +62,7 @@ public async Task PutObject(string bucket, string key) [HttpGet("{bucket}/{key}")] public async Task GetObject(string bucket, string key) { - logger.LogInformation("Starting GetObject"); + // logger.LogInformation("Starting GetObject"); var clientId = Request.Headers["clientId"].FirstOrDefault(); if (string.IsNullOrEmpty(clientId)) return BadRequest(new GenericServerError { Message = "ClientID header is required" }); @@ -102,4 +102,4 @@ public async Task GetObject(string bucket, string key) return StatusCode(500, new S3EncryptionClientError { Message = ex.Message }); } } -} \ No newline at end of file +} diff --git a/test-server/net-v3-transition-server/Controllers/ClientController.cs b/test-server/net-v3-transition-server/Controllers/ClientController.cs index 16630e9c..67cfa869 100644 --- a/test-server/net-v3-transition-server/Controllers/ClientController.cs +++ b/test-server/net-v3-transition-server/Controllers/ClientController.cs @@ -36,19 +36,19 @@ public IActionResult CreateClient([FromBody] ClientRequest request) // So, we are passing empty dictionary. var encryptionContext = new Dictionary(); var encryptionMaterial = new EncryptionMaterialsV2(kmsKeyId, KmsType.KmsContext, encryptionContext); - logger.LogInformation( - "[NET-V3-Transitional] Created EncryptionMaterialsV2: KMS={KmsKeyId}", - kmsKeyId); + // logger.LogInformation( + // "[NET-V3-Transitional] Created EncryptionMaterialsV2: KMS={KmsKeyId}", + // kmsKeyId); // SecurityProfile V2AndLegacy can decrypt from legacy S3EC but V2 cannot var enableLegacyMode = enableLegacyUnauthenticatedModes || enableLegacyWrappingAlgorithms; var securityProfile = enableLegacyMode ? SecurityProfile.V2AndLegacy : SecurityProfile.V2; - logger.LogInformation("[NET-V3-Transitional] Created securityProfile= {securityProfile}", securityProfile.ToString()); + // logger.LogInformation("[NET-V3-Transitional] Created securityProfile= {securityProfile}", securityProfile.ToString()); var encryptionAlgorithm = MapEncryptionAlgorithm(request.Config.EncryptionAlgorithm); // var encryptionAlgorithm = commitmentPolicy == Amazon.Extensions.S3.Encryption.CommitmentPolicy.ForbidEncryptAllowDecrypt ? ContentEncryptionAlgorithm.AesGcm : ContentEncryptionAlgorithm.AesGcmWithCommitment; - logger.LogInformation("[NET-V3-Transitional] Created commitmentPolicy= {commitmentPolicy}", commitmentPolicy); - logger.LogInformation("[NET-V3-Transitional] Created encryptionAlgorithm= {encryptionAlgorithm}", encryptionAlgorithm); + // logger.LogInformation("[NET-V3-Transitional] Created commitmentPolicy= {commitmentPolicy}", commitmentPolicy); + // logger.LogInformation("[NET-V3-Transitional] Created encryptionAlgorithm= {encryptionAlgorithm}", encryptionAlgorithm); var configuration = new AmazonS3CryptoConfigurationV2(securityProfile, commitmentPolicy, encryptionAlgorithm); // Create S3 encryption client @@ -97,4 +97,4 @@ private static ContentEncryptionAlgorithm MapEncryptionAlgorithm(Models.Encrypti _ => ContentEncryptionAlgorithm.AesGcm }; } -} \ No newline at end of file +} diff --git a/test-server/net-v3-transition-server/Controllers/ObjectController.cs b/test-server/net-v3-transition-server/Controllers/ObjectController.cs index 76548815..fb7f5691 100644 --- a/test-server/net-v3-transition-server/Controllers/ObjectController.cs +++ b/test-server/net-v3-transition-server/Controllers/ObjectController.cs @@ -13,7 +13,7 @@ public class ObjectController(IClientCacheService clientCacheService, ILogger PutObject(string bucket, string key) { - logger.LogInformation("Starting PutObject"); + // logger.LogInformation("Starting PutObject"); var clientId = Request.Headers["clientId"].FirstOrDefault(); if (string.IsNullOrEmpty(clientId)) return BadRequest(new GenericServerError { Message = "[NET-V3-Transitional] ClientID header is required" }); @@ -62,7 +62,7 @@ public async Task PutObject(string bucket, string key) [HttpGet("{bucket}/{key}")] public async Task GetObject(string bucket, string key) { - logger.LogInformation("Starting GetObject"); + // logger.LogInformation("Starting GetObject"); var clientId = Request.Headers["clientId"].FirstOrDefault(); if (string.IsNullOrEmpty(clientId)) return BadRequest(new GenericServerError { Message = "[NET-V3-Transitional] ClientID header is required" }); @@ -102,4 +102,4 @@ public async Task GetObject(string bucket, string key) return StatusCode(500, new S3EncryptionClientError { Message = ex.Message }); } } -} \ No newline at end of file +} diff --git a/test-server/php-v3-server/src/index.php b/test-server/php-v3-server/src/index.php index 167834e0..fb97b7e1 100644 --- a/test-server/php-v3-server/src/index.php +++ b/test-server/php-v3-server/src/index.php @@ -16,14 +16,14 @@ function getSessionIdFromCookiesFile() $cookiesFile = __DIR__ . '/../cookies.txt'; if (!file_exists($cookiesFile)) { - error_log("cookies.txt file does not exist, will be created when first client is created"); + // error_log("cookies.txt file does not exist, will be created when first client is created"); return null; } $lines = file($cookiesFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); if ($lines === false) { - error_log("Failed to read cookies.txt file"); + // error_log("Failed to read cookies.txt file"); return null; } @@ -36,12 +36,12 @@ function getSessionIdFromCookiesFile() // Parse cookie line: domain, flag, path, secure, expiration, name, value $parts = explode("\t", $line); if (count($parts) >= 7 && $parts[5] === 'PHPSESSID') { - error_log("Found session ID in cookies.txt: " . $parts[6]); + // error_log("Found session ID in cookies.txt: " . $parts[6]); return $parts[6]; // Return the session ID value } } - error_log("No PHPSESSID found in cookies.txt file"); + // error_log("No PHPSESSID found in cookies.txt file"); return null; } @@ -62,11 +62,11 @@ function writeSessionIdToCookiesFile($sessionId) $result = file_put_contents($cookiesFile, $content); if ($result === false) { - error_log("Failed to write session ID to cookies.txt file: $cookiesFile"); + // error_log("Failed to write session ID to cookies.txt file: $cookiesFile"); return false; } - error_log("Successfully wrote session ID to cookies.txt: $sessionId"); + // error_log("Successfully wrote session ID to cookies.txt: $sessionId"); return true; }