Skip to content

Commit 4f751e0

Browse files
test: add net v4 retry flag test vectors (#711)
Co-authored-by: Rishav karanjit <[email protected]>
1 parent 97dd65f commit 4f751e0

14 files changed

+332
-167
lines changed

Diff for: .github/workflows/daily_ci.yml

+12
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,15 @@ jobs:
3939
uses: ./.github/workflows/library_interop_tests.yml
4040
with:
4141
dafny: '4.9.0'
42+
43+
daily-dafny-test-vectors:
44+
if: github.event_name != 'schedule' || github.repository_owner == 'aws'
45+
uses: ./.github/workflows/library_interop_test_vectors.yml
46+
with:
47+
dafny: '4.9.0'
48+
49+
daily-dafny-legacy-test-vectors:
50+
if: github.event_name != 'schedule' || github.repository_owner == 'aws'
51+
uses: ./.github/workflows/library_legacy_interop_test_vectors.yml
52+
with:
53+
dafny: '4.9.0'

Diff for: .github/workflows/library_net_tests.yml

+77-117
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ jobs:
3030
strategy:
3131
fail-fast: false
3232
matrix:
33+
library: [AwsEncryptionSDK]
3334
os: [
3435
windows-latest,
3536
ubuntu-latest,
@@ -75,40 +76,30 @@ jobs:
7576
uses: ./.github/actions/polymorph_codegen
7677
with:
7778
dafny: ${{ env.DAFNY_VERSION }}
78-
library: AwsEncryptionSDK
79+
library: ${{ matrix.library }}
7980
diff-generated-code: false
8081
update-and-regenerate-mpl: true
8182

8283
- name: Download Dependencies
83-
working-directory: ./AwsEncryptionSDK
84+
working-directory: ${{ matrix.library }}
8485
run: make setup_net
8586

86-
- name: Compile AwsEncryptionSDK implementation
87+
- name: Compile ${{ matrix.library }} implementation
8788
shell: bash
88-
working-directory: ./AwsEncryptionSDK
89-
run: |
90-
# This works because `node` is installed by default on GHA runners
91-
CORES=$(node -e 'console.log(os.cpus().length)')
92-
make transpile_net CORES=$CORES
93-
94-
95-
- name: Compile MPL TestVectors implementation
96-
shell: bash
97-
working-directory: ./mpl/TestVectorsAwsCryptographicMaterialProviders
89+
working-directory: ${{ matrix.library }}
9890
run: |
9991
# This works because `node` is installed by default on GHA runners
10092
CORES=$(node -e 'console.log(os.cpus().length)')
10193
make transpile_net CORES=$CORES
10294
10395
- name: Test .NET Framework net48
104-
working-directory: ./AwsEncryptionSDK
105-
if: matrix.os == 'windows-latest'
96+
working-directory: ${{ matrix.library }}
10697
shell: bash
10798
run: |
10899
make test_net FRAMEWORK=net48
109100
110101
- name: Test .NET net6.0
111-
working-directory: ./AwsEncryptionSDK
102+
working-directory: ${{ matrix.library }}
112103
shell: bash
113104
run: |
114105
if [ "$RUNNER_OS" == "macOS" ]; then
@@ -118,7 +109,7 @@ jobs:
118109
fi
119110
120111
- name: Test Examples on .NET Framework net48
121-
working-directory: ./AwsEncryptionSDK
112+
working-directory: ${{ matrix.library }}
122113
if: matrix.os == 'windows-latest'
123114
shell: bash
124115
run: |
@@ -127,7 +118,7 @@ jobs:
127118
--framework net48
128119
129120
- name: Test Examples on .NET net6.0
130-
working-directory: ./AwsEncryptionSDK
121+
working-directory: ${{ matrix.library }}
131122
shell: bash
132123
run: |
133124
if [ "$RUNNER_OS" == "macOS" ]; then
@@ -140,118 +131,87 @@ jobs:
140131
runtimes/net/Examples \
141132
--framework net6.0
142133
fi
143-
144-
- name: Unzip ESDK-NET @ v4.0.0 Valid Vectors
145-
working-directory: ./AwsEncryptionSDK/runtimes/net/TestVectorsNative/TestVectors/resources
146-
shell: bash
134+
testVectors:
135+
strategy:
136+
fail-fast: false
137+
matrix:
138+
library: [TestVectors]
139+
os: [
140+
# Sed script doesn't work properly on windows
141+
# windows-latest,
142+
ubuntu-latest,
143+
macos-13,
144+
]
145+
runs-on: ${{ matrix.os }}
146+
permissions:
147+
id-token: write
148+
contents: read
149+
env:
150+
DOTNET_CLI_TELEMETRY_OPTOUT: 1
151+
DOTNET_NOLOGO: 1
152+
steps:
153+
- name: Support longpaths on Git checkout
147154
run: |
148-
NET_400_VALID_VECTORS=$GITHUB_WORKSPACE/v4Net400Valid/vectors
149-
mkdir -p $NET_400_VALID_VECTORS
150-
DOWNLOAD_NAME=valid-Net-4.0.0.zip
151-
unzip -o -qq $DOWNLOAD_NAME -d $NET_400_VALID_VECTORS
152-
153-
- name: Run ESDK-NET @ v4.0.0 Valid Vectors expect success
154-
working-directory: ./AwsEncryptionSDK/runtimes/net/TestVectorsNative/TestVectors
155-
continue-on-error: true
155+
git config --global core.longpaths true
156+
- uses: actions/checkout@v2
157+
- name: Init Submodules
156158
shell: bash
157159
run: |
158-
NET_400_VALID_VECTORS=$GITHUB_WORKSPACE/v4Net400Valid/vectors
159-
ESDK_NET_V400_POLICY="forbid" \
160-
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$NET_400_VALID_VECTORS/manifest.json" \
161-
dotnet test --framework net48
162-
ESDK_NET_V400_POLICY="forbid" \
163-
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$NET_400_VALID_VECTORS/manifest.json" \
164-
dotnet test --framework net6.0 --logger "console;verbosity=quiet"
160+
git submodule update --init libraries
161+
git submodule update --init --recursive mpl
162+
163+
- name: Configure AWS Credentials
164+
uses: aws-actions/configure-aws-credentials@v2
165+
with:
166+
aws-region: us-west-2
167+
role-to-assume: arn:aws:iam::370957321024:role/GitHub-CI-Public-ESDK-Dafny-Role-us-west-2
168+
role-session-name: NetTests
169+
170+
- name: Setup .NET Core SDK 6
171+
uses: actions/setup-dotnet@v3
172+
with:
173+
dotnet-version: '6.0.x'
165174

166-
- name: Unzip ESDK-NET @ v4.0.0 Invalid Vectors
167-
working-directory: ./AwsEncryptionSDK/runtimes/net/TestVectorsNative/TestVectors/resources
168-
shell: bash
169-
run: |
170-
NET_400_INVALID_VECTORS=$GITHUB_WORKSPACE/v4Net400Invalid/vectors
171-
mkdir -p $NET_400_INVALID_VECTORS
172-
DOWNLOAD_NAME=invalid-Net-4.0.0.zip
173-
unzip -o -qq $DOWNLOAD_NAME -d $NET_400_INVALID_VECTORS
175+
- name: Setup Dafny
176+
uses: dafny-lang/[email protected]
177+
with:
178+
dafny-version: ${{ inputs.dafny }}
174179

175-
- name: Run ESDK-NET @ v4.0.0 Invalid Vectors .NET 48 expect failure
176-
working-directory: ./AwsEncryptionSDK/runtimes/net/TestVectorsNative/TestVectors
177-
continue-on-error: true
178-
shell: bash
179-
run: |
180-
NET_400_INVALID_VECTORS=$GITHUB_WORKSPACE/v4Net400Invalid/vectors
181-
ESDK_NET_V400_POLICY="forbid" \
182-
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$NET_400_INVALID_VECTORS/manifest.json" \
183-
dotnet test --framework net48
184-
# Dotnet test returns 1 for failure.
185-
TEMP=$?; if [[ "$TEMP" -eq 1 ]]; then true; else false; fi;
186-
# We want this to fail, so if it returned 1, step passes, else it fails
187-
# TODO Post-#619: Refactor Test Vectors to expect failure,
188-
# as I doubt this true false logic works
180+
- name: Regenerate code using smithy-dafny if necessary
181+
if: ${{ inputs.regenerate-code }}
182+
uses: ./.github/actions/polymorph_codegen
183+
with:
184+
dafny: ${{ env.DAFNY_VERSION }}
185+
library: ${{ matrix.library }}
186+
diff-generated-code: false
187+
update-and-regenerate-mpl: true
189188

190-
- name: Run ESDK-NET @ v4.0.0 Invalid Vectors .NET 6.0 expect failure
191-
working-directory: ./AwsEncryptionSDK/runtimes/net/TestVectorsNative/TestVectors
192-
continue-on-error: true
193-
shell: bash
194-
run: |
195-
NET_400_INVALID_VECTORS=$GITHUB_WORKSPACE/v4Net400Invalid/vectors
196-
if [ "$RUNNER_OS" == "macOS" ]; then
197-
ESDK_NET_V400_POLICY="forbid" \
198-
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$NET_400_INVALID_VECTORS/manifest.json" \
199-
DYLD_LIBRARY_PATH="/usr/local/opt/[email protected]/lib" \
200-
dotnet test --framework net6.0
201-
else
202-
ESDK_NET_V400_POLICY="forbid" \
203-
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$NET_400_INVALID_VECTORS/manifest.json" \
204-
dotnet test --framework net6.0
205-
fi
206-
# Dotnet test returns 1 for failure.
207-
TEMP=$?; if [[ "$TEMP" -eq 1 ]]; then true; else false; fi;
208-
# We want this to fail, so if it returned 1, step passes, else it fails
209-
# TODO Post-#619: Refactor Test Vectors to expect failure,
210-
# as I doubt this true false logic works
211-
212-
- name: Run ESDK-NET @ v4.0.0 Invalid Vectors .NET expect Success
213-
working-directory: ./AwsEncryptionSDK/runtimes/net/TestVectorsNative/TestVectors
189+
- name: Download Dependencies
190+
working-directory: ${{ matrix.library }}
191+
run: make setup_net
192+
193+
- name: Compile ${{ matrix.library }} implementation
214194
shell: bash
195+
working-directory: ${{ matrix.library }}
215196
run: |
216-
NET_400_INVALID_VECTORS=$GITHUB_WORKSPACE/v4Net400Invalid/vectors
217-
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$NET_400_INVALID_VECTORS/manifest.json" \
218-
dotnet test --framework net48 --logger "console;verbosity=quiet"
219-
if [ "$RUNNER_OS" == "macOS" ]; then
220-
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$NET_400_INVALID_VECTORS/manifest.json" \
221-
DYLD_LIBRARY_PATH="/usr/local/opt/[email protected]/lib" \
222-
dotnet test --framework net6.0 --logger "console;verbosity=quiet"
223-
else
224-
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$NET_400_INVALID_VECTORS/manifest.json" \
225-
dotnet test --framework net6.0 --logger "console;verbosity=quiet"
226-
fi
227-
228-
- name: Unzip ESDK-NET @ v4.0.1 Vectors
229-
working-directory: ./AwsEncryptionSDK/runtimes/net/TestVectorsNative/TestVectors/resources
197+
# This works because `node` is installed by default on GHA runners
198+
CORES=$(node -e 'console.log(os.cpus().length)')
199+
make transpile_net CORES=$CORES
200+
201+
- name: Unzip .NET Retry Flag Manifests
230202
shell: bash
203+
working-directory: TestVectors/dafny/TestVectors/test/
231204
run: |
232-
NET_401_VECTORS=$GITHUB_WORKSPACE/v4Net401/vectors
233-
mkdir -p $NET_401_VECTORS
234-
DOWNLOAD_NAME=v4-Net-4.0.1.zip
235-
unzip -o -qq $DOWNLOAD_NAME -d $NET_401_VECTORS
205+
unzip invalid-Net-4.0.0.zip -d invalid-Net-4.0.0
206+
unzip v4-Net-4.0.1.zip -d v4-Net-4.0.1
207+
unzip valid-Net-4.0.0.zip -d valid-Net-4.0.0
236208
237-
- name: Run ESDK-NET @ v4.0.1 Vectors expect success
238-
working-directory: ./AwsEncryptionSDK/runtimes/net/TestVectorsNative/TestVectors
209+
- name: Test .NET net6.0
210+
working-directory: ${{ matrix.library }}
239211
shell: bash
240212
run: |
241-
NET_401_VECTORS=$GITHUB_WORKSPACE/v4Net401/vectors
242-
# We expect net48 to run only for Windows
243-
if [ "$RUNNER_OS" == "Windows" ]; then
244-
ESDK_NET_V400_POLICY="forbid" \
245-
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$NET_401_VECTORS/manifest.json" \
246-
dotnet test --framework net48
247-
fi
248213
if [ "$RUNNER_OS" == "macOS" ]; then
249-
DYLD_LIBRARY_PATH="/usr/local/opt/[email protected]/lib" \
250-
ESDK_NET_V400_POLICY="forbid" \
251-
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$NET_401_VECTORS/manifest.json" \
252-
dotnet test --framework net6.0 --logger "console;verbosity=quiet"
214+
make test_net_mac_intel FRAMEWORK=net6.0
253215
else
254-
ESDK_NET_V400_POLICY="forbid" \
255-
DAFNY_AWS_ESDK_TEST_VECTOR_MANIFEST_PATH="$NET_401_VECTORS/manifest.json" \
256-
dotnet test --framework net6.0 --logger "console;verbosity=quiet"
216+
make test_net FRAMEWORK=net6.0
257217
fi

Diff for: TestVectors/dafny/TestVectors/src/EsdkManifestOptions.dfy

+2
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ include "LibraryIndex.dfy"
55

66
module {:options "-functionSyntax:4"} EsdkManifestOptions {
77
import opened Wrappers
8+
import Types = AwsCryptographyEncryptionSdkTypes
89

910
datatype ManifestOptions =
1011
| Decrypt(
1112
nameonly manifestPath: string,
1213
nameonly manifestFileName: string,
14+
nameonly retryPolicy: Types.NetV4_0_0_RetryPolicy,
1315
nameonly testName: Option<string> := None
1416
)
1517
| Encrypt(

Diff for: TestVectors/dafny/TestVectors/src/EsdkTestManifests.dfy

+12-7
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ module {:options "-functionSyntax:4"} EsdkTestManifests {
4242

4343
var decryptVectors :- ParseEsdkJsonManifest.BuildDecryptTestVector(
4444
op,
45+
decryptManifest.clientName,
46+
decryptManifest.clientVersion,
4547
decryptManifest.version,
4648
decryptManifest.keys,
4749
decryptManifest.jsonTests
@@ -89,9 +91,7 @@ module {:options "-functionSyntax:4"} EsdkTestManifests {
8991
print "Skipped: ", skipped, "\n";
9092
}
9193

92-
expect !hasFailure;
93-
94-
manifest := Success([]);
94+
manifest := if !hasFailure then Success([]) else Failure("Test Vectors failed, see errors above.\n");
9595
}
9696

9797
method {:vcs_split_on_every_assert} StartEncryptVectors(
@@ -221,7 +221,8 @@ module {:options "-functionSyntax:4"} EsdkTestManifests {
221221
| DecryptManifest(
222222
version: nat,
223223
keys: KeyVectors.KeyVectorsClient,
224-
client: Values.JSON,
224+
clientName: string,
225+
clientVersion: string,
225226
jsonTests: seq<(string, Values.JSON)>
226227
)
227228
| EncryptManifest(
@@ -250,13 +251,17 @@ module {:options "-functionSyntax:4"} EsdkTestManifests {
250251
var decryptManifestBv :- FileIO.ReadBytesFromFile(manifestPath + manifestFileName);
251252
var decryptManifestBytes := BvToBytes(decryptManifestBv);
252253
var manifestJson :- API.Deserialize(decryptManifestBytes)
253-
.MapFailure(( e: Errors.DeserializationError ) => e.ToString());
254+
.MapFailure(( e: Errors.DeserializationError ) => e.ToString());
254255
:- Need(manifestJson.Object?, "Not a JSON object");
255256

256257
var manifest :- GetObject("manifest", manifestJson.obj);
257258
var version :- GetNat("version", manifest);
258259
var typ :- GetString("type", manifest);
259260

261+
var client :- GetObject("client", manifestJson.obj);
262+
var clientName :- GetString("name", client);
263+
var clientVersion :- GetString("version", client);
264+
260265
var keyManifestUri :- GetString("keys", manifestJson.obj);
261266
:- Need("file://" < keyManifestUri, "Unexpected URI prefix");
262267
var keyManifestPath := manifestPath + keyManifestUri[7..];
@@ -269,11 +274,11 @@ module {:options "-functionSyntax:4"} EsdkTestManifests {
269274
match typ
270275
case "awses-decrypt" =>
271276
:- Need(SupportedDecryptVersion?(version), "Unsupported manifest version");
272-
var client :- Get("client", manifestJson.obj);
273277
manifestData := Success(DecryptManifest(
274278
version := version,
275279
keys := keys,
276-
client := client,
280+
clientName := clientName,
281+
clientVersion := clientVersion,
277282
jsonTests := jsonTests
278283
));
279284

0 commit comments

Comments
 (0)