Skip to content

Commit 4f09a8b

Browse files
authored
Added perf tests for Key Vault Certificates, Keys and Secrets. (Azure#22369)
* Added perf tests for Key Vault Certificates, Keys and Secrets. * Added CheckStyle exceptions and an entry in version_client.txt for the KV perf tests package. * Added dependency tag for Azure Identity. * Applied PR feedback.
1 parent d7817f1 commit 4f09a8b

File tree

18 files changed

+575
-6
lines changed

18 files changed

+575
-6
lines changed

eng/code-quality-reports/src/main/resources/checkstyle/checkstyle-suppressions.xml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -422,12 +422,10 @@ the main ServiceBusClientBuilder. -->
422422
<suppress checks="[a-zA-Z0-9]*" files="[/\\]azure-spring-cloud-feature-management-web[/\\]"/>
423423

424424
<!-- perf-test files are not public API, so they don't need to fulfill all requirements. -->
425-
<suppress checks="Javadoc" files=".*[/\\]azure-storage-perf|azure-search-perf|azure-identity-perf|azure-data-tables-perf|azure-template-perf[/\\].*\.java"/>
426-
<suppress checks="com.azure.tools.checkstyle.checks.EnforceFinalFields"
427-
files=".*[/\\]azure-identity-perf|azure-data-tables-perf|azure-search-perf[/\\].*\.java"/>
428-
<suppress checks="GoodLogging" files=".*[/\\]azure-storage-perf|azure-data-tables-perf|azure-search-perf|perf-test-core[/\\].*\.java"/>
429-
<suppress checks="com.azure.tools.checkstyle.checks.ThrowFromClientLoggerCheck"
430-
files=".*[/\\]azure-identity-perf|azure-search-perf|azure-storage-perf|azure-data-tables-perf|perf-test-core|azure-template-perf[/\\].*\.java"/>
425+
<suppress checks="Javadoc" files=".*[/\\]azure-\w+-perf[/\\].*\.java"/>
426+
<suppress checks="com.azure.tools.checkstyle.checks.EnforceFinalFields" files=".*[/\\]azure-\w+-perf[/\\].*\.java"/>
427+
<suppress checks="GoodLogging" files=".*[/\\]azure-\w+-perf|perf-test-core[/\\].*\.java"/>
428+
<suppress checks="com.azure.tools.checkstyle.checks.ThrowFromClientLoggerCheck" files=".*[/\\]azure-\w+-perf|perf-test-core[/\\].*\.java"/>
431429
<!-- Azure Search test models -->
432430
<suppress checks="StaticVariableName|VisibilityModifier"
433431
files="com.azure.search.perf.*.java|com.azure.messaging.servicebus.perf.*.java"/>

eng/versioning/version_client.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ com.azure:azure-security-keyvault-jca;1.0.0-beta.7;1.0.0-beta.8
113113
com.azure:azure-security-test-keyvault-jca;1.0.0;1.0.0
114114
com.azure:azure-security-keyvault-keys;4.2.8;4.3.0-beta.9
115115
com.azure:azure-security-keyvault-secrets;4.2.8;4.3.0-beta.7
116+
com.azure:azure-security-keyvault-perf;1.0.0-beta.1;1.0.0-beta.1
116117
com.azure:azure-sdk-template;1.2.1-beta.2;1.2.1-beta.16
117118
com.azure:azure-spring-data-cosmos;3.8.0;3.9.0-beta.1
118119
com.azure:azure-spring-data-cosmos-test;3.0.0-beta.1;3.0.0-beta.1
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Release History
2+
3+
## 1.0.0-beta.1 (Unreleased)
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Azure Security Key Vault Performance test client library for Java
2+
3+
Represents Performance tests for Azure Security Key Vault SDK for Java.
4+
5+
## Getting started
6+
7+
### Prerequisites
8+
9+
- Java Development Kit (JDK) with version 8 or above
10+
11+
### Adding the package to your product
12+
13+
14+
## Key concepts
15+
16+
17+
## Examples
18+
19+
## Troubleshooting
20+
21+
## Next steps
22+
23+
## Contributing
24+
25+
For details on contributing to this repository, see the [contributing guide](https://github.com/Azure/azure-sdk-for-java/blob/master/CONTRIBUTING.md).
26+
27+
1. Fork it
28+
1. Create your feature branch (`git checkout -b my-new-feature`)
29+
1. Commit your changes (`git commit -am 'Add some feature'`)
30+
1. Push to the branch (`git push origin my-new-feature`)
31+
1. Create new Pull Request
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
<!-- Copyright (c) Microsoft Corporation. All rights reserved.
2+
Licensed under the MIT License. -->
3+
<project xmlns="http://maven.apache.org/POM/4.0.0"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
6+
<parent>
7+
<groupId>com.azure</groupId>
8+
<artifactId>azure-client-sdk-parent</artifactId>
9+
<version>1.7.0</version> <!-- {x-version-update;com.azure:azure-client-sdk-parent;current} -->
10+
<relativePath>../../parents/azure-client-sdk-parent</relativePath>
11+
</parent>
12+
13+
<modelVersion>4.0.0</modelVersion>
14+
15+
<groupId>com.azure</groupId>
16+
<artifactId>azure-security-keyvault-perf</artifactId>
17+
<version>1.0.0-beta.1</version> <!-- {x-version-update;com.azure:azure-security-keyvault-perf;current} -->
18+
<packaging>jar</packaging>
19+
20+
<properties>
21+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
22+
<maven.compiler.source>1.8</maven.compiler.source>
23+
<maven.compiler.target>1.8</maven.compiler.target>
24+
</properties>
25+
26+
<dependencies>
27+
<dependency>
28+
<groupId>com.azure</groupId>
29+
<artifactId>azure-security-keyvault-certificates</artifactId>
30+
<version>4.2.0-beta.7</version> <!-- {x-version-update;com.azure:azure-security-keyvault-certificates;current} -->
31+
</dependency>
32+
<dependency>
33+
<groupId>com.azure</groupId>
34+
<artifactId>azure-security-keyvault-keys</artifactId>
35+
<version>4.3.0-beta.9</version> <!-- {x-version-update;com.azure:azure-security-keyvault-keys;current} -->
36+
</dependency>
37+
<dependency>
38+
<groupId>com.azure</groupId>
39+
<artifactId>azure-security-keyvault-secrets</artifactId>
40+
<version>4.3.0-beta.7</version> <!-- {x-version-update;com.azure:azure-security-keyvault-secrets;current} -->
41+
</dependency>
42+
<dependency>
43+
<groupId>com.azure</groupId>
44+
<artifactId>azure-identity</artifactId>
45+
<version>1.3.1</version> <!-- {x-version-update;com.azure:azure-identity;dependency} -->
46+
</dependency>
47+
<dependency>
48+
<groupId>com.azure</groupId>
49+
<artifactId>azure-core-test</artifactId>
50+
<version>1.6.3</version> <!-- {x-version-update;com.azure:azure-core-test;dependency} -->
51+
</dependency>
52+
<dependency>
53+
<groupId>com.azure</groupId>
54+
<artifactId>perf-test-core</artifactId>
55+
<version>1.0.0-beta.1</version> <!-- {x-version-update;com.azure:perf-test-core;current} -->
56+
</dependency>
57+
</dependencies>
58+
59+
<build>
60+
<plugins>
61+
<plugin>
62+
<groupId>org.apache.maven.plugins</groupId>
63+
<artifactId>maven-assembly-plugin</artifactId>
64+
<version>3.2.0</version> <!-- {x-version-update;org.apache.maven.plugins:maven-assembly-plugin;external_dependency} -->
65+
<executions>
66+
<execution>
67+
<phase>package</phase>
68+
<goals>
69+
<goal>single</goal>
70+
</goals>
71+
<configuration>
72+
<archive>
73+
<manifest>
74+
<mainClass>
75+
com.azure.security.keyvault.App
76+
</mainClass>
77+
</manifest>
78+
</archive>
79+
<descriptorRefs>
80+
<descriptorRef>jar-with-dependencies</descriptorRef>
81+
</descriptorRefs>
82+
</configuration>
83+
</execution>
84+
</executions>
85+
</plugin>
86+
</plugins>
87+
</build>
88+
</project>
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
package com.azure.security.keyvault;
4+
5+
import com.azure.perf.test.core.PerfStressProgram;
6+
import com.azure.security.keyvault.certificates.perf.GetCertificateTest;
7+
import com.azure.security.keyvault.keys.perf.DecryptTest;
8+
import com.azure.security.keyvault.keys.perf.GetKeyTest;
9+
import com.azure.security.keyvault.keys.perf.SignTest;
10+
import com.azure.security.keyvault.keys.perf.UnwrapTest;
11+
import com.azure.security.keyvault.secrets.perf.GetSecretTest;
12+
import com.azure.security.keyvault.secrets.perf.ListSecretsTest;
13+
14+
/**
15+
* Runs the Azure Security Key Vault performance test.
16+
*
17+
* <p>To run from command line. Package the project into a jar with dependencies via mvn clean package.
18+
* Then run the program via java -jar 'compiled-jar-with-dependencies-path' </p>
19+
*
20+
* <p> To run from IDE, set all the required environment variables in IntelliJ via Run -&gt; EditConfigurations section.
21+
* Then run the App's main method via IDE.</p>
22+
*/
23+
public class App {
24+
public static void main(String[] args) {
25+
PerfStressProgram.run(new Class<?>[]{
26+
GetCertificateTest.class,
27+
DecryptTest.class,
28+
GetKeyTest.class,
29+
SignTest.class,
30+
UnwrapTest.class,
31+
GetSecretTest.class,
32+
ListSecretsTest.class
33+
}, args);
34+
}
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.azure.security.keyvault.certificates.perf;
2+
3+
import com.azure.perf.test.core.PerfStressOptions;
4+
import com.azure.security.keyvault.certificates.models.CertificatePolicy;
5+
import com.azure.security.keyvault.certificates.perf.core.CertificatesTest;
6+
import reactor.core.publisher.Mono;
7+
8+
import java.util.UUID;
9+
10+
public class GetCertificateTest extends CertificatesTest<PerfStressOptions> {
11+
private final String certificateName;
12+
13+
public GetCertificateTest(PerfStressOptions options) {
14+
super(options);
15+
16+
certificateName = "getCertificatePerfTest-" + UUID.randomUUID();
17+
}
18+
19+
public Mono<Void> globalSetupAsync() {
20+
return super.globalSetupAsync()
21+
.then(certificateAsyncClient.beginCreateCertificate(certificateName, CertificatePolicy.getDefault()).then())
22+
.then();
23+
}
24+
25+
@Override
26+
public void run() {
27+
certificateClient.getCertificate(certificateName);
28+
}
29+
30+
@Override
31+
public Mono<Void> runAsync() {
32+
return certificateAsyncClient.getCertificate(certificateName).then();
33+
}
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
package com.azure.security.keyvault.certificates.perf.core;
4+
5+
import com.azure.core.util.Configuration;
6+
import com.azure.core.util.CoreUtils;
7+
import com.azure.identity.DefaultAzureCredentialBuilder;
8+
import com.azure.perf.test.core.PerfStressOptions;
9+
import com.azure.perf.test.core.PerfStressTest;
10+
import com.azure.security.keyvault.certificates.CertificateAsyncClient;
11+
import com.azure.security.keyvault.certificates.CertificateClient;
12+
import com.azure.security.keyvault.certificates.CertificateClientBuilder;
13+
14+
public abstract class CertificatesTest<TOptions extends PerfStressOptions> extends PerfStressTest<TOptions> {
15+
protected final CertificateClient certificateClient;
16+
protected final CertificateAsyncClient certificateAsyncClient;
17+
private final Configuration configuration;
18+
19+
/**
20+
* Creates an instance of performance test.
21+
*
22+
* @param options the options configured for the test.
23+
*/
24+
public CertificatesTest(TOptions options) {
25+
super(options);
26+
27+
configuration = Configuration.getGlobalConfiguration().clone();
28+
String vaultUrl = configuration.get("AZURE_KEYVAULT_CLIENT_ID");
29+
30+
if (CoreUtils.isNullOrEmpty(vaultUrl)) {
31+
throw new IllegalStateException("Environment variable AZURE_KEYVAULT_CLIENT_ID must be set");
32+
}
33+
34+
// Setup the service client
35+
CertificateClientBuilder builder = new CertificateClientBuilder()
36+
.vaultUrl(vaultUrl)
37+
.credential(new DefaultAzureCredentialBuilder().build());
38+
39+
certificateClient = builder.buildClient();
40+
certificateAsyncClient = builder.buildAsyncClient();
41+
}
42+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
package com.azure.security.keyvault.keys.perf;
4+
5+
import com.azure.perf.test.core.PerfStressOptions;
6+
import com.azure.security.keyvault.keys.cryptography.models.EncryptionAlgorithm;
7+
import com.azure.security.keyvault.keys.perf.core.CryptographyTest;
8+
import reactor.core.publisher.Mono;
9+
10+
import java.security.SecureRandom;
11+
12+
public class DecryptTest extends CryptographyTest<PerfStressOptions> {
13+
private final EncryptionAlgorithm encryptionAlgorithm = EncryptionAlgorithm.RSA_OAEP;
14+
private final byte[] plaintext;
15+
16+
public DecryptTest(PerfStressOptions options) {
17+
super(options);
18+
19+
plaintext = new byte[100];
20+
new SecureRandom().nextBytes(plaintext);
21+
}
22+
23+
@Override
24+
public void run() {
25+
cryptographyClient.decrypt(encryptionAlgorithm, plaintext);
26+
}
27+
28+
@Override
29+
public Mono<Void> runAsync() {
30+
return cryptographyAsyncClient.decrypt(encryptionAlgorithm, plaintext)
31+
.then();
32+
}
33+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
package com.azure.security.keyvault.keys.perf;
4+
5+
import com.azure.perf.test.core.PerfStressOptions;
6+
import com.azure.security.keyvault.keys.models.KeyType;
7+
import com.azure.security.keyvault.keys.perf.core.KeysTest;
8+
import reactor.core.publisher.Mono;
9+
10+
import java.util.UUID;
11+
12+
public class GetKeyTest extends KeysTest<PerfStressOptions> {
13+
private final String keyName;
14+
15+
public GetKeyTest(PerfStressOptions options) {
16+
super(options);
17+
18+
keyName = "getKeyPerfTest-" + UUID.randomUUID();
19+
}
20+
21+
public Mono<Void> globalSetupAsync() {
22+
return super.globalSetupAsync()
23+
.then(keyAsyncClient.createKey(keyName, KeyType.RSA))
24+
.then();
25+
}
26+
27+
@Override
28+
public void run() {
29+
keyClient.getKey(keyName);
30+
}
31+
32+
@Override
33+
public Mono<Void> runAsync() {
34+
return keyAsyncClient.getKey(keyName).then();
35+
}
36+
}

0 commit comments

Comments
 (0)