Protocol Test Codegen – Manual Files
This directory contains hand-written Go source files that are copied into
internal/protocoltest/ after code generation. They supplement the
auto-generated protocol tests with cases that cannot be expressed through
Smithy protocol test traits.
How protocol test generation works
The build is driven by build.gradle.kts in the parent directory. Running
./gradlew :protocol-test-codegen:build executes the following task chain:
-
generate-smithy-build – Loads all Smithy service models from the
smithy-aws-protocol-tests / smithy-protocol-tests dependency JARs and
the local models/ directory. For each discovered service (minus those in
excludedServices) it writes a projection entry into smithy-build.json.
Projection and module names are derived automatically from the service shape
ID unless an explicit override is defined in the overrides map.
-
buildSdk – Runs Smithy Build with the generated smithy-build.json,
producing Go client code for every projection.
-
cleanProtocolTests – Deletes the entire internal/protocoltest/
directory so stale files from previous runs don't persist.
-
copyGoCodegen – Copies the freshly generated Go code into
internal/protocoltest/.
-
copyManualFiles – Copies everything under this manual/ directory into
internal/protocoltest/, overlaying the generated output.
Adding a manual file
Mirror the target path relative to internal/protocoltest/. For example, to
add a file that should end up at
internal/protocoltest/jsonrpc10/my_test.go, place it at:
manual/jsonrpc10/my_test.go
No build script changes are needed — the copyManualFiles task copies the
entire manual/ tree.