From ebb03b13beb866690e55a7f202819c671276048d Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Fri, 26 Sep 2025 12:07:45 -0400 Subject: [PATCH 01/27] chore(cpp): add v3 server --- test-server/cpp-v2-server/main.cpp | 8 +- test-server/cpp-v3-server/CMakeLists.txt | 39 +++ test-server/cpp-v3-server/Makefile | 31 ++ test-server/cpp-v3-server/README.md | 37 +++ test-server/cpp-v3-server/main.cpp | 289 ++++++++++++++++++ .../amazon/encryption/s3/RoundTripTests.java | 4 +- 6 files changed, 403 insertions(+), 5 deletions(-) create mode 100644 test-server/cpp-v3-server/CMakeLists.txt create mode 100644 test-server/cpp-v3-server/Makefile create mode 100644 test-server/cpp-v3-server/README.md create mode 100644 test-server/cpp-v3-server/main.cpp diff --git a/test-server/cpp-v2-server/main.cpp b/test-server/cpp-v2-server/main.cpp index 869e617b..41e1daf5 100644 --- a/test-server/cpp-v2-server/main.cpp +++ b/test-server/cpp-v2-server/main.cpp @@ -267,18 +267,18 @@ MHD_Result request_handler(void *cls, struct MHD_Connection *connection, int main() { Aws::SDKOptions options; Aws::InitAPI(options); - + int port = 8085; struct MHD_Daemon *daemon = - MHD_start_daemon(MHD_USE_SELECT_INTERNALLY, 8085, NULL, NULL, + MHD_start_daemon(MHD_USE_SELECT_INTERNALLY, port, NULL, NULL, &request_handler, NULL, MHD_OPTION_END); if (!daemon) { - fprintf(stderr, "Failed to start server on port 8085\n"); + fprintf(stderr, "Failed to start server on port %d\n", port]); Aws::ShutdownAPI(options); return 1; } - fprintf(stderr, "Server running on port 8085\n"); + fprintf(stderr, "Server running on port %d\n", port); sleep(10000); MHD_stop_daemon(daemon); diff --git a/test-server/cpp-v3-server/CMakeLists.txt b/test-server/cpp-v3-server/CMakeLists.txt new file mode 100644 index 00000000..b282dbc4 --- /dev/null +++ b/test-server/cpp-v3-server/CMakeLists.txt @@ -0,0 +1,39 @@ +cmake_minimum_required(VERSION 3.16) +project(s3ec-cpp-v2-server) + +set(CMAKE_CXX_STANDARD 17) + +# Configure AWS SDK build options +set(BUILD_ONLY "kms;s3;s3-encryption" CACHE STRING "Build only KMS, S3, and S3-encryption components") +set(ENABLE_TESTING OFF CACHE BOOL "Disable testing") +set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build static libraries") + +# Add AWS SDK as subdirectory +add_subdirectory(aws-sdk-cpp) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(LIBMICROHTTPD REQUIRED libmicrohttpd) + +find_package(nlohmann_json REQUIRED) + +add_executable(s3ec-server main.cpp) + +target_include_directories(s3ec-server PRIVATE + ${LIBMICROHTTPD_INCLUDE_DIRS} + /opt/homebrew/include +) + +target_link_directories(s3ec-server PRIVATE + ${LIBMICROHTTPD_LIBRARY_DIRS} + /opt/homebrew/lib +) + +target_link_libraries(s3ec-server + ${LIBMICROHTTPD_LIBRARIES} + aws-cpp-sdk-core + aws-cpp-sdk-kms + aws-cpp-sdk-s3 + aws-cpp-sdk-s3-encryption + nlohmann_json::nlohmann_json + uuid +) \ No newline at end of file diff --git a/test-server/cpp-v3-server/Makefile b/test-server/cpp-v3-server/Makefile new file mode 100644 index 00000000..46a9fcb3 --- /dev/null +++ b/test-server/cpp-v3-server/Makefile @@ -0,0 +1,31 @@ +# Makefile for S3 Encryption Client Testing + +.PHONY: start-server stop-server wait-for-server + +PID_FILE := server.pid +PORT := 8085 + +build/s3ec-server: + brew install libmicrohttpd nlohmann-json ossp-uuid + git clone --recurse-submodules -b fire-egg-dev git@github.com:awslabs/aws-sdk-cpp-staging.git aws-sdk-cpp + cd aws-sdk-cpp + mkdir -p build && cd build && cmake .. + +start-server: | build/s3ec-server + @echo "Starting Cpp V2 server..." + cd build && make && \ + AWS_ACCESS_KEY_ID="$$AWS_ACCESS_KEY_ID" \ + AWS_SECRET_ACCESS_KEY="$$AWS_SECRET_ACCESS_KEY" \ + AWS_SESSION_TOKEN="$$AWS_SESSION_TOKEN" \ + AWS_REGION="us-west-2" \ + ./s3ec-server & echo $$! > $(PID_FILE) + @echo "Cpp V2 server starting..." + +stop-server: + @if [ -f $(PID_FILE) ]; then \ + kill $$(cat $(PID_FILE)) 2>/dev/null || true; \ + rm $(PID_FILE); \ + fi + +wait-for-server: + $(MAKE) -C .. wait-for-port PORT=$(PORT) diff --git a/test-server/cpp-v3-server/README.md b/test-server/cpp-v3-server/README.md new file mode 100644 index 00000000..8e77feda --- /dev/null +++ b/test-server/cpp-v3-server/README.md @@ -0,0 +1,37 @@ +# C++ S3 Encryption Test Server + +Minimal C++ implementation of the S3 Encryption test server. + +## Dependencies + +- libmicrohttpd +- AWS SDK for C++ +- nlohmann/json +- uuid + +On MacOS you can +```bash +brew install libmicrohttpd nlohmann-json ossp-uuid +``` + +## Build + +```bash +mkdir build && cd build +cmake .. +make +``` + +## Run + +```bash +./s3ec-server +``` + +Server runs on localhost:8085 + +## API Endpoints + +- `POST /client` - Create S3 encryption client +- `GET /object/{bucket}/{key}` - Get encrypted object +- `PUT /object/{bucket}/{key}` - Put encrypted object \ No newline at end of file diff --git a/test-server/cpp-v3-server/main.cpp b/test-server/cpp-v3-server/main.cpp new file mode 100644 index 00000000..b09fc56b --- /dev/null +++ b/test-server/cpp-v3-server/main.cpp @@ -0,0 +1,289 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +using json = nlohmann::json; +using namespace Aws::S3Encryption; +using Aws::S3Encryption::Materials::KMSWithContextEncryptionMaterials; +std::unordered_map> + client_cache; + +std::string generate_uuid() { + uuid_t uuid; + uuid_generate(uuid); + char uuid_str[37]; + uuid_unparse(uuid, uuid_str); + return std::string(uuid_str); +} + +std::string get_header_value(struct MHD_Connection *connection, + const char *key) { + const char *value = + MHD_lookup_connection_value(connection, MHD_HEADER_KIND, key); + return value ? std::string(value) : ""; +} + +MHD_Result send_response(struct MHD_Connection *connection, int status_code, + const std::string &content) { + struct MHD_Response *response = MHD_create_response_from_buffer( + content.length(), (void *)content.data(), MHD_RESPMEM_MUST_COPY); + MHD_Result ret = MHD_queue_response(connection, status_code, response); + MHD_destroy_response(response); + return ret; +} + +std::string make_error(const std::string &message, int status_code) { + return "{\"__type\": " + "\"software.amazon.encryption.s3#S3EncryptionClientError\", " + "\"message\": \"" + + message + "\"}"; +} + +MHD_Result handle_create_client(struct MHD_Connection *connection, + const std::string &body) { + try { + json request = json::parse(body); + std::string kms_key_id = request["config"]["keyMaterial"]["kmsKeyId"]; + bool legacy = request["config"]["enableLegacyWrappingAlgorithms"]; + + auto materials = + std::make_shared(kms_key_id); + CryptoConfigurationV2 config(materials); + if (legacy) { + config.SetSecurityProfile(SecurityProfile::V2_AND_LEGACY); + } else { + config.SetSecurityProfile(SecurityProfile::V2); + } + + auto encryption_client = std::make_shared(config); + + std::string client_id = generate_uuid(); + client_cache[client_id] = encryption_client; + + json response = {{"clientId", client_id}}; + return send_response(connection, 200, response.dump()); + } catch (const std::exception &e) { + return send_response(connection, 500, + "{\"error\":\"An exception was thrown.\"}"); + } catch (...) { + return send_response(connection, 500, "{\"error\":\"Unknown error\"}"); + } +} + +void fill_context(Aws::Map &map, + const std::string &metadata) { + if (metadata.empty()) { + return; + } + + // Parse metadata format: [key1]:[value1],[key2]:[value2],... + // or single pair: [key]:[value] + std::string current = metadata; + size_t pos = 0; + + while (pos < current.length()) { + // Find opening bracket for key + size_t key_start = current.find('[', pos); + if (key_start == std::string::npos) + break; + + // Find closing bracket for key + size_t key_end = current.find(']', key_start); + if (key_end == std::string::npos) + break; + + // Find colon separator + size_t colon = current.find(':', key_end); + if (colon == std::string::npos) + break; + + // Find opening bracket for value + size_t value_start = current.find('[', colon); + if (value_start == std::string::npos) + break; + + // Find closing bracket for value + size_t value_end = current.find(']', value_start); + if (value_end == std::string::npos) + break; + + // Extract key and value + std::string key = current.substr(key_start + 1, key_end - key_start - 1); + std::string value = + current.substr(value_start + 1, value_end - value_start - 1); + + // Add to map + map.emplace(key, value); + + // Move to next pair (look for comma or next opening bracket) + pos = value_end + 1; + size_t comma = current.find(',', pos); + if (comma != std::string::npos) { + pos = comma + 1; + } + } +} + +MHD_Result handle_get_object(struct MHD_Connection *connection, + const std::string &bucket, const std::string &key, + const std::string &client_id, + const std::string &metadata) { + auto it = client_cache.find(client_id); + if (it == client_cache.end()) { + return send_response(connection, 404, "{\"error\":\"Client not found\"}"); + } + + try { + Aws::S3::Model::GetObjectRequest request; + request.SetBucket(bucket); + request.SetKey(key); + + // S3EncryptionGetObjectOutcome outcome ; + // if (metadata.empty()) { + // outcome = it->second->GetObject(request); + // } else { + // Aws::Map kmsContextMap; + // fill_context(kmsContextMap, metadata); + // outcome = it->second->GetObject(request, kmsContextMap); + // } + + Aws::Map kmsContextMap; + fill_context(kmsContextMap, metadata); + auto outcome = it->second->GetObject(request, kmsContextMap); + + if (outcome.IsSuccess()) { + auto &stream = outcome.GetResult().GetBody(); + std::string content((std::istreambuf_iterator(stream)), + std::istreambuf_iterator()); + return send_response(connection, 200, content); + } else { + auto msg = make_error(outcome.GetError().GetMessage(), 500); + return send_response(connection, 500, msg); + } + } catch (const std::exception &e) { + auto msg = make_error("An exception was thrown", 500); + return send_response(connection, 500, msg); + } +} + +MHD_Result handle_put_object(struct MHD_Connection *connection, + const std::string &bucket, const std::string &key, + const std::string &client_id, + const std::string &body, + const std::string &metadata) { + auto it = client_cache.find(client_id); + if (it == client_cache.end()) { + return send_response(connection, 404, "{\"error\":\"Client not found\"}"); + } + + try { + Aws::Map kmsContextMap; + fill_context(kmsContextMap, metadata); + + Aws::S3::Model::PutObjectRequest request; + request.SetBucket(bucket); + request.SetKey(key); + + auto stream = std::make_shared(body); + request.SetBody(stream); + + auto outcome = it->second->PutObject(request, kmsContextMap); + if (outcome.IsSuccess()) { + json response = {{"bucket", bucket}, {"key", key}}; + return send_response(connection, 200, response.dump()); + } else { + auto msg = make_error(outcome.GetError().GetMessage(), 500); + return send_response(connection, 500, msg); + } + } catch (const std::exception &e) { + auto msg = make_error(e.what(), 500); + return send_response(connection, 500, msg); + } +} + +MHD_Result request_handler(void *cls, struct MHD_Connection *connection, + const char *url, const char *method, + const char *version, const char *upload_data, + size_t *upload_data_size, void **con_cls) { + std::string method_str(method); + bool is_push = method_str == "POST" || method_str == "PUT"; + static int dummy; + if (*con_cls == nullptr) { + if (is_push) { + *con_cls = new std::string(); + } else { + *con_cls = &dummy; + } + return MHD_YES; + } + if (is_push && *upload_data_size) { + std::string *body = static_cast(*con_cls); + body->append(upload_data, *upload_data_size); + *upload_data_size = 0; + return MHD_YES; + } + + std::string url_str(url); + + if (is_push && url_str == "/client") { + std::unique_ptr body(static_cast(*con_cls)); + return handle_create_client(connection, *body); + } + + if (url_str.find("/object/") == 0) { + std::string path = url_str.substr(8); // Remove "/object/" + size_t slash_pos = path.find('/'); + if (slash_pos != std::string::npos) { + std::string bucket = path.substr(0, slash_pos); + std::string key = path.substr(slash_pos + 1); + std::string client_id = get_header_value(connection, "clientid"); + + std::string metadata = get_header_value(connection, "content-metadata"); + if (method_str == "GET") { + return handle_get_object(connection, bucket, key, client_id, metadata); + } else if (method_str == "PUT") { + std::unique_ptr body(static_cast(*con_cls)); + *upload_data_size = 0; + return handle_put_object(connection, bucket, key, client_id, *body, metadata); + } + } + } + + return send_response(connection, 404, + "{\"error\":\"Not idea what is happening\"}"); +} + +int main() { + Aws::SDKOptions options; + Aws::InitAPI(options); + int port = 8091; + + struct MHD_Daemon *daemon = + MHD_start_daemon(MHD_USE_SELECT_INTERNALLY, port, NULL, NULL, + &request_handler, NULL, MHD_OPTION_END); + + if (!daemon) { + fprintf(stderr, "Failed to start server on port %d\n", port); + Aws::ShutdownAPI(options); + return 1; + } + + fprintf(stderr, "Server running on port %d\n", port); + sleep(10000); + + MHD_stop_daemon(daemon); + Aws::ShutdownAPI(options); + fprintf(stderr, "Ending server\n"); + return 0; +} diff --git a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/RoundTripTests.java b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/RoundTripTests.java index cd67f2e0..893ab41b 100644 --- a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/RoundTripTests.java +++ b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/RoundTripTests.java @@ -61,6 +61,7 @@ public class RoundTripTests { private static final String PYTHON_V3 = "Python-V3"; private static final String GO_V3 = "Go-V3"; private static final String CPP_V2 = "CPP-V2"; + private static final String CPP_V3 = "CPP-V3"; private static final String NET_V2 = "NET-V2"; private static final String NET_V3 = "NET-V3"; private static final String PHP_V2 = "PHP-V2"; @@ -84,6 +85,7 @@ public class RoundTripTests { servers.put(NET_V2, new LanguageServerTarget(NET_V2, "8083")); servers.put(NET_V3, new LanguageServerTarget(NET_V3, "8084")); servers.put(CPP_V2, new LanguageServerTarget(CPP_V2, "8085")); + servers.put(CPP_V3, new LanguageServerTarget(CPP_V3, "8091")); servers.put(PHP_V2, new LanguageServerTarget(PHP_V2, "8087")); servers.put(PHP_V3, new LanguageServerTarget(PHP_V3, "8093")); servers.put(RUBY_V2, new LanguageServerTarget(RUBY_V2, "8086")); @@ -559,7 +561,7 @@ public void kmsV1LegacyFailsWhenLegacyDisabled(String language) { .build()); fail("Expected Exception"); } catch (S3EncryptionClientError e) { - if (language.equals(NET_V3) || language.equals(NET_V2) || language.equals(CPP_V2)) { + if (language.equals(NET_V3) || language.equals(NET_V2) || language.equals(CPP_V2) || language.equals(CPP_V3)) { assertTrue(e.getMessage().contains( "The requested object is encrypted with V1 encryption schemas that have been disabled by client configuration" )); From f4bb4b741cf18db4c9c5879ce7ce36018c6f5aba Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Fri, 26 Sep 2025 12:31:22 -0400 Subject: [PATCH 02/27] m --- .../src/it/java/software/amazon/encryption/s3/TestUtils.java | 2 ++ 1 file changed, 2 insertions(+) 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 2e78d9e5..2bb4eee6 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 @@ -35,6 +35,7 @@ public class TestUtils { public static final String PYTHON_V3 = "Python-V3"; public static final String GO_V3 = "Go-V3"; public static final String CPP_V2 = "CPP-V2"; + public static final String CPP_V3 = "CPP-V3"; public static final String NET_V2 = "NET-V2"; public static final String NET_V3 = "NET-V3"; public static final String PHP_V2 = "PHP-V2"; @@ -66,6 +67,7 @@ public class TestUtils { servers.put(NET_V2, new LanguageServerTarget(NET_V2, "8083")); servers.put(NET_V3, new LanguageServerTarget(NET_V3, "8084")); servers.put(CPP_V2, new LanguageServerTarget(CPP_V2, "8085")); + servers.put(CPP_V3, new LanguageServerTarget(CPP_V3, "8091")); servers.put(PHP_V2, new LanguageServerTarget(PHP_V2, "8087")); servers.put(PHP_V3, new LanguageServerTarget(PHP_V3, "8093")); servers.put(RUBY_V2, new LanguageServerTarget(RUBY_V2, "8086")); From 9c22750370b0fc7ff5af70ddfe2c9b1a5f4e2fb7 Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Fri, 26 Sep 2025 16:31:14 -0400 Subject: [PATCH 03/27] m --- .github/workflows/test.yml | 11 ++++++++++- test-server/Makefile | 3 ++- test-server/cpp-v3-server/Makefile | 1 - 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 49b125ef..3e8cda29 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,10 +19,19 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: submodules: true token: ${{ secrets.PAT_FOR_PRIVATE_RUBY }} + + - name: Checkout CPP code + uses: actions/checkout@v5 + with: + submodules: true + token: ${{ secrets.PAT_FOR_CPP }} + repository: awslabs/aws-sdk-cpp-staging + ref: fire-egg-dev + path: test-server/cpp-v3-server/aws-sdk-cpp/ - name: Set up Python uses: actions/setup-python@v5 diff --git a/test-server/Makefile b/test-server/Makefile index f23b738d..dd95d2da 100644 --- a/test-server/Makefile +++ b/test-server/Makefile @@ -8,7 +8,8 @@ all: start-servers run-tests # CI target for GitHub Actions ci: start-servers run-tests stop-servers -SERVER_DIRS := $(shell find . -maxdepth 1 -type d -name '*-server' | sed 's|^\./||' | sort) +# SERVER_DIRS := $(shell find . -maxdepth 1 -type d -name '*-server' | sed 's|^\./||' | sort) +SERVER_DIRS := cpp-v3-server START_SERVER_TARGETS := $(addprefix start-, $(SERVER_DIRS)) WAIT_SERVER_TARGETS := $(addprefix wait-, $(SERVER_DIRS)) diff --git a/test-server/cpp-v3-server/Makefile b/test-server/cpp-v3-server/Makefile index 46a9fcb3..c641ed0a 100644 --- a/test-server/cpp-v3-server/Makefile +++ b/test-server/cpp-v3-server/Makefile @@ -7,7 +7,6 @@ PORT := 8085 build/s3ec-server: brew install libmicrohttpd nlohmann-json ossp-uuid - git clone --recurse-submodules -b fire-egg-dev git@github.com:awslabs/aws-sdk-cpp-staging.git aws-sdk-cpp cd aws-sdk-cpp mkdir -p build && cd build && cmake .. From f52c5ec3dce5fd1724a4ede599f1e34e8d9c6d5b Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Fri, 26 Sep 2025 16:43:30 -0400 Subject: [PATCH 04/27] m --- test-server/Makefile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test-server/Makefile b/test-server/Makefile index dd95d2da..f23b738d 100644 --- a/test-server/Makefile +++ b/test-server/Makefile @@ -8,8 +8,7 @@ all: start-servers run-tests # CI target for GitHub Actions ci: start-servers run-tests stop-servers -# SERVER_DIRS := $(shell find . -maxdepth 1 -type d -name '*-server' | sed 's|^\./||' | sort) -SERVER_DIRS := cpp-v3-server +SERVER_DIRS := $(shell find . -maxdepth 1 -type d -name '*-server' | sed 's|^\./||' | sort) START_SERVER_TARGETS := $(addprefix start-, $(SERVER_DIRS)) WAIT_SERVER_TARGETS := $(addprefix wait-, $(SERVER_DIRS)) From 04a960acab18c28008bba4ec6eb179c214412f4a Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Sat, 27 Sep 2025 08:43:31 -0400 Subject: [PATCH 05/27] m --- test-server/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test-server/Makefile b/test-server/Makefile index f23b738d..dd95d2da 100644 --- a/test-server/Makefile +++ b/test-server/Makefile @@ -8,7 +8,8 @@ all: start-servers run-tests # CI target for GitHub Actions ci: start-servers run-tests stop-servers -SERVER_DIRS := $(shell find . -maxdepth 1 -type d -name '*-server' | sed 's|^\./||' | sort) +# SERVER_DIRS := $(shell find . -maxdepth 1 -type d -name '*-server' | sed 's|^\./||' | sort) +SERVER_DIRS := cpp-v3-server START_SERVER_TARGETS := $(addprefix start-, $(SERVER_DIRS)) WAIT_SERVER_TARGETS := $(addprefix wait-, $(SERVER_DIRS)) From 7c67bae3851b527f773690b26cdff9bf16c8e548 Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Sat, 27 Sep 2025 09:29:39 -0400 Subject: [PATCH 06/27] m --- test-server/cpp-v3-server/Makefile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test-server/cpp-v3-server/Makefile b/test-server/cpp-v3-server/Makefile index c641ed0a..de4a319c 100644 --- a/test-server/cpp-v3-server/Makefile +++ b/test-server/cpp-v3-server/Makefile @@ -8,6 +8,11 @@ PORT := 8085 build/s3ec-server: brew install libmicrohttpd nlohmann-json ossp-uuid cd aws-sdk-cpp + ls crt + ls crt/aws-crt-cpp/ + ls crt/aws-crt-cpp/crt/aws-c-common/ + ls crt/aws-crt-cpp/crt/aws-c-common/cmake/ + ls crt/aws-crt-cpp/crt/aws-c-common/cmake/AwsFindPackage.cmake mkdir -p build && cd build && cmake .. start-server: | build/s3ec-server From 5879cb8700fc8b4ade18aea9f2b647a8567b7d41 Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Sat, 27 Sep 2025 10:36:07 -0400 Subject: [PATCH 07/27] m --- test-server/cpp-v3-server/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/test-server/cpp-v3-server/Makefile b/test-server/cpp-v3-server/Makefile index de4a319c..1d72c048 100644 --- a/test-server/cpp-v3-server/Makefile +++ b/test-server/cpp-v3-server/Makefile @@ -8,6 +8,7 @@ PORT := 8085 build/s3ec-server: brew install libmicrohttpd nlohmann-json ossp-uuid cd aws-sdk-cpp + pwd ls crt ls crt/aws-crt-cpp/ ls crt/aws-crt-cpp/crt/aws-c-common/ From 5c7601708cb23bcdd51e2e2301e6d150f144d902 Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Sat, 27 Sep 2025 10:36:24 -0400 Subject: [PATCH 08/27] m --- test-server/cpp-v3-server/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/test-server/cpp-v3-server/Makefile b/test-server/cpp-v3-server/Makefile index 1d72c048..3f21cf12 100644 --- a/test-server/cpp-v3-server/Makefile +++ b/test-server/cpp-v3-server/Makefile @@ -9,6 +9,7 @@ build/s3ec-server: brew install libmicrohttpd nlohmann-json ossp-uuid cd aws-sdk-cpp pwd + ls ls crt ls crt/aws-crt-cpp/ ls crt/aws-crt-cpp/crt/aws-c-common/ From f541357ecef2040d9a54c83576ca17aec4163d77 Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Sat, 27 Sep 2025 11:03:30 -0400 Subject: [PATCH 09/27] m --- test-server/cpp-v2-server/Makefile | 2 +- test-server/cpp-v3-server/Makefile | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/test-server/cpp-v2-server/Makefile b/test-server/cpp-v2-server/Makefile index ad5c951e..9e0f04b1 100644 --- a/test-server/cpp-v2-server/Makefile +++ b/test-server/cpp-v2-server/Makefile @@ -8,7 +8,7 @@ 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 + cd aws-sdk-cpp 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 3f21cf12..fb5367e3 100644 --- a/test-server/cpp-v3-server/Makefile +++ b/test-server/cpp-v3-server/Makefile @@ -7,14 +7,13 @@ PORT := 8085 build/s3ec-server: brew install libmicrohttpd nlohmann-json ossp-uuid - cd aws-sdk-cpp pwd - ls - ls crt - ls crt/aws-crt-cpp/ - ls crt/aws-crt-cpp/crt/aws-c-common/ - ls crt/aws-crt-cpp/crt/aws-c-common/cmake/ - ls crt/aws-crt-cpp/crt/aws-c-common/cmake/AwsFindPackage.cmake + ls aws-sdk-cpp/ + ls aws-sdk-cpp/crt + ls aws-sdk-cpp/crt/aws-crt-cpp/ + ls aws-sdk-cpp/crt/aws-crt-cpp/crt/aws-c-common/ + ls aws-sdk-cpp/crt/aws-crt-cpp/crt/aws-c-common/cmake/ + ls aws-sdk-cpp/crt/aws-crt-cpp/crt/aws-c-common/cmake/AwsFindPackage.cmake mkdir -p build && cd build && cmake .. start-server: | build/s3ec-server From 0f1937863a4f4e87c93e3c9a4897f9263d76929a Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Sat, 27 Sep 2025 11:19:04 -0400 Subject: [PATCH 10/27] m --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 78213ada..fd2b2916 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -27,7 +27,7 @@ jobs: - name: Checkout CPP code uses: actions/checkout@v5 with: - submodules: true + submodules: recursive token: ${{ secrets.PAT_FOR_CPP }} repository: awslabs/aws-sdk-cpp-staging ref: fire-egg-dev From a306717ea6cd269ae633f2fe3efff3dca7a1bd81 Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Sat, 27 Sep 2025 12:30:46 -0400 Subject: [PATCH 11/27] m --- test-server/Makefile | 4 ++-- test-server/cpp-v3-server/Makefile | 9 +-------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/test-server/Makefile b/test-server/Makefile index dd95d2da..82722d37 100644 --- a/test-server/Makefile +++ b/test-server/Makefile @@ -8,8 +8,8 @@ all: start-servers run-tests # CI target for GitHub Actions ci: start-servers run-tests stop-servers -# SERVER_DIRS := $(shell find . -maxdepth 1 -type d -name '*-server' | sed 's|^\./||' | sort) -SERVER_DIRS := cpp-v3-server +SERVER_DIRS := $(shell find . -maxdepth 1 -type d -name '*-server' | sed 's|^\./||' | sort) +# SERVER_DIRS := cpp-v3-server START_SERVER_TARGETS := $(addprefix start-, $(SERVER_DIRS)) WAIT_SERVER_TARGETS := $(addprefix wait-, $(SERVER_DIRS)) diff --git a/test-server/cpp-v3-server/Makefile b/test-server/cpp-v3-server/Makefile index fb5367e3..afbd490e 100644 --- a/test-server/cpp-v3-server/Makefile +++ b/test-server/cpp-v3-server/Makefile @@ -3,17 +3,10 @@ .PHONY: start-server stop-server wait-for-server PID_FILE := server.pid -PORT := 8085 +PORT := 8091 build/s3ec-server: brew install libmicrohttpd nlohmann-json ossp-uuid - pwd - ls aws-sdk-cpp/ - ls aws-sdk-cpp/crt - ls aws-sdk-cpp/crt/aws-crt-cpp/ - ls aws-sdk-cpp/crt/aws-crt-cpp/crt/aws-c-common/ - ls aws-sdk-cpp/crt/aws-crt-cpp/crt/aws-c-common/cmake/ - ls aws-sdk-cpp/crt/aws-crt-cpp/crt/aws-c-common/cmake/AwsFindPackage.cmake mkdir -p build && cd build && cmake .. start-server: | build/s3ec-server From dab4eea5313f9a315a6314b358b9f1bd23271a48 Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Mon, 29 Sep 2025 11:32:07 -0400 Subject: [PATCH 12/27] m --- test-server/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-server/Makefile b/test-server/Makefile index 82722d37..c873f7eb 100644 --- a/test-server/Makefile +++ b/test-server/Makefile @@ -57,7 +57,7 @@ run-tests: AWS_SECRET_ACCESS_KEY="$$AWS_SECRET_ACCESS_KEY" \ AWS_SESSION_TOKEN="$$AWS_SESSION_TOKEN" \ AWS_REGION="us-west-2" \ - ./gradlew --build-cache --parallel integ -Dtest.filter.servers="$(FILTER)" + ./gradlew --build-cache --info --parallel integ -Dtest.filter.servers="$(FILTER)" @echo "Tests completed successfully" # Stop the servers From 35ea9bf85a30621bfea40819b8a1bf70e8723b06 Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Mon, 29 Sep 2025 12:15:04 -0400 Subject: [PATCH 13/27] m --- test-server/cpp-v2-server/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-server/cpp-v2-server/main.cpp b/test-server/cpp-v2-server/main.cpp index 41e1daf5..9be401f8 100644 --- a/test-server/cpp-v2-server/main.cpp +++ b/test-server/cpp-v2-server/main.cpp @@ -273,7 +273,7 @@ int main() { &request_handler, NULL, MHD_OPTION_END); if (!daemon) { - fprintf(stderr, "Failed to start server on port %d\n", port]); + fprintf(stderr, "Failed to start server on port %d\n", port); Aws::ShutdownAPI(options); return 1; } From acde3c548999ff342c2faf8b4f0a177e199a6dbe Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Mon, 29 Sep 2025 13:50:34 -0400 Subject: [PATCH 14/27] m --- .github/workflows/test.yml | 2 +- .../CMakeLists.txt | 0 .../Makefile | 0 .../README.md | 0 .../main.cpp | 0 .../amazon/encryption/s3/RoundTripTests.java | 9 +- .../amazon/encryption/s3/TestUtils.java | 122 +++++++++++++++--- 7 files changed, 108 insertions(+), 25 deletions(-) rename test-server/{cpp-v3-server => cpp-v2-transition-server}/CMakeLists.txt (100%) rename test-server/{cpp-v3-server => cpp-v2-transition-server}/Makefile (100%) rename test-server/{cpp-v3-server => cpp-v2-transition-server}/README.md (100%) rename test-server/{cpp-v3-server => cpp-v2-transition-server}/main.cpp (100%) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fd2b2916..52c068ea 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -31,7 +31,7 @@ jobs: token: ${{ secrets.PAT_FOR_CPP }} repository: awslabs/aws-sdk-cpp-staging ref: fire-egg-dev - path: test-server/cpp-v3-server/aws-sdk-cpp/ + path: test-server/cpp-v2-transition-server/aws-sdk-cpp/ - name: Set up Python uses: actions/setup-python@v5 diff --git a/test-server/cpp-v3-server/CMakeLists.txt b/test-server/cpp-v2-transition-server/CMakeLists.txt similarity index 100% rename from test-server/cpp-v3-server/CMakeLists.txt rename to test-server/cpp-v2-transition-server/CMakeLists.txt diff --git a/test-server/cpp-v3-server/Makefile b/test-server/cpp-v2-transition-server/Makefile similarity index 100% rename from test-server/cpp-v3-server/Makefile rename to test-server/cpp-v2-transition-server/Makefile diff --git a/test-server/cpp-v3-server/README.md b/test-server/cpp-v2-transition-server/README.md similarity index 100% rename from test-server/cpp-v3-server/README.md rename to test-server/cpp-v2-transition-server/README.md diff --git a/test-server/cpp-v3-server/main.cpp b/test-server/cpp-v2-transition-server/main.cpp similarity index 100% rename from test-server/cpp-v3-server/main.cpp rename to test-server/cpp-v2-transition-server/main.cpp diff --git a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/RoundTripTests.java b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/RoundTripTests.java index 29120090..6a16ba7b 100644 --- a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/RoundTripTests.java +++ b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/RoundTripTests.java @@ -178,7 +178,7 @@ public void crossLanguageTestKmsWithSubsetEncCtxFails(LanguageServerTarget encLa .build()); fail("Expected exception!"); } catch (S3EncryptionClientError e) { - if (decLang.getLanguageName().equals(RUBY_V3) || decLang.getLanguageName().equals(RUBY_V2)) { + if (decLang.getLanguageName().equals(RUBY_V3) || decLang.getLanguageName().equals(RUBY_V2_CURRENT)) { assertTrue(e.getMessage().contains("Value of encryption context from envelope does not match the provided encryption context")); } else { assertTrue(e.getMessage().contains("Provided encryption context does not match information retrieved from S3")); @@ -234,7 +234,7 @@ public void crossLanguageTestKmsWithIncorrectEncCtxFails(LanguageServerTarget en .build()); fail("Expected exception!"); } catch (S3EncryptionClientError e) { - if (decLang.getLanguageName().equals(RUBY_V3) || decLang.getLanguageName().equals(RUBY_V2)) { + if (decLang.getLanguageName().equals(RUBY_V3) || decLang.getLanguageName().equals(RUBY_V2_CURRENT)) { assertTrue(e.getMessage().contains("Value of encryption context from envelope does not match the provided encryption context")); } else { assertTrue(e.getMessage().contains("Provided encryption context does not match information retrieved from S3")); @@ -374,11 +374,12 @@ public void kmsV1LegacyFailsWhenLegacyDisabled(String language) { .build()); fail("Expected Exception"); } catch (S3EncryptionClientError e) { - if (language.equals(NET_V3) || language.equals(NET_V2) || language.equals(CPP_V2) || language.equals(CPP_V3)) { + if (language.equals(NET_V3) || language.equals(NET_V2_CURRENT) + || language.equals(CPP_V2_CURRENT) || language.equals(CPP_V2_TRANSITION) || language.equals(CPP_V3)) { assertTrue(e.getMessage().contains( "The requested object is encrypted with V1 encryption schemas that have been disabled by client configuration" )); - } else if (language.equals(RUBY_V3) || language.equals(RUBY_V2)) { + } else if (language.equals(RUBY_V3) || language.equals(RUBY_V2_CURRENT)) { assertTrue(e.getMessage().contains("The requested object is encrypted with V1 encryption schemas that have been disabled by client configuration security_profile = :v2. Retry with :v2_and_legacy or re-encrypt the object.")); } else { assertTrue(e.getMessage().contains("Enable legacy wrapping algorithms to use legacy key wrapping algorithm: kms")); 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 2bb4eee6..80939d0f 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 @@ -30,19 +30,40 @@ import software.amazon.smithy.java.http.api.HttpResponse; public class TestUtils { - // Language constants - public static final String JAVA_V3 = "Java-V3"; + + // Version name constants + // Each language can have up to 3 versions: + // vN-Current: Currently released version. Does not support setting commitment policy. + // vN-Transition: Proposed feature release version. Supports reading messages encrypted with key commitment. + // vN+1: Proposed breaking release version. Supports reading/writing messages encrypted with key commitment. + + public static final String JAVA_V3_CURRENT = "Java-V3-Current"; + public static final String JAVA_V3_TRANSITION = "Java-V3-Transition"; + public static final String JAVA_V4 = "Java-V4"; + + // No Python S3EC versions are released. Only test V3 as the "vN+1" version. public static final String PYTHON_V3 = "Python-V3"; - public static final String GO_V3 = "Go-V3"; - public static final String CPP_V2 = "CPP-V2"; - public static final String CPP_V3 = "CPP-V3"; - public static final String NET_V2 = "NET-V2"; + + public static final String GO_V3_CURRENT = "Go-V3-Current"; + public static final String GO_V3_TRANSITION = "Go-V3-Transition"; + public static final String GO_V4 = "Go-V4"; + + public static final String NET_V2_CURRENT = "NET-V2-Current"; + public static final String NET_V2_TRANSITION = "NET-V2-Transition"; public static final String NET_V3 = "NET-V3"; - public static final String PHP_V2 = "PHP-V2"; - public static final String PHP_V3 = "PHP-V3"; - public static final String RUBY_V2 = "Ruby-V2"; + + public static final String CPP_V2_CURRENT = "CPP-V2-Current"; + public static final String CPP_V2_TRANSITION = "CPP-V2-Transition"; + public static final String CPP_V3 = "CPP-V3"; + + public static final String RUBY_V2_CURRENT = "Ruby-V2-Current"; + public static final String RUBY_V2_TRANSITION = "Ruby-V2-Transition"; public static final String RUBY_V3 = "Ruby-V3"; - + + public static final String PHP_V2_CURRENT = "PHP-V2-Current"; + public static final String PHP_V2_TRANSITION = "PHP-V2-Transition"; + public static final String PHP_V3 = "PHP-V3"; + // Test configuration constants public static final String KMS_KEY_ARN = System.getenv("TEST_SERVER_KMS_KEY_ARN") != null ? System.getenv("TEST_SERVER_KMS_KEY_ARN") : "arn:aws:kms:us-west-2:370957321024:alias/S3EC-Test-Server-Github-KMS-Key"; @@ -52,26 +73,63 @@ public class TestUtils { // Sets of unsupported features by language public static final Set ENCRYPTION_CONTEXT_ON_DECRYPT_UNSUPPORTED = - Set.of(GO_V3, PHP_V2, PHP_V3, NET_V2, NET_V3); + Set.of(GO_V3_CURRENT, PHP_V2_CURRENT, PHP_V3, NET_V2_CURRENT, NET_V3); public static final Set ENCRYPTION_CONTEXT_ON_ENCRYPT_UNSUPPORTED = - Set.of(NET_V2, NET_V3); + Set.of(NET_V2_CURRENT, NET_V3); + + public static final Set CURRENT_VERSIONS = + Set.of( + JAVA_V3_CURRENT, + GO_V3_CURRENT, + NET_V2_CURRENT, + CPP_V2_CURRENT, + RUBY_V2_CURRENT, + PHP_V2_CURRENT + ); + + public static final Set TRANSITION_VERSIONS = + Set.of( + JAVA_V3_TRANSITION, + GO_V3_TRANSITION, + NET_V2_TRANSITION, + CPP_V2_TRANSITION, + RUBY_V2_TRANSITION, + PHP_V2_TRANSITION + ); + + public static final Set IMPROVED_VERSIONS = + Set.of( + JAVA_V4, + PYTHON_V3, + GO_V4, + NET_V3, + CPP_V3, + RUBY_V3, + PHP_V3 + ); private static final Map serverMap; static { final Map servers = new LinkedHashMap<>(); - servers.put(JAVA_V3, new LanguageServerTarget(JAVA_V3, "8080")); + servers.put(JAVA_V3_CURRENT, new LanguageServerTarget(JAVA_V3_CURRENT, "8080")); servers.put(PYTHON_V3, new LanguageServerTarget(PYTHON_V3, "8081")); - servers.put(GO_V3, new LanguageServerTarget(GO_V3, "8082")); - servers.put(NET_V2, new LanguageServerTarget(NET_V2, "8083")); + servers.put(GO_V3_CURRENT, new LanguageServerTarget(GO_V3_CURRENT, "8082")); + servers.put(NET_V2_CURRENT, new LanguageServerTarget(NET_V2_CURRENT, "8083")); servers.put(NET_V3, new LanguageServerTarget(NET_V3, "8084")); - servers.put(CPP_V2, new LanguageServerTarget(CPP_V2, "8085")); - servers.put(CPP_V3, new LanguageServerTarget(CPP_V3, "8091")); - servers.put(PHP_V2, new LanguageServerTarget(PHP_V2, "8087")); - servers.put(PHP_V3, new LanguageServerTarget(PHP_V3, "8093")); - servers.put(RUBY_V2, new LanguageServerTarget(RUBY_V2, "8086")); + servers.put(CPP_V2_CURRENT, new LanguageServerTarget(CPP_V2_CURRENT, "8085")); + servers.put(RUBY_V2_CURRENT, new LanguageServerTarget(RUBY_V2_CURRENT, "8086")); + servers.put(PHP_V2_CURRENT, new LanguageServerTarget(PHP_V2_CURRENT, "8087")); servers.put(RUBY_V3, new LanguageServerTarget(RUBY_V3, "8092")); + servers.put(PHP_V3, new LanguageServerTarget(PHP_V3, "8093")); + // TODO: Create and add transition servers + // servers.put(JAVA_V3_TRANSITION, new LanguageServerTarget(JAVA_V3_TRANSITION, "8094")); + // servers.put(GO_V3_TRANSITION, new LanguageServerTarget(GO_V3_TRANSITION, "8095")); + // servers.put(NET_V2_TRANSITION, new LanguageServerTarget(NET_V2_TRANSITION, "8096")); + servers.put(CPP_V2_TRANSITION, new LanguageServerTarget(CPP_V2_TRANSITION, "8097")); + // servers.put(RUBY_V2_TRANSITION, new LanguageServerTarget(RUBY_V2_TRANSITION, "8098")); + // servers.put(PHP_V2_TRANSITION, new LanguageServerTarget(PHP_V2_TRANSITION, "8099")); serverMap = filterServers(servers); } @@ -223,6 +281,30 @@ public static Stream clientsForTest() { .map(Arguments::of); } + /** + * Get stream of arguments for current version clients for testing. + */ + public static Stream currentClientsForTest() { + return clientsForTest() + .filter(arg -> CURRENT_VERSIONS.contains(arg.get()[0])); + } + + /** + * Get stream of arguments for transition version clients for testing. + */ + public static Stream transitionClientsForTest() { + return clientsForTest() + .filter(arg -> TRANSITION_VERSIONS.contains(arg.get()[0])); + } + + /** + * Get stream of arguments for improved version clients for testing. + */ + public static Stream improvedClientsForTest() { + return clientsForTest() + .filter(arg -> IMPROVED_VERSIONS.contains(arg.get()[0])); + } + /** * Provides a stream of arguments for parameterized tests that test cross-language compatibility * @return Stream of Arguments containing pairs of LanguageServerTarget for encryption and decryption From b3e19793fa7ebcfb9f11a6bde6aaadcae3a2e3a5 Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Mon, 29 Sep 2025 14:09:24 -0400 Subject: [PATCH 15/27] m --- test-server/cpp-v2-transition-server/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-server/cpp-v2-transition-server/main.cpp b/test-server/cpp-v2-transition-server/main.cpp index b09fc56b..32735d60 100644 --- a/test-server/cpp-v2-transition-server/main.cpp +++ b/test-server/cpp-v2-transition-server/main.cpp @@ -267,7 +267,7 @@ MHD_Result request_handler(void *cls, struct MHD_Connection *connection, int main() { Aws::SDKOptions options; Aws::InitAPI(options); - int port = 8091; + int port = 8097; struct MHD_Daemon *daemon = MHD_start_daemon(MHD_USE_SELECT_INTERNALLY, port, NULL, NULL, From 2e6c0f2a7a6f087abd12a64df5d39a76370bda3f Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Mon, 29 Sep 2025 16:18:12 -0400 Subject: [PATCH 16/27] m --- .github/workflows/test.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1ac8f941..b41cf1ee 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -80,8 +80,6 @@ jobs: uses: actions/cache@v3 with: path: | - ~/.gradle/caches - ~/.gradle/wrapper test-server/java-v3-server/.gradle test-server/java-tests/.gradle key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} From 31f1cbdaaa2fa61ac57610ca0fdf5000cb608699 Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Mon, 29 Sep 2025 16:21:18 -0400 Subject: [PATCH 17/27] m --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b41cf1ee..b3b8b705 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -77,7 +77,7 @@ jobs: # Cache Gradle dependencies and build outputs - name: Cache Gradle packages - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | test-server/java-v3-server/.gradle From d3d1e5254e2da62a923eec7a45c0ed23fa459696 Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Mon, 29 Sep 2025 17:02:43 -0400 Subject: [PATCH 18/27] m --- test-server/cpp-v2-transition-server/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-server/cpp-v2-transition-server/Makefile b/test-server/cpp-v2-transition-server/Makefile index afbd490e..05803c78 100644 --- a/test-server/cpp-v2-transition-server/Makefile +++ b/test-server/cpp-v2-transition-server/Makefile @@ -3,7 +3,7 @@ .PHONY: start-server stop-server wait-for-server PID_FILE := server.pid -PORT := 8091 +PORT := 8097 build/s3ec-server: brew install libmicrohttpd nlohmann-json ossp-uuid From f4950a39ed461159151d26c20f12a0cc0ee87fe5 Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Mon, 29 Sep 2025 17:03:38 -0400 Subject: [PATCH 19/27] m --- test-server/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test-server/Makefile b/test-server/Makefile index c873f7eb..7fd66285 100644 --- a/test-server/Makefile +++ b/test-server/Makefile @@ -107,7 +107,7 @@ wait-for-port: exit 1; \ fi; \ echo "Waiting for $$PORT to start ($$i/$(TIMEOUT))..."; \ - sleep 1; \ + sleep 3; \ done # Here are some helpful curl commands @@ -118,4 +118,4 @@ test-create-client: -H "Content-Type: application/json" \ -H "User-Agent: smithy-java/0.0.3 ua/2.1 os/macos#15.5 lang/java#23.0.2" \ -d '{"config":{"enableLegacyUnauthenticatedModes":false,"enableDelayedAuthenticationMode":false,"enableLegacyWrappingAlgorithms":false,"keyMaterial":{"kmsKeyId":"arn:aws:kms:us-west-2:370957321024:alias/S3EC-Test-Server-Github-KMS-Key"}}}' \ - http://localhost:$(PORT)/client \ No newline at end of file + http://localhost:$(PORT)/client From 4f0fdaa1f0d2f2d0cd5bcaf487a49f5d1ad246af Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Tue, 30 Sep 2025 07:40:24 -0400 Subject: [PATCH 20/27] m --- .github/workflows/test.yml | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b3b8b705..6db9866b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -76,15 +76,17 @@ jobs: run: pip install uv # Cache Gradle dependencies and build outputs - - name: Cache Gradle packages - uses: actions/cache@v4 - with: - path: | - test-server/java-v3-server/.gradle - test-server/java-tests/.gradle - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- + # - name: Cache Gradle packages + # uses: actions/cache@v4 + # with: + # path: | + # ~/.gradle/caches + # ~/.gradle/wrapper + # test-server/java-v3-server/.gradle + # test-server/java-tests/.gradle + # key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + # restore-keys: | + # ${{ runner.os }}-gradle- - name: Install dependencies run: make install From 631937b4c614a892af7323a36b01f71ea1278da3 Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Tue, 30 Sep 2025 10:01:49 -0400 Subject: [PATCH 21/27] m --- .github/workflows/test.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6db9866b..d1fa4daf 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -76,17 +76,17 @@ jobs: run: pip install uv # Cache Gradle dependencies and build outputs - # - name: Cache Gradle packages - # uses: actions/cache@v4 - # with: - # path: | - # ~/.gradle/caches - # ~/.gradle/wrapper - # test-server/java-v3-server/.gradle - # test-server/java-tests/.gradle - # key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - # restore-keys: | - # ${{ runner.os }}-gradle- + - name: Cache Gradle packages + uses: actions/cache@v4 + with: + path: | + ~/.gradle/caches + ~/.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') }} + restore-keys: | + ${{ runner.os }}-gradle- - name: Install dependencies run: make install From 40fcdd5116df25918a7e5af15177f8ea12f34ca1 Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Tue, 30 Sep 2025 10:42:53 -0400 Subject: [PATCH 22/27] m --- .github/workflows/test.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d1fa4daf..3b1ba8a4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -45,6 +45,9 @@ jobs: - name: Set up PHP with Composer uses: shivammathur/setup-php@v2 + env: + runner: self-hosted + fail-fast: true with: php-version: '8.1' From 1baaccaec9d9be2b3bc43b07b99ef46872749ffa Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Tue, 30 Sep 2025 10:50:24 -0400 Subject: [PATCH 23/27] m --- .github/workflows/test.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3b1ba8a4..43dd3bc5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -46,7 +46,6 @@ jobs: - name: Set up PHP with Composer uses: shivammathur/setup-php@v2 env: - runner: self-hosted fail-fast: true with: php-version: '8.1' From b0c87dc1b63598490fa46eaeef0f5578c309684d Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Tue, 30 Sep 2025 11:01:01 -0400 Subject: [PATCH 24/27] m --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 43dd3bc5..c65c32fc 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -48,7 +48,7 @@ jobs: env: fail-fast: true with: - php-version: '8.1' + php-version: '8.4' - name: Install PHP V2 dependencies working-directory: ./test-server/php-v2-server From 770fb9e7e18eb7c8cb384f7998d751ea05198039 Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Tue, 30 Sep 2025 12:49:28 -0400 Subject: [PATCH 25/27] m --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c65c32fc..9162a31f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -44,7 +44,7 @@ jobs: ruby-version: '3.4' - name: Set up PHP with Composer - uses: shivammathur/setup-php@v2 + uses: shivammathur/setup-php@verbose env: fail-fast: true with: From 7d9308e27a7e7b298d93719beb80b6ffcd8cb9e6 Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Tue, 30 Sep 2025 13:51:30 -0400 Subject: [PATCH 26/27] m --- .github/workflows/test.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9162a31f..4aef8cde 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -45,10 +45,8 @@ jobs: - name: Set up PHP with Composer uses: shivammathur/setup-php@verbose - env: - fail-fast: true with: - php-version: '8.4' + php-version: '8.1' - name: Install PHP V2 dependencies working-directory: ./test-server/php-v2-server From cc83885ef7d224d0957a37abb8438b79fa741ad4 Mon Sep 17 00:00:00 2001 From: Andy Jewell Date: Tue, 30 Sep 2025 15:32:45 -0400 Subject: [PATCH 27/27] m --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4aef8cde..a07c9a96 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,7 +12,7 @@ on: jobs: test: - runs-on: macos-13 + runs-on: macos-14 permissions: id-token: write contents: read