Skip to content

Commit f7c35ca

Browse files
authored
Fixed flaky Key Vault live tests. (Azure#24606)
* Removed the `createRsaKeyWithPublicExponent()` test from `KeyClientTest` and `KeyAsyncClientTest`, as setting a public exponent is currently only available for Managed HSM. * Added a call to `sleepIfRunningAgainstService()` in `KeyAsyncClientTest`'s `updateKey()` and `updateDisabledKey()` to avoid calling `getKey()` before the service has had a chance to update a given key. * Removed sleep call and refactored 'updateKey' tests instead.
1 parent e1acee5 commit f7c35ca

10 files changed

+90
-399
lines changed

sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyAsyncClientTest.java

Lines changed: 17 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -139,21 +139,15 @@ public void setKeyNull(HttpClient httpClient, KeyServiceVersion serviceVersion)
139139
@MethodSource("getTestParameters")
140140
public void updateKey(HttpClient httpClient, KeyServiceVersion serviceVersion) {
141141
createKeyAsyncClient(httpClient, serviceVersion);
142-
updateKeyRunner((original, updated) -> {
143-
StepVerifier.create(client.createKey(original))
144-
.assertNext(response -> assertKeyEquals(original, response))
145-
.verifyComplete();
146-
147-
StepVerifier.create(client.getKey(original.getName())
148-
.flatMap(keyToUpdate ->
149-
client.updateKeyProperties(keyToUpdate.getProperties().setExpiresOn(updated.getExpiresOn()))))
150-
.assertNext(response -> {
151-
assertNotNull(response);
152-
assertEquals(original.getName(), response.getName());
153-
}).verifyComplete();
154-
155-
StepVerifier.create(client.getKey(original.getName()))
156-
.assertNext(updatedKeyResponse -> assertKeyEquals(updated, updatedKeyResponse))
142+
updateKeyRunner((createKeyOptions, updateKeyOptions) -> {
143+
StepVerifier.create(client.createKey(createKeyOptions)
144+
.flatMap(createdKey -> {
145+
assertKeyEquals(createKeyOptions, createdKey);
146+
147+
return client.updateKeyProperties(createdKey.getProperties()
148+
.setExpiresOn(updateKeyOptions.getExpiresOn()));
149+
}))
150+
.assertNext(updatedKey -> assertKeyEquals(updateKeyOptions, updatedKey))
157151
.verifyComplete();
158152
});
159153
}
@@ -165,21 +159,15 @@ public void updateKey(HttpClient httpClient, KeyServiceVersion serviceVersion) {
165159
@MethodSource("getTestParameters")
166160
public void updateDisabledKey(HttpClient httpClient, KeyServiceVersion serviceVersion) {
167161
createKeyAsyncClient(httpClient, serviceVersion);
168-
updateDisabledKeyRunner((original, updated) -> {
169-
StepVerifier.create(client.createKey(original))
170-
.assertNext(response -> assertKeyEquals(original, response))
171-
.verifyComplete();
162+
updateDisabledKeyRunner((createKeyOptions, updateKeyOptions) -> {
163+
StepVerifier.create(client.createKey(createKeyOptions)
164+
.flatMap(createdKey -> {
165+
assertKeyEquals(createKeyOptions, createdKey);
172166

173-
StepVerifier.create(client.getKey(original.getName())
174-
.flatMap(keyToUpdate ->
175-
client.updateKeyProperties(keyToUpdate.getProperties().setExpiresOn(updated.getExpiresOn()))))
176-
.assertNext(response -> {
177-
assertNotNull(response);
178-
assertEquals(original.getName(), response.getName());
179-
}).verifyComplete();
180-
181-
StepVerifier.create(client.getKey(original.getName()))
182-
.assertNext(updatedKeyResponse -> assertKeyEquals(updated, updatedKeyResponse))
167+
return client.updateKeyProperties(createdKey.getProperties()
168+
.setExpiresOn(updateKeyOptions.getExpiresOn()));
169+
}))
170+
.assertNext(updatedKey -> assertKeyEquals(updateKeyOptions, updatedKey))
183171
.verifyComplete();
184172
});
185173
}
@@ -553,25 +541,6 @@ public void releaseKey(HttpClient httpClient, KeyServiceVersion serviceVersion)
553541
});
554542
}
555543

556-
/**
557-
* Tests that an RSA key with a public exponent can be created in the key vault.
558-
*/
559-
@ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS)
560-
@MethodSource("getTestParameters")
561-
public void createRsaKeyWithPublicExponent(HttpClient httpClient, KeyServiceVersion serviceVersion) {
562-
createKeyAsyncClient(httpClient, serviceVersion);
563-
createRsaKeyWithPublicExponentRunner((createRsaKeyOptions) ->
564-
StepVerifier.create(client.createRsaKey(createRsaKeyOptions))
565-
.assertNext(rsaKey -> {
566-
assertKeyEquals(createRsaKeyOptions, rsaKey);
567-
// TODO: Investigate why the KV service sets the JWK's "e" parameter to "AQAB" instead of "Aw".
568-
/*assertEquals(BigInteger.valueOf(createRsaKeyOptions.getPublicExponent()),
569-
toBigInteger(rsaKey.getKey().getE()));*/
570-
assertEquals(createRsaKeyOptions.getKeySize(), rsaKey.getKey().getN().length * 8);
571-
})
572-
.verifyComplete());
573-
}
574-
575544
/**
576545
* Tests that fetching the key rotation policy of a non-existent key throws.
577546
*/

sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientManagedHsmTestBase.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
import org.junit.jupiter.api.Test;
88

99
public interface KeyClientManagedHsmTestBase {
10+
@Test
11+
void createRsaKeyWithPublicExponent(HttpClient httpClient, KeyServiceVersion serviceVersion);
12+
1013
@Test
1114
void createOctKeyWithDefaultSize(HttpClient httpClient, KeyServiceVersion serviceVersion);
1215

sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTest.java

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -135,11 +135,15 @@ public void setKeyNull(HttpClient httpClient, KeyServiceVersion serviceVersion)
135135
@MethodSource("getTestParameters")
136136
public void updateKey(HttpClient httpClient, KeyServiceVersion serviceVersion) {
137137
createKeyClient(httpClient, serviceVersion);
138-
updateKeyRunner((original, updated) -> {
139-
assertKeyEquals(original, client.createKey(original));
140-
KeyVaultKey keyToUpdate = client.getKey(original.getName());
141-
client.updateKeyProperties(keyToUpdate.getProperties().setExpiresOn(updated.getExpiresOn()));
142-
assertKeyEquals(updated, client.getKey(original.getName()));
138+
updateKeyRunner((createKeyOptions, updateKeyOptions) -> {
139+
KeyVaultKey createdKey = client.createKey(createKeyOptions);
140+
141+
assertKeyEquals(createKeyOptions, createdKey);
142+
143+
KeyVaultKey updatedKey =
144+
client.updateKeyProperties(createdKey.getProperties().setExpiresOn(updateKeyOptions.getExpiresOn()));
145+
146+
assertKeyEquals(updateKeyOptions, updatedKey);
143147
});
144148
}
145149

@@ -150,11 +154,15 @@ public void updateKey(HttpClient httpClient, KeyServiceVersion serviceVersion) {
150154
@MethodSource("getTestParameters")
151155
public void updateDisabledKey(HttpClient httpClient, KeyServiceVersion serviceVersion) {
152156
createKeyClient(httpClient, serviceVersion);
153-
updateDisabledKeyRunner((original, updated) -> {
154-
assertKeyEquals(original, client.createKey(original));
155-
KeyVaultKey keyToUpdate = client.getKey(original.getName());
156-
client.updateKeyProperties(keyToUpdate.getProperties().setExpiresOn(updated.getExpiresOn()));
157-
assertKeyEquals(updated, client.getKey(original.getName()));
157+
updateDisabledKeyRunner((createKeyOptions, updateKeyOptions) -> {
158+
KeyVaultKey createdKey = client.createKey(createKeyOptions);
159+
160+
assertKeyEquals(createKeyOptions, createdKey);
161+
162+
KeyVaultKey updatedKey =
163+
client.updateKeyProperties(createdKey.getProperties().setExpiresOn(updateKeyOptions.getExpiresOn()));
164+
165+
assertKeyEquals(updateKeyOptions, updatedKey);
158166
});
159167
}
160168

@@ -466,24 +474,6 @@ public void listKeyVersions(HttpClient httpClient, KeyServiceVersion serviceVers
466474
});
467475
}
468476

469-
/**
470-
* Tests that an RSA key with a public exponent can be created in the key vault.
471-
*/
472-
@ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS)
473-
@MethodSource("getTestParameters")
474-
public void createRsaKeyWithPublicExponent(HttpClient httpClient, KeyServiceVersion serviceVersion) {
475-
createKeyClient(httpClient, serviceVersion);
476-
createRsaKeyWithPublicExponentRunner((createRsaKeyOptions) -> {
477-
KeyVaultKey rsaKey = client.createRsaKey(createRsaKeyOptions);
478-
479-
assertKeyEquals(createRsaKeyOptions, rsaKey);
480-
// TODO: Investigate why the KV service sets the JWK's "e" parameter to "AQAB" instead of "Aw".
481-
/*assertEquals(BigInteger.valueOf(createRsaKeyOptions.getPublicExponent()),
482-
toBigInteger(rsaKey.getKey().getE()));*/
483-
assertEquals(createRsaKeyOptions.getKeySize(), rsaKey.getKey().getN().length * 8);
484-
});
485-
}
486-
487477
/**
488478
* Tests that an existing key can be released.
489479
*/

sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTestBase.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -449,9 +449,6 @@ void releaseKeyRunner(BiConsumer<CreateRsaKeyOptions, String> testRunner) {
449449
testRunner.accept(keyToRelease, attestationUrl);
450450
}
451451

452-
@Test
453-
public abstract void createRsaKeyWithPublicExponent(HttpClient httpClient, KeyServiceVersion serviceVersion);
454-
455452
@Test
456453
public abstract void getKeyRotationPolicyOfNonExistentKey(HttpClient httpClient, KeyServiceVersion serviceVersion);
457454

sdk/keyvault/azure-security-keyvault-keys/src/test/resources/session-records/KeyAsyncClientTest.createRsaKeyWithPublicExponent[1].json

Lines changed: 0 additions & 30 deletions
This file was deleted.
Lines changed: 13 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,108 +1,56 @@
11
{
22
"networkCallRecords" : [ {
33
"Method" : "POST",
4-
"Uri" : "https://REDACTED.vault.azure.net/keys/testkey255915b59/create?api-version=7.3-preview",
4+
"Uri" : "https://REDACTED.vault.azure.net/keys/testkey2986032b8/create?api-version=7.3-preview",
55
"Headers" : {
66
"User-Agent" : "azsdk-java-client_name/client_version (11.0.6; Windows 10; 10.0)",
77
"Content-Type" : "application/json"
88
},
99
"Response" : {
10-
"content-length" : "427",
10+
"content-length" : "416",
1111
"X-Content-Type-Options" : "nosniff",
1212
"Pragma" : "no-cache",
1313
"retry-after" : "0",
1414
"StatusCode" : "200",
15-
"Date" : "Tue, 05 Oct 2021 01:54:23 GMT",
15+
"Date" : "Thu, 07 Oct 2021 02:34:29 GMT",
1616
"Strict-Transport-Security" : "max-age=31536000;includeSubDomains",
1717
"Cache-Control" : "no-cache",
18-
"x-ms-keyvault-region" : "centralus",
18+
"x-ms-keyvault-region" : "westus",
1919
"x-ms-keyvault-network-info" : "conn_type=Ipv4;addr=174.127.169.154;act_addr_fam=InterNetwork;",
2020
"Expires" : "-1",
21-
"x-ms-request-id" : "c7ce2095-8533-40eb-ab05-99f3c5de455c",
21+
"x-ms-request-id" : "7ee9176f-2381-4306-bda7-9107209f15ca",
2222
"x-ms-keyvault-service-version" : "1.9.132.3",
23-
"Body" : "{\"key\":{\"kid\":\"https://azure-kv-tests2.vault.azure.net/keys/testkey255915b59/d209b2180d0642dbbb7ec4851278d211\",\"kty\":\"EC\",\"key_ops\":[\"sign\",\"verify\"],\"crv\":\"P-256\",\"x\":\"FeuTrI_mDAqfvodEzI7cUTNCvHzN9tGm3EtyWamrg_Y\",\"y\":\"AZXc2oUKZigV7yM1WJRI4YskH1O1J-19iSAhAPmR37M\"},\"attributes\":{\"enabled\":false,\"exp\":2537049600,\"created\":1633398863,\"updated\":1633398863,\"recoveryLevel\":\"CustomizedRecoverable+Purgeable\",\"recoverableDays\":7}}",
24-
"Content-Type" : "application/json; charset=utf-8",
25-
"X-Powered-By" : "ASP.NET"
26-
},
27-
"Exception" : null
28-
}, {
29-
"Method" : "GET",
30-
"Uri" : "https://REDACTED.vault.azure.net/keys/testkey255915b59/?api-version=7.3-preview",
31-
"Headers" : {
32-
"User-Agent" : "azsdk-java-client_name/client_version (11.0.6; Windows 10; 10.0)",
33-
"Content-Type" : "application/json"
34-
},
35-
"Response" : {
36-
"content-length" : "427",
37-
"X-Content-Type-Options" : "nosniff",
38-
"Pragma" : "no-cache",
39-
"retry-after" : "0",
40-
"StatusCode" : "200",
41-
"Date" : "Tue, 05 Oct 2021 01:54:23 GMT",
42-
"Strict-Transport-Security" : "max-age=31536000;includeSubDomains",
43-
"Cache-Control" : "no-cache",
44-
"x-ms-keyvault-region" : "centralus",
45-
"x-ms-keyvault-network-info" : "conn_type=Ipv4;addr=174.127.169.154;act_addr_fam=InterNetwork;",
46-
"Expires" : "-1",
47-
"x-ms-request-id" : "96f60166-ee2f-4bf0-9b9a-646309e626eb",
48-
"x-ms-keyvault-service-version" : "1.9.132.3",
49-
"Body" : "{\"key\":{\"kid\":\"https://azure-kv-tests2.vault.azure.net/keys/testkey255915b59/d209b2180d0642dbbb7ec4851278d211\",\"kty\":\"EC\",\"key_ops\":[\"sign\",\"verify\"],\"crv\":\"P-256\",\"x\":\"FeuTrI_mDAqfvodEzI7cUTNCvHzN9tGm3EtyWamrg_Y\",\"y\":\"AZXc2oUKZigV7yM1WJRI4YskH1O1J-19iSAhAPmR37M\"},\"attributes\":{\"enabled\":false,\"exp\":2537049600,\"created\":1633398863,\"updated\":1633398863,\"recoveryLevel\":\"CustomizedRecoverable+Purgeable\",\"recoverableDays\":7}}",
23+
"Body" : "{\"key\":{\"kid\":\"https://azure-kv-tests2.vault.azure.net/keys/testkey2986032b8/c330063b2a144826bd258d8b6c88ec60\",\"kty\":\"EC\",\"key_ops\":[\"sign\",\"verify\"],\"crv\":\"P-256\",\"x\":\"mN_5P7JFoIG_7odyRnwRKMZvKfHHfBTNJ3sud3tyZYI\",\"y\":\"QwyOK5MRqMOepjRnNGoq7LJi4VDoacXb-DK2xIxJPGI\"},\"attributes\":{\"enabled\":false,\"exp\":2537049600,\"created\":1633574070,\"updated\":1633574070,\"recoveryLevel\":\"Recoverable+Purgeable\",\"recoverableDays\":90}}",
5024
"Content-Type" : "application/json; charset=utf-8",
5125
"X-Powered-By" : "ASP.NET"
5226
},
5327
"Exception" : null
5428
}, {
5529
"Method" : "PATCH",
56-
"Uri" : "https://REDACTED.vault.azure.net/keys/testkey255915b59/d209b2180d0642dbbb7ec4851278d211?api-version=7.3-preview",
57-
"Headers" : {
58-
"User-Agent" : "azsdk-java-client_name/client_version (11.0.6; Windows 10; 10.0)",
59-
"Content-Type" : "application/json"
60-
},
61-
"Response" : {
62-
"content-length" : "427",
63-
"X-Content-Type-Options" : "nosniff",
64-
"Pragma" : "no-cache",
65-
"retry-after" : "0",
66-
"StatusCode" : "200",
67-
"Date" : "Tue, 05 Oct 2021 01:54:23 GMT",
68-
"Strict-Transport-Security" : "max-age=31536000;includeSubDomains",
69-
"Cache-Control" : "no-cache",
70-
"x-ms-keyvault-region" : "centralus",
71-
"x-ms-keyvault-network-info" : "conn_type=Ipv4;addr=174.127.169.154;act_addr_fam=InterNetwork;",
72-
"Expires" : "-1",
73-
"x-ms-request-id" : "9a92ad6d-06b8-4c6a-b418-579843669ab8",
74-
"x-ms-keyvault-service-version" : "1.9.132.3",
75-
"Body" : "{\"key\":{\"kid\":\"https://azure-kv-tests2.vault.azure.net/keys/testkey255915b59/d209b2180d0642dbbb7ec4851278d211\",\"kty\":\"EC\",\"key_ops\":[\"sign\",\"verify\"],\"crv\":\"P-256\",\"x\":\"FeuTrI_mDAqfvodEzI7cUTNCvHzN9tGm3EtyWamrg_Y\",\"y\":\"AZXc2oUKZigV7yM1WJRI4YskH1O1J-19iSAhAPmR37M\"},\"attributes\":{\"enabled\":false,\"exp\":2852668800,\"created\":1633398863,\"updated\":1633398864,\"recoveryLevel\":\"CustomizedRecoverable+Purgeable\",\"recoverableDays\":7}}",
76-
"Content-Type" : "application/json; charset=utf-8",
77-
"X-Powered-By" : "ASP.NET"
78-
},
79-
"Exception" : null
80-
}, {
81-
"Method" : "GET",
82-
"Uri" : "https://REDACTED.vault.azure.net/keys/testkey255915b59/?api-version=7.3-preview",
30+
"Uri" : "https://REDACTED.vault.azure.net/keys/testkey2986032b8/c330063b2a144826bd258d8b6c88ec60?api-version=7.3-preview",
8331
"Headers" : {
8432
"User-Agent" : "azsdk-java-client_name/client_version (11.0.6; Windows 10; 10.0)",
8533
"Content-Type" : "application/json"
8634
},
8735
"Response" : {
88-
"content-length" : "427",
36+
"content-length" : "416",
8937
"X-Content-Type-Options" : "nosniff",
9038
"Pragma" : "no-cache",
9139
"retry-after" : "0",
9240
"StatusCode" : "200",
93-
"Date" : "Tue, 05 Oct 2021 01:54:24 GMT",
41+
"Date" : "Thu, 07 Oct 2021 02:34:30 GMT",
9442
"Strict-Transport-Security" : "max-age=31536000;includeSubDomains",
9543
"Cache-Control" : "no-cache",
96-
"x-ms-keyvault-region" : "centralus",
44+
"x-ms-keyvault-region" : "westus",
9745
"x-ms-keyvault-network-info" : "conn_type=Ipv4;addr=174.127.169.154;act_addr_fam=InterNetwork;",
9846
"Expires" : "-1",
99-
"x-ms-request-id" : "5ebc167f-d928-4966-9e8f-4f45fd053987",
47+
"x-ms-request-id" : "00bc1d35-3d76-4334-80f5-bb0135c71e62",
10048
"x-ms-keyvault-service-version" : "1.9.132.3",
101-
"Body" : "{\"key\":{\"kid\":\"https://azure-kv-tests2.vault.azure.net/keys/testkey255915b59/d209b2180d0642dbbb7ec4851278d211\",\"kty\":\"EC\",\"key_ops\":[\"sign\",\"verify\"],\"crv\":\"P-256\",\"x\":\"FeuTrI_mDAqfvodEzI7cUTNCvHzN9tGm3EtyWamrg_Y\",\"y\":\"AZXc2oUKZigV7yM1WJRI4YskH1O1J-19iSAhAPmR37M\"},\"attributes\":{\"enabled\":false,\"exp\":2852668800,\"created\":1633398863,\"updated\":1633398864,\"recoveryLevel\":\"CustomizedRecoverable+Purgeable\",\"recoverableDays\":7}}",
49+
"Body" : "{\"key\":{\"kid\":\"https://azure-kv-tests2.vault.azure.net/keys/testkey2986032b8/c330063b2a144826bd258d8b6c88ec60\",\"kty\":\"EC\",\"key_ops\":[\"sign\",\"verify\"],\"crv\":\"P-256\",\"x\":\"mN_5P7JFoIG_7odyRnwRKMZvKfHHfBTNJ3sud3tyZYI\",\"y\":\"QwyOK5MRqMOepjRnNGoq7LJi4VDoacXb-DK2xIxJPGI\"},\"attributes\":{\"enabled\":false,\"exp\":2852668800,\"created\":1633574070,\"updated\":1633574070,\"recoveryLevel\":\"Recoverable+Purgeable\",\"recoverableDays\":90}}",
10250
"Content-Type" : "application/json; charset=utf-8",
10351
"X-Powered-By" : "ASP.NET"
10452
},
10553
"Exception" : null
10654
} ],
107-
"variables" : [ "testkey255915b59" ]
55+
"variables" : [ "testkey2986032b8" ]
10856
}

0 commit comments

Comments
 (0)