From e32b908e53a50623b9f7718ba4aa53b2617cd0f3 Mon Sep 17 00:00:00 2001 From: seankane-msft Date: Fri, 8 Apr 2022 14:43:53 -0400 Subject: [PATCH 01/11] certificates perf --- .../testdata/perf/get_certificate.go | 97 +++++++++++++++++++ .../azcertificates/testdata/perf/go.mod | 23 +++++ .../azcertificates/testdata/perf/go.sum | 57 +++++++++++ .../azcertificates/testdata/perf/main.go | 12 +++ 4 files changed, 189 insertions(+) create mode 100644 sdk/keyvault/azcertificates/testdata/perf/get_certificate.go create mode 100644 sdk/keyvault/azcertificates/testdata/perf/go.mod create mode 100644 sdk/keyvault/azcertificates/testdata/perf/go.sum create mode 100644 sdk/keyvault/azcertificates/testdata/perf/main.go diff --git a/sdk/keyvault/azcertificates/testdata/perf/get_certificate.go b/sdk/keyvault/azcertificates/testdata/perf/get_certificate.go new file mode 100644 index 000000000000..cdf8fa64d5b7 --- /dev/null +++ b/sdk/keyvault/azcertificates/testdata/perf/get_certificate.go @@ -0,0 +1,97 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. + +package main + +import ( + "context" + "fmt" + "os" + "time" + + "github.com/Azure/azure-sdk-for-go/sdk/azidentity" + "github.com/Azure/azure-sdk-for-go/sdk/internal/perf" + "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azcertificates" +) + +type getCertificatesTestOptions struct{} + +var getCertTestOpts getCertificatesTestOptions = getCertificatesTestOptions{} + +type GetCertificateTest struct { + perf.PerfTestOptions + certificateName string + client *azcertificates.Client +} + +// NewGetCertificateTest is called once per process +func NewGetCertificateTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { + certName := "livekvtestgetcertperfcert" + d := &GetCertificateTest{ + PerfTestOptions: options, + certificateName: certName, + } + + vaultURL, ok := os.LookupEnv("AZURE_KEYVAULT_URL") + if !ok { + return nil, fmt.Errorf("the environment variable 'AZURE_KEYVAULT_URL' could not be found") + } + + cred, err := azidentity.NewDefaultAzureCredential(nil) + if err != nil { + panic(err) + } + + client, err := azcertificates.NewClient(vaultURL, cred, nil) + if err != nil { + return nil, err + } + + poller, err := client.BeginCreateCertificate(ctx, d.certificateName, azcertificates.NewDefaultCertificatePolicy(), nil) + if err != nil { + return nil, err + } + _, err = poller.PollUntilDone(ctx, 500*time.Millisecond) + if err != nil { + return nil, err + } + + d.client = client + return d, nil +} + +func (d *GetCertificateTest) GlobalCleanup(ctx context.Context) error { + poller, err := d.client.BeginDeleteCertificate(ctx, d.certificateName, nil) + if err != nil { + return err + } + + _, err = poller.PollUntilDone(ctx, 500*time.Millisecond) + return err +} + +type GetCertificatePerfTest struct { + *GetCertificateTest + perf.PerfTestOptions + client *azcertificates.Client + certificateName string +} + +// NewPerfTest is called once per goroutine +func (g *GetCertificateTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { + return &GetCertificatePerfTest{ + GetCertificateTest: g, + PerfTestOptions: *options, + client: g.client, + certificateName: g.certificateName, + }, nil +} + +func (d *GetCertificatePerfTest) Run(ctx context.Context) error { + _, err := d.client.GetCertificate(ctx, d.certificateName, nil) + return err +} + +func (*GetCertificatePerfTest) Cleanup(ctx context.Context) error { + return nil +} diff --git a/sdk/keyvault/azcertificates/testdata/perf/go.mod b/sdk/keyvault/azcertificates/testdata/perf/go.mod new file mode 100644 index 000000000000..88a73078b9de --- /dev/null +++ b/sdk/keyvault/azcertificates/testdata/perf/go.mod @@ -0,0 +1,23 @@ +module github.com/Azure/azure-sdk-for-go/sdk/keyvault/azcertificates/testdata/perf + +go 1.18 + +require ( + github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.14.0 + github.com/Azure/azure-sdk-for-go/sdk/internal v0.9.2 + github.com/Azure/azure-sdk-for-go/sdk/keyvault/azcertificates v0.3.0 +) + +require ( + github.com/Azure/azure-sdk-for-go/sdk/azcore v0.23.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.3.0 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0 // indirect + github.com/golang-jwt/jwt v3.2.1+incompatible // indirect + github.com/google/uuid v1.1.1 // indirect + github.com/kylelemons/godebug v1.1.0 // indirect + github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect + golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 // indirect + golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f // indirect + golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 // indirect + golang.org/x/text v0.3.7 // indirect +) diff --git a/sdk/keyvault/azcertificates/testdata/perf/go.sum b/sdk/keyvault/azcertificates/testdata/perf/go.sum new file mode 100644 index 000000000000..3c8a74e7b5ee --- /dev/null +++ b/sdk/keyvault/azcertificates/testdata/perf/go.sum @@ -0,0 +1,57 @@ +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.23.0 h1:D7l5jspkc4kwBYRWoZE4DQnu6LVpLwDsMZjBKS4wZLQ= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.23.0/go.mod h1:w5pDIZuawUmY3Bj4tVx3Xb8KS96ToB0j315w9rqpAg0= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.14.0 h1:NVS/4LOQfkBpk+B1VopIzv1ptmYeEskA8w/3K/w7vjo= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.14.0/go.mod h1:RG0cZndeZM17StwohYclmcXSr4oOJ8b1I5hB8llIc6Y= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.9.2 h1:Px2KVERcYEg2Lv25AqC2hVr0xUWaq94wuEObLIkYzmA= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.9.2/go.mod h1:CdSJQNNzZhCkwDaV27XV1w48ZBPtxe7mlrZAsPNxD5g= +github.com/Azure/azure-sdk-for-go/sdk/keyvault/azcertificates v0.3.0 h1:XA+SA4ftUu4YuI+WKhSuGC5IubhBVjv2uat2zYlfF+0= +github.com/Azure/azure-sdk-for-go/sdk/keyvault/azcertificates v0.3.0/go.mod h1:wsBD1Qnm3+LVvHC4JOLGNwosCz4veZ9mmClsBOctQSA= +github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.3.0 h1:0gy84rslo34rGGBe2cDxfs4iDMwbKc0/4yDna1S7j8Q= +github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.3.0/go.mod h1:mu846WjGmdK5vWqWv25J416znWpnFjZp4+O34KW8H7U= +github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0 h1:WVsrXCnHlDDX8ls+tootqRE87/hL9S/g4ewig9RsD/c= +github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0/go.mod h1:Vt9sXTKwMyGcOxSmLDMnGPgqsUg7m8pe215qMLrDXw4= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= +github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= +github.com/golang-jwt/jwt v3.2.1+incompatible h1:73Z+4BJcrTC+KczS6WvTPvRGOp1WmfEP4Q1lOd9Z/+c= +github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= +github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= +github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= +github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI= +github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 h1:pLI5jrR7OSLijeIDcmRxNmw2api+jEfxLoykJVice/E= +golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f h1:OfiFi4JbukWwe3lzw+xunroH1mnC1e2Gy5cxNJApiSY= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 h1:id054HUawV2/6IGm2IV8KZQjqtwAOo2CYlOToYqa0d0= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= diff --git a/sdk/keyvault/azcertificates/testdata/perf/main.go b/sdk/keyvault/azcertificates/testdata/perf/main.go new file mode 100644 index 000000000000..163410024ad5 --- /dev/null +++ b/sdk/keyvault/azcertificates/testdata/perf/main.go @@ -0,0 +1,12 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. + +package main + +import "github.com/Azure/azure-sdk-for-go/sdk/internal/perf" + +func main() { + perf.Run(map[string]perf.PerfMethods{ + "GetCertificateTest": {Register: nil, New: NewGetCertificateTest}, + }) +} From 41804936d21909178e406e559ad8facc9f23ad50 Mon Sep 17 00:00:00 2001 From: seankane-msft Date: Fri, 8 Apr 2022 15:27:34 -0400 Subject: [PATCH 02/11] keys perf tests --- .../testdata/perf/get_certificate.go | 16 +-- sdk/keyvault/azkeys/testdata/perf/decrypt.go | 132 ++++++++++++++++++ sdk/keyvault/azkeys/testdata/perf/get_key.go | 98 +++++++++++++ sdk/keyvault/azkeys/testdata/perf/go.mod | 23 +++ sdk/keyvault/azkeys/testdata/perf/go.sum | 57 ++++++++ sdk/keyvault/azkeys/testdata/perf/main.go | 15 ++ sdk/keyvault/azkeys/testdata/perf/sign.go | 129 +++++++++++++++++ sdk/keyvault/azkeys/testdata/perf/unwrap.go | 132 ++++++++++++++++++ 8 files changed, 594 insertions(+), 8 deletions(-) create mode 100644 sdk/keyvault/azkeys/testdata/perf/decrypt.go create mode 100644 sdk/keyvault/azkeys/testdata/perf/get_key.go create mode 100644 sdk/keyvault/azkeys/testdata/perf/go.mod create mode 100644 sdk/keyvault/azkeys/testdata/perf/go.sum create mode 100644 sdk/keyvault/azkeys/testdata/perf/main.go create mode 100644 sdk/keyvault/azkeys/testdata/perf/sign.go create mode 100644 sdk/keyvault/azkeys/testdata/perf/unwrap.go diff --git a/sdk/keyvault/azcertificates/testdata/perf/get_certificate.go b/sdk/keyvault/azcertificates/testdata/perf/get_certificate.go index cdf8fa64d5b7..e030887e7fc2 100644 --- a/sdk/keyvault/azcertificates/testdata/perf/get_certificate.go +++ b/sdk/keyvault/azcertificates/testdata/perf/get_certificate.go @@ -60,8 +60,8 @@ func NewGetCertificateTest(ctx context.Context, options perf.PerfTestOptions) (p return d, nil } -func (d *GetCertificateTest) GlobalCleanup(ctx context.Context) error { - poller, err := d.client.BeginDeleteCertificate(ctx, d.certificateName, nil) +func (gct *GetCertificateTest) GlobalCleanup(ctx context.Context) error { + poller, err := gct.client.BeginDeleteCertificate(ctx, gct.certificateName, nil) if err != nil { return err } @@ -78,17 +78,17 @@ type GetCertificatePerfTest struct { } // NewPerfTest is called once per goroutine -func (g *GetCertificateTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { +func (gct *GetCertificateTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { return &GetCertificatePerfTest{ - GetCertificateTest: g, + GetCertificateTest: gct, PerfTestOptions: *options, - client: g.client, - certificateName: g.certificateName, + client: gct.client, + certificateName: gct.certificateName, }, nil } -func (d *GetCertificatePerfTest) Run(ctx context.Context) error { - _, err := d.client.GetCertificate(ctx, d.certificateName, nil) +func (gcpt *GetCertificatePerfTest) Run(ctx context.Context) error { + _, err := gcpt.client.GetCertificate(ctx, gcpt.certificateName, nil) return err } diff --git a/sdk/keyvault/azkeys/testdata/perf/decrypt.go b/sdk/keyvault/azkeys/testdata/perf/decrypt.go new file mode 100644 index 000000000000..29bbb4d6a8f5 --- /dev/null +++ b/sdk/keyvault/azkeys/testdata/perf/decrypt.go @@ -0,0 +1,132 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. + +package main + +import ( + "context" + "fmt" + "math/rand" + "os" + "time" + + "github.com/Azure/azure-sdk-for-go/sdk/azcore" + "github.com/Azure/azure-sdk-for-go/sdk/azidentity" + "github.com/Azure/azure-sdk-for-go/sdk/internal/perf" + "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys" + "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys/crypto" +) + +type decryptTestOptions struct{} + +var decryptTestOpts decryptTestOptions = decryptTestOptions{} + +type DecryptTest struct { + perf.PerfTestOptions + keyName string + client *azkeys.Client + cryptoClient *crypto.Client + encrypAlg crypto.EncryptionAlg + cipherText []byte +} + +// NewDecryptTest is called once per process +func NewDecryptTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { + certName := "livekvtestgetcertperfkey" + d := &DecryptTest{ + PerfTestOptions: options, + keyName: certName, + encrypAlg: crypto.EncryptionAlgRSAOAEP256, + } + + vaultURL, ok := os.LookupEnv("AZURE_KEYVAULT_URL") + if !ok { + return nil, fmt.Errorf("the environment variable 'AZURE_KEYVAULT_URL' could not be found") + } + + cred, err := azidentity.NewDefaultAzureCredential(nil) + if err != nil { + panic(err) + } + + client, err := azkeys.NewClient(vaultURL, cred, &azkeys.ClientOptions{ + ClientOptions: azcore.ClientOptions{ + Transport: options.Transporter, + }, + }) + if err != nil { + return nil, err + } + + resp, err := client.CreateRSAKey(ctx, d.keyName, nil) + if err != nil { + return nil, err + } + + cryptoClient, err := crypto.NewClient(*resp.ID, cred, &crypto.ClientOptions{ + ClientOptions: azcore.ClientOptions{ + Transport: options.Transporter, + }, + }) + if err != nil { + return nil, err + } + + d.cryptoClient = cryptoClient + d.client = client + + b := make([]byte, 32) + _, err = rand.Read(b) + if err != nil { + return nil, err + } + + result, err := d.cryptoClient.Encrypt(ctx, d.encrypAlg, b, nil) + if err != nil { + return nil, err + } + d.cipherText = result.Ciphertext + return d, nil +} + +func (gct *DecryptTest) GlobalCleanup(ctx context.Context) error { + poller, err := gct.client.BeginDeleteKey(ctx, gct.keyName, nil) + if err != nil { + return err + } + + _, err = poller.PollUntilDone(ctx, 500*time.Millisecond) + if err != nil { + return err + } + + _, err = gct.client.PurgeDeletedKey(ctx, gct.keyName, nil) + return err +} + +type DecryptPerfTest struct { + *DecryptTest + perf.PerfTestOptions + cryptoClient *crypto.Client + alg crypto.EncryptionAlg + cipher []byte +} + +// NewPerfTest is called once per goroutine +func (gct *DecryptTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { + return &DecryptPerfTest{ + DecryptTest: gct, + PerfTestOptions: *options, + alg: gct.encrypAlg, + cipher: gct.cipherText, + }, nil +} + +func (gcpt *DecryptPerfTest) Run(ctx context.Context) error { + _, err := gcpt.cryptoClient.Decrypt(ctx, gcpt.alg, gcpt.cipher, nil) + return err +} + +func (*DecryptPerfTest) Cleanup(ctx context.Context) error { + return nil +} diff --git a/sdk/keyvault/azkeys/testdata/perf/get_key.go b/sdk/keyvault/azkeys/testdata/perf/get_key.go new file mode 100644 index 000000000000..a1120807a02c --- /dev/null +++ b/sdk/keyvault/azkeys/testdata/perf/get_key.go @@ -0,0 +1,98 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. + +package main + +import ( + "context" + "fmt" + "os" + "time" + + "github.com/Azure/azure-sdk-for-go/sdk/azidentity" + "github.com/Azure/azure-sdk-for-go/sdk/internal/perf" + "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys" +) + +type getCertificatesTestOptions struct{} + +var getCertTestOpts decryptTestOptions = decryptTestOptions{} + +type GetKeyTest struct { + perf.PerfTestOptions + keyName string + client *azkeys.Client +} + +// NewGetCertificateTest is called once per process +func NewGetCertificateTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { + certName := "livekvtestgetcertperfkey" + d := &GetKeyTest{ + PerfTestOptions: options, + keyName: certName, + } + + vaultURL, ok := os.LookupEnv("AZURE_KEYVAULT_URL") + if !ok { + return nil, fmt.Errorf("the environment variable 'AZURE_KEYVAULT_URL' could not be found") + } + + cred, err := azidentity.NewDefaultAzureCredential(nil) + if err != nil { + panic(err) + } + + client, err := azkeys.NewClient(vaultURL, cred, nil) + if err != nil { + return nil, err + } + + _, err = client.CreateRSAKey(ctx, d.keyName, nil) + if err != nil { + return nil, err + } + + d.client = client + return d, nil +} + +func (gct *GetKeyTest) GlobalCleanup(ctx context.Context) error { + poller, err := gct.client.BeginDeleteKey(ctx, gct.keyName, nil) + if err != nil { + return err + } + + _, err = poller.PollUntilDone(ctx, 500*time.Millisecond) + if err != nil { + return err + } + + _, err = gct.client.PurgeDeletedKey(ctx, gct.keyName, nil) + return err +} + +type GetKeyPerfTest struct { + *GetKeyTest + perf.PerfTestOptions + client *azkeys.Client + keyName string +} + +// NewPerfTest is called once per goroutine +func (gct *GetKeyTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { + return &GetKeyPerfTest{ + GetKeyTest: gct, + PerfTestOptions: *options, + client: gct.client, + keyName: gct.keyName, + }, nil +} + +func (gcpt *GetKeyPerfTest) Run(ctx context.Context) error { + _, err := gcpt.client.GetKey(ctx, gcpt.keyName, nil) + return err +} + +func (*GetKeyPerfTest) Cleanup(ctx context.Context) error { + return nil +} diff --git a/sdk/keyvault/azkeys/testdata/perf/go.mod b/sdk/keyvault/azkeys/testdata/perf/go.mod new file mode 100644 index 000000000000..769342f6223a --- /dev/null +++ b/sdk/keyvault/azkeys/testdata/perf/go.mod @@ -0,0 +1,23 @@ +module github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys/testdata/perf + +go 1.18 + +require ( + github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.14.0 + github.com/Azure/azure-sdk-for-go/sdk/internal v0.9.2 + github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.5.0 +) + +require ( + github.com/Azure/azure-sdk-for-go/sdk/azcore v0.23.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.3.0 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0 // indirect + github.com/golang-jwt/jwt v3.2.1+incompatible // indirect + github.com/google/uuid v1.1.1 // indirect + github.com/kylelemons/godebug v1.1.0 // indirect + github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect + golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 // indirect + golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f // indirect + golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 // indirect + golang.org/x/text v0.3.7 // indirect +) diff --git a/sdk/keyvault/azkeys/testdata/perf/go.sum b/sdk/keyvault/azkeys/testdata/perf/go.sum new file mode 100644 index 000000000000..1cd750172cda --- /dev/null +++ b/sdk/keyvault/azkeys/testdata/perf/go.sum @@ -0,0 +1,57 @@ +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.23.0 h1:D7l5jspkc4kwBYRWoZE4DQnu6LVpLwDsMZjBKS4wZLQ= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.23.0/go.mod h1:w5pDIZuawUmY3Bj4tVx3Xb8KS96ToB0j315w9rqpAg0= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.14.0 h1:NVS/4LOQfkBpk+B1VopIzv1ptmYeEskA8w/3K/w7vjo= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.14.0/go.mod h1:RG0cZndeZM17StwohYclmcXSr4oOJ8b1I5hB8llIc6Y= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.9.2 h1:Px2KVERcYEg2Lv25AqC2hVr0xUWaq94wuEObLIkYzmA= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.9.2/go.mod h1:CdSJQNNzZhCkwDaV27XV1w48ZBPtxe7mlrZAsPNxD5g= +github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.5.0 h1:iFXbD0KUqlYkw8sh/UEBiXLwvyoG5jS+6BhHCmc7ie0= +github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.5.0/go.mod h1:29ZhGK5zV3WYQoqyl/2JZP7oPbigINNYJn5KxuEYPso= +github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.3.0 h1:0gy84rslo34rGGBe2cDxfs4iDMwbKc0/4yDna1S7j8Q= +github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.3.0/go.mod h1:mu846WjGmdK5vWqWv25J416znWpnFjZp4+O34KW8H7U= +github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0 h1:WVsrXCnHlDDX8ls+tootqRE87/hL9S/g4ewig9RsD/c= +github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0/go.mod h1:Vt9sXTKwMyGcOxSmLDMnGPgqsUg7m8pe215qMLrDXw4= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= +github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= +github.com/golang-jwt/jwt v3.2.1+incompatible h1:73Z+4BJcrTC+KczS6WvTPvRGOp1WmfEP4Q1lOd9Z/+c= +github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= +github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= +github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= +github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI= +github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 h1:pLI5jrR7OSLijeIDcmRxNmw2api+jEfxLoykJVice/E= +golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f h1:OfiFi4JbukWwe3lzw+xunroH1mnC1e2Gy5cxNJApiSY= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 h1:id054HUawV2/6IGm2IV8KZQjqtwAOo2CYlOToYqa0d0= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= diff --git a/sdk/keyvault/azkeys/testdata/perf/main.go b/sdk/keyvault/azkeys/testdata/perf/main.go new file mode 100644 index 000000000000..0d016e46bdaf --- /dev/null +++ b/sdk/keyvault/azkeys/testdata/perf/main.go @@ -0,0 +1,15 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. + +package main + +import "github.com/Azure/azure-sdk-for-go/sdk/internal/perf" + +func main() { + perf.Run(map[string]perf.PerfMethods{ + "GetKeyTest": {Register: nil, New: NewGetCertificateTest}, + "DecryptTest": {Register: nil, New: NewDecryptTest}, + "SignTest": {Register: nil, New: NewSignTest}, + "UnwrapTest": {Register: nil, New: NewUnwrapTest}, + }) +} diff --git a/sdk/keyvault/azkeys/testdata/perf/sign.go b/sdk/keyvault/azkeys/testdata/perf/sign.go new file mode 100644 index 000000000000..f4bb2979818f --- /dev/null +++ b/sdk/keyvault/azkeys/testdata/perf/sign.go @@ -0,0 +1,129 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. + +package main + +import ( + "context" + "crypto/sha256" + "fmt" + "math/rand" + "os" + "time" + + "github.com/Azure/azure-sdk-for-go/sdk/azcore" + "github.com/Azure/azure-sdk-for-go/sdk/azidentity" + "github.com/Azure/azure-sdk-for-go/sdk/internal/perf" + "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys" + "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys/crypto" +) + +type signTestOptions struct{} + +var signTestOpts signTestOptions = signTestOptions{} + +type SignTest struct { + perf.PerfTestOptions + keyName string + client *azkeys.Client + cryptoClient *crypto.Client + encrypAlg crypto.SignatureAlg + digest []byte +} + +// NewSignTest is called once per process +func NewSignTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { + certName := "livekvtestgetcertperfkey" + d := &SignTest{ + PerfTestOptions: options, + keyName: certName, + encrypAlg: crypto.SignatureAlgRS256, + } + + vaultURL, ok := os.LookupEnv("AZURE_KEYVAULT_URL") + if !ok { + return nil, fmt.Errorf("the environment variable 'AZURE_KEYVAULT_URL' could not be found") + } + + cred, err := azidentity.NewDefaultAzureCredential(nil) + if err != nil { + panic(err) + } + + client, err := azkeys.NewClient(vaultURL, cred, &azkeys.ClientOptions{ + ClientOptions: azcore.ClientOptions{ + Transport: options.Transporter, + }, + }) + if err != nil { + return nil, err + } + + resp, err := client.CreateRSAKey(ctx, d.keyName, nil) + if err != nil { + return nil, err + } + + cryptoClient, err := crypto.NewClient(*resp.ID, cred, &crypto.ClientOptions{ + ClientOptions: azcore.ClientOptions{ + Transport: options.Transporter, + }, + }) + if err != nil { + return nil, err + } + + d.cryptoClient = cryptoClient + d.client = client + + b := make([]byte, 32) + _, err = rand.Read(b) + if err != nil { + return nil, err + } + hasher := sha256.New() + d.digest = hasher.Sum(b) + return d, nil +} + +func (gct *SignTest) GlobalCleanup(ctx context.Context) error { + poller, err := gct.client.BeginDeleteKey(ctx, gct.keyName, nil) + if err != nil { + return err + } + + _, err = poller.PollUntilDone(ctx, 500*time.Millisecond) + if err != nil { + return err + } + + _, err = gct.client.PurgeDeletedKey(ctx, gct.keyName, nil) + return err +} + +type SignPerfTest struct { + *SignTest + perf.PerfTestOptions + cryptoClient *crypto.Client + alg crypto.SignatureAlg + digest []byte +} + +// NewPerfTest is called once per goroutine +func (gct *SignTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { + return &SignPerfTest{ + SignTest: gct, + PerfTestOptions: *options, + alg: gct.encrypAlg, + digest: gct.digest, + }, nil +} + +func (gcpt *SignPerfTest) Run(ctx context.Context) error { + _, err := gcpt.cryptoClient.Sign(ctx, gcpt.alg, gcpt.digest, nil) + return err +} + +func (*SignPerfTest) Cleanup(ctx context.Context) error { + return nil +} diff --git a/sdk/keyvault/azkeys/testdata/perf/unwrap.go b/sdk/keyvault/azkeys/testdata/perf/unwrap.go new file mode 100644 index 000000000000..5ca9a42c52e1 --- /dev/null +++ b/sdk/keyvault/azkeys/testdata/perf/unwrap.go @@ -0,0 +1,132 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. + +package main + +import ( + "context" + "fmt" + "math/rand" + "os" + "time" + + "github.com/Azure/azure-sdk-for-go/sdk/azcore" + "github.com/Azure/azure-sdk-for-go/sdk/azidentity" + "github.com/Azure/azure-sdk-for-go/sdk/internal/perf" + "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys" + "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys/crypto" +) + +type unwrapTestOptions struct{} + +var unwrapTestOpts unwrapTestOptions = unwrapTestOptions{} + +type UnwrapTest struct { + perf.PerfTestOptions + keyName string + client *azkeys.Client + cryptoClient *crypto.Client + wrapAlg crypto.WrapAlg + encryptedKey []byte +} + +// NewUnwrapTest is called once per process +func NewUnwrapTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { + certName := "livekvtestgetcertperfkey" + d := &UnwrapTest{ + PerfTestOptions: options, + keyName: certName, + wrapAlg: crypto.WrapAlgRSAOAEP256, + } + + vaultURL, ok := os.LookupEnv("AZURE_KEYVAULT_URL") + if !ok { + return nil, fmt.Errorf("the environment variable 'AZURE_KEYVAULT_URL' could not be found") + } + + cred, err := azidentity.NewDefaultAzureCredential(nil) + if err != nil { + panic(err) + } + + client, err := azkeys.NewClient(vaultURL, cred, &azkeys.ClientOptions{ + ClientOptions: azcore.ClientOptions{ + Transport: options.Transporter, + }, + }) + if err != nil { + return nil, err + } + + resp, err := client.CreateRSAKey(ctx, d.keyName, nil) + if err != nil { + return nil, err + } + + cryptoClient, err := crypto.NewClient(*resp.ID, cred, &crypto.ClientOptions{ + ClientOptions: azcore.ClientOptions{ + Transport: options.Transporter, + }, + }) + if err != nil { + return nil, err + } + + b := make([]byte, 32) + _, err = rand.Read(b) + if err != nil { + return nil, err + } + + result, err := cryptoClient.WrapKey(ctx, d.wrapAlg, b, nil) + if err != nil { + return nil, err + } + + d.encryptedKey = result.EncryptedKey + d.cryptoClient = cryptoClient + d.client = client + return d, nil +} + +func (gct *UnwrapTest) GlobalCleanup(ctx context.Context) error { + poller, err := gct.client.BeginDeleteKey(ctx, gct.keyName, nil) + if err != nil { + return err + } + + _, err = poller.PollUntilDone(ctx, 500*time.Millisecond) + if err != nil { + return err + } + + _, err = gct.client.PurgeDeletedKey(ctx, gct.keyName, nil) + return err +} + +type UnwrapPerfTest struct { + *UnwrapTest + perf.PerfTestOptions + cryptoClient *crypto.Client + alg crypto.WrapAlg + encryptedKey []byte +} + +// NewPerfTest is called once per goroutine +func (gct *UnwrapTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { + return &UnwrapPerfTest{ + UnwrapTest: gct, + PerfTestOptions: *options, + alg: gct.wrapAlg, + encryptedKey: gct.encryptedKey, + }, nil +} + +func (gcpt *UnwrapPerfTest) Run(ctx context.Context) error { + _, err := gcpt.cryptoClient.UnwrapKey(ctx, gcpt.alg, gcpt.encryptedKey, nil) + return err +} + +func (*UnwrapPerfTest) Cleanup(ctx context.Context) error { + return nil +} From dd5cf8bcb6a06b2b0a44efa031b7f304188a63ae Mon Sep 17 00:00:00 2001 From: seankane-msft Date: Fri, 8 Apr 2022 15:50:24 -0400 Subject: [PATCH 03/11] adding perf tests for keys and secrets --- sdk/keyvault/azkeys/testdata/perf/get_key.go | 8 ++++---- sdk/keyvault/azkeys/testdata/perf/go.mod | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sdk/keyvault/azkeys/testdata/perf/get_key.go b/sdk/keyvault/azkeys/testdata/perf/get_key.go index a1120807a02c..4b6cf7846b96 100644 --- a/sdk/keyvault/azkeys/testdata/perf/get_key.go +++ b/sdk/keyvault/azkeys/testdata/perf/get_key.go @@ -14,9 +14,9 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys" ) -type getCertificatesTestOptions struct{} +type getKeysTestOptions struct{} -var getCertTestOpts decryptTestOptions = decryptTestOptions{} +var getCertTestOpts getKeysTestOptions = getKeysTestOptions{} type GetKeyTest struct { perf.PerfTestOptions @@ -74,7 +74,7 @@ func (gct *GetKeyTest) GlobalCleanup(ctx context.Context) error { type GetKeyPerfTest struct { *GetKeyTest perf.PerfTestOptions - client *azkeys.Client + client *azkeys.Client keyName string } @@ -84,7 +84,7 @@ func (gct *GetKeyTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOp GetKeyTest: gct, PerfTestOptions: *options, client: gct.client, - keyName: gct.keyName, + keyName: gct.keyName, }, nil } diff --git a/sdk/keyvault/azkeys/testdata/perf/go.mod b/sdk/keyvault/azkeys/testdata/perf/go.mod index 769342f6223a..41743d1131f2 100644 --- a/sdk/keyvault/azkeys/testdata/perf/go.mod +++ b/sdk/keyvault/azkeys/testdata/perf/go.mod @@ -3,13 +3,13 @@ module github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys/testdata/perf go 1.18 require ( + github.com/Azure/azure-sdk-for-go/sdk/azcore v0.23.0 github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.14.0 github.com/Azure/azure-sdk-for-go/sdk/internal v0.9.2 github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.5.0 ) require ( - github.com/Azure/azure-sdk-for-go/sdk/azcore v0.23.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.3.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0 // indirect github.com/golang-jwt/jwt v3.2.1+incompatible // indirect From 95af9cb0607c0019f7a2f8969a78ee5031820f9c Mon Sep 17 00:00:00 2001 From: seankane-msft Date: Fri, 8 Apr 2022 15:58:39 -0400 Subject: [PATCH 04/11] making edits --- .../testdata/perf/get_certificate.go | 12 +- sdk/keyvault/azkeys/testdata/perf/decrypt.go | 3 +- sdk/keyvault/azkeys/testdata/perf/get_key.go | 13 +- sdk/keyvault/azkeys/testdata/perf/sign.go | 3 +- sdk/keyvault/azkeys/testdata/perf/unwrap.go | 3 +- .../azsecrets/testdata/perf/get_secret.go | 98 ++++++++++++++ sdk/keyvault/azsecrets/testdata/perf/go.mod | 23 ++++ sdk/keyvault/azsecrets/testdata/perf/go.sum | 57 +++++++++ .../azsecrets/testdata/perf/list_secrets.go | 121 ++++++++++++++++++ sdk/keyvault/azsecrets/testdata/perf/main.go | 13 ++ 10 files changed, 333 insertions(+), 13 deletions(-) create mode 100644 sdk/keyvault/azsecrets/testdata/perf/get_secret.go create mode 100644 sdk/keyvault/azsecrets/testdata/perf/go.mod create mode 100644 sdk/keyvault/azsecrets/testdata/perf/go.sum create mode 100644 sdk/keyvault/azsecrets/testdata/perf/list_secrets.go create mode 100644 sdk/keyvault/azsecrets/testdata/perf/main.go diff --git a/sdk/keyvault/azcertificates/testdata/perf/get_certificate.go b/sdk/keyvault/azcertificates/testdata/perf/get_certificate.go index e030887e7fc2..61f383bf2c9b 100644 --- a/sdk/keyvault/azcertificates/testdata/perf/get_certificate.go +++ b/sdk/keyvault/azcertificates/testdata/perf/get_certificate.go @@ -9,6 +9,7 @@ import ( "os" "time" + "github.com/Azure/azure-sdk-for-go/sdk/azcore" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/internal/perf" "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azcertificates" @@ -42,7 +43,11 @@ func NewGetCertificateTest(ctx context.Context, options perf.PerfTestOptions) (p panic(err) } - client, err := azcertificates.NewClient(vaultURL, cred, nil) + client, err := azcertificates.NewClient(vaultURL, cred, &azcertificates.ClientOptions{ + ClientOptions: azcore.ClientOptions{ + Transport: options.Transporter, + }, + }) if err != nil { return nil, err } @@ -67,6 +72,11 @@ func (gct *GetCertificateTest) GlobalCleanup(ctx context.Context) error { } _, err = poller.PollUntilDone(ctx, 500*time.Millisecond) + if err != nil { + return err + } + + _, err = gct.client.PurgeDeletedCertificate(ctx, gct.certificateName, nil) return err } diff --git a/sdk/keyvault/azkeys/testdata/perf/decrypt.go b/sdk/keyvault/azkeys/testdata/perf/decrypt.go index 29bbb4d6a8f5..b0cbbf7dabd5 100644 --- a/sdk/keyvault/azkeys/testdata/perf/decrypt.go +++ b/sdk/keyvault/azkeys/testdata/perf/decrypt.go @@ -32,10 +32,9 @@ type DecryptTest struct { // NewDecryptTest is called once per process func NewDecryptTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { - certName := "livekvtestgetcertperfkey" d := &DecryptTest{ PerfTestOptions: options, - keyName: certName, + keyName: "livekvtestdecryptperfkey", encrypAlg: crypto.EncryptionAlgRSAOAEP256, } diff --git a/sdk/keyvault/azkeys/testdata/perf/get_key.go b/sdk/keyvault/azkeys/testdata/perf/get_key.go index 4b6cf7846b96..3ca21d5f6b1b 100644 --- a/sdk/keyvault/azkeys/testdata/perf/get_key.go +++ b/sdk/keyvault/azkeys/testdata/perf/get_key.go @@ -9,6 +9,7 @@ import ( "os" "time" + "github.com/Azure/azure-sdk-for-go/sdk/azcore" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/internal/perf" "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys" @@ -26,10 +27,9 @@ type GetKeyTest struct { // NewGetCertificateTest is called once per process func NewGetCertificateTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { - certName := "livekvtestgetcertperfkey" d := &GetKeyTest{ PerfTestOptions: options, - keyName: certName, + keyName: "livekvtestgetkeyperfkey", } vaultURL, ok := os.LookupEnv("AZURE_KEYVAULT_URL") @@ -42,10 +42,11 @@ func NewGetCertificateTest(ctx context.Context, options perf.PerfTestOptions) (p panic(err) } - client, err := azkeys.NewClient(vaultURL, cred, nil) - if err != nil { - return nil, err - } + client, err := azkeys.NewClient(vaultURL, cred, &azkeys.ClientOptions{ + ClientOptions: azcore.ClientOptions{ + Transport: options.Transporter, + }, + }) _, err = client.CreateRSAKey(ctx, d.keyName, nil) if err != nil { diff --git a/sdk/keyvault/azkeys/testdata/perf/sign.go b/sdk/keyvault/azkeys/testdata/perf/sign.go index f4bb2979818f..8576cb28e291 100644 --- a/sdk/keyvault/azkeys/testdata/perf/sign.go +++ b/sdk/keyvault/azkeys/testdata/perf/sign.go @@ -33,10 +33,9 @@ type SignTest struct { // NewSignTest is called once per process func NewSignTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { - certName := "livekvtestgetcertperfkey" d := &SignTest{ PerfTestOptions: options, - keyName: certName, + keyName: "livekvtestsignperfkey", encrypAlg: crypto.SignatureAlgRS256, } diff --git a/sdk/keyvault/azkeys/testdata/perf/unwrap.go b/sdk/keyvault/azkeys/testdata/perf/unwrap.go index 5ca9a42c52e1..dd04b7cccd9e 100644 --- a/sdk/keyvault/azkeys/testdata/perf/unwrap.go +++ b/sdk/keyvault/azkeys/testdata/perf/unwrap.go @@ -32,10 +32,9 @@ type UnwrapTest struct { // NewUnwrapTest is called once per process func NewUnwrapTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { - certName := "livekvtestgetcertperfkey" d := &UnwrapTest{ PerfTestOptions: options, - keyName: certName, + keyName: "livekvtestunwrapperfkey", wrapAlg: crypto.WrapAlgRSAOAEP256, } diff --git a/sdk/keyvault/azsecrets/testdata/perf/get_secret.go b/sdk/keyvault/azsecrets/testdata/perf/get_secret.go new file mode 100644 index 000000000000..8962b0c5763f --- /dev/null +++ b/sdk/keyvault/azsecrets/testdata/perf/get_secret.go @@ -0,0 +1,98 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. + +package main + +import ( + "context" + "fmt" + "os" + "time" + + "github.com/Azure/azure-sdk-for-go/sdk/azidentity" + "github.com/Azure/azure-sdk-for-go/sdk/internal/perf" + "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets" +) + +type getSecretTestOptions struct{} + +var getSecretTestOpts getSecretTestOptions = getSecretTestOptions{} + +type GetSecretTest struct { + perf.PerfTestOptions + secretName string + client *azsecrets.Client +} + +// NewGetSecretTest is called once per process +func NewGetSecretTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { + d := &GetSecretTest{ + PerfTestOptions: options, + secretName: "livekvtestgetsecretperfsecret", + } + + vaultURL, ok := os.LookupEnv("AZURE_KEYVAULT_URL") + if !ok { + return nil, fmt.Errorf("the environment variable 'AZURE_KEYVAULT_URL' could not be found") + } + + cred, err := azidentity.NewDefaultAzureCredential(nil) + if err != nil { + panic(err) + } + + client, err := azsecrets.NewClient(vaultURL, cred, &azsecrets.ClientOptions{ + ClientOptions: azcore.ClientOptions{ + Transport: options.Transporter, + }, + }) + + _, err = client.SetSecret(ctx, d.secretName, "secret-value", nil) + if err != nil { + return nil, err + } + + d.client = client + return d, nil +} + +func (gct *GetSecretTest) GlobalCleanup(ctx context.Context) error { + poller, err := gct.client.BeginDeleteSecret(ctx, gct.secretName, nil) + if err != nil { + return err + } + + _, err = poller.PollUntilDone(ctx, 500*time.Millisecond) + if err != nil { + return err + } + + _, err = gct.client.PurgeDeletedSecret(ctx, gct.secretName, nil) + return err +} + +type GetSecretPerfTest struct { + *GetSecretTest + perf.PerfTestOptions + client *azsecrets.Client + secretName string +} + +// NewPerfTest is called once per goroutine +func (gct *GetSecretTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { + return &GetSecretPerfTest{ + GetSecretTest: gct, + PerfTestOptions: *options, + client: gct.client, + secretName: gct.secretName, + }, nil +} + +func (gcpt *GetSecretPerfTest) Run(ctx context.Context) error { + _, err := gcpt.client.GetSecret(ctx, gcpt.secretName, nil) + return err +} + +func (*GetSecretPerfTest) Cleanup(ctx context.Context) error { + return nil +} diff --git a/sdk/keyvault/azsecrets/testdata/perf/go.mod b/sdk/keyvault/azsecrets/testdata/perf/go.mod new file mode 100644 index 000000000000..ba7511739d83 --- /dev/null +++ b/sdk/keyvault/azsecrets/testdata/perf/go.mod @@ -0,0 +1,23 @@ +module github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets/testdata/perf + +go 1.18 + +require ( + github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.14.0 + github.com/Azure/azure-sdk-for-go/sdk/internal v0.9.2 + github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets v0.7.0 +) + +require ( + github.com/Azure/azure-sdk-for-go/sdk/azcore v0.23.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.3.0 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0 // indirect + github.com/golang-jwt/jwt v3.2.1+incompatible // indirect + github.com/google/uuid v1.1.1 // indirect + github.com/kylelemons/godebug v1.1.0 // indirect + github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect + golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 // indirect + golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f // indirect + golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 // indirect + golang.org/x/text v0.3.7 // indirect +) diff --git a/sdk/keyvault/azsecrets/testdata/perf/go.sum b/sdk/keyvault/azsecrets/testdata/perf/go.sum new file mode 100644 index 000000000000..81c76e9e3ba2 --- /dev/null +++ b/sdk/keyvault/azsecrets/testdata/perf/go.sum @@ -0,0 +1,57 @@ +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.23.0 h1:D7l5jspkc4kwBYRWoZE4DQnu6LVpLwDsMZjBKS4wZLQ= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.23.0/go.mod h1:w5pDIZuawUmY3Bj4tVx3Xb8KS96ToB0j315w9rqpAg0= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.14.0 h1:NVS/4LOQfkBpk+B1VopIzv1ptmYeEskA8w/3K/w7vjo= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.14.0/go.mod h1:RG0cZndeZM17StwohYclmcXSr4oOJ8b1I5hB8llIc6Y= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.9.2 h1:Px2KVERcYEg2Lv25AqC2hVr0xUWaq94wuEObLIkYzmA= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.9.2/go.mod h1:CdSJQNNzZhCkwDaV27XV1w48ZBPtxe7mlrZAsPNxD5g= +github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets v0.7.0 h1:XkMDpP4GWkeW3RLxJ6JKjJGTD0Xq2je/SBeKG+WPTuI= +github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets v0.7.0/go.mod h1:HgRcYBKlSo9ZWdxt3Y36aIlxKsSk9pdAmB4WvYv9FX4= +github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.3.0 h1:0gy84rslo34rGGBe2cDxfs4iDMwbKc0/4yDna1S7j8Q= +github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.3.0/go.mod h1:mu846WjGmdK5vWqWv25J416znWpnFjZp4+O34KW8H7U= +github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0 h1:WVsrXCnHlDDX8ls+tootqRE87/hL9S/g4ewig9RsD/c= +github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0/go.mod h1:Vt9sXTKwMyGcOxSmLDMnGPgqsUg7m8pe215qMLrDXw4= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= +github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= +github.com/golang-jwt/jwt v3.2.1+incompatible h1:73Z+4BJcrTC+KczS6WvTPvRGOp1WmfEP4Q1lOd9Z/+c= +github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= +github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= +github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= +github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI= +github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 h1:pLI5jrR7OSLijeIDcmRxNmw2api+jEfxLoykJVice/E= +golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f h1:OfiFi4JbukWwe3lzw+xunroH1mnC1e2Gy5cxNJApiSY= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 h1:id054HUawV2/6IGm2IV8KZQjqtwAOo2CYlOToYqa0d0= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= diff --git a/sdk/keyvault/azsecrets/testdata/perf/list_secrets.go b/sdk/keyvault/azsecrets/testdata/perf/list_secrets.go new file mode 100644 index 000000000000..9f3fceeddb9e --- /dev/null +++ b/sdk/keyvault/azsecrets/testdata/perf/list_secrets.go @@ -0,0 +1,121 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. + +package main + +import ( + "context" + "flag" + "fmt" + "os" + "time" + + "github.com/Azure/azure-sdk-for-go/sdk/azcore" + "github.com/Azure/azure-sdk-for-go/sdk/azidentity" + "github.com/Azure/azure-sdk-for-go/sdk/internal/perf" + "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets" +) + +type getListSecretsTestOptions struct { + count int +} + +var getListSecretsTestOpts getListSecretsTestOptions = getListSecretsTestOptions{ + count: 100, +} + +func registerListSecrets() { + flag.IntVar(&getListSecretsTestOpts.count, "count", 10, "number of secrets to create") +} + +type ListSecretsTest struct { + perf.PerfTestOptions + secretName string + client *azsecrets.Client +} + +// NewListSecretsTest is called once per process +func NewListSecretsTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { + d := &ListSecretsTest{ + PerfTestOptions: options, + secretName: "livekvtestlistsecretperfsecret", + } + + vaultURL, ok := os.LookupEnv("AZURE_KEYVAULT_URL") + if !ok { + return nil, fmt.Errorf("the environment variable 'AZURE_KEYVAULT_URL' could not be found") + } + + cred, err := azidentity.NewDefaultAzureCredential(nil) + if err != nil { + panic(err) + } + + client, err := azsecret.NewClient(vaultURL, cred, &azsecret.ClientOptions{ + ClientOptions: azcore.ClientOptions{ + Transport: options.Transporter, + }, + }) + + for i := 0; i < getListSecretsTestOpts.count; i++ { + _, err = client.SetSecret(ctx, fmt.Sprintf("%s%d", d.secretName, i), "secret-value", nil) + if err != nil { + return nil, err + } + } + + d.client = client + return d, nil +} + +func (gct *ListSecretsTest) GlobalCleanup(ctx context.Context) error { + for i := 0; i < getListSecretsTestOpts.count; i++ { + poller, err := gct.client.BeginDeleteSecret(ctx, fmt.Sprintf("%s%d", gct.secretName, i), nil) + if err != nil { + return err + } + + _, err = poller.PollUntilDone(ctx, 500*time.Millisecond) + if err != nil { + return err + } + + _, err = gct.client.PurgeDeletedSecret(ctx, gct.secretName, nil) + if err != nil { + return err + } + } + return nil +} + +type ListSecretsPerfTest struct { + *ListSecretsTest + perf.PerfTestOptions + client *azsecrets.Client + secretName string +} + +// NewPerfTest is called once per goroutine +func (gct *ListSecretsTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { + return &ListSecretsPerfTest{ + ListSecretsTest: gct, + PerfTestOptions: *options, + client: gct.client, + secretName: gct.secretName, + }, nil +} + +func (gcpt *ListSecretsPerfTest) Run(ctx context.Context) error { + pager := gcpt.client.ListPropertiesOfSecrets(nil) + for pager.More() { + _, err := pager.NextPage(ctx) + if err != nil { + return err + } + } + return nil +} + +func (*ListSecretsPerfTest) Cleanup(ctx context.Context) error { + return nil +} diff --git a/sdk/keyvault/azsecrets/testdata/perf/main.go b/sdk/keyvault/azsecrets/testdata/perf/main.go new file mode 100644 index 000000000000..89ba6562a615 --- /dev/null +++ b/sdk/keyvault/azsecrets/testdata/perf/main.go @@ -0,0 +1,13 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. + +package main + +import "github.com/Azure/azure-sdk-for-go/sdk/internal/perf" + +func main() { + perf.Run(map[string]perf.PerfMethods{ + "GetSecretTest": {Register: nil, New: NewGetSecretTest}, + "ListSecretsTest": {Register: registerListSecrets, New: NewListSecretsTest}, + }) +} From ecff049e0e21c863de7347e52ac9408b4bc836a8 Mon Sep 17 00:00:00 2001 From: seankane-msft Date: Fri, 8 Apr 2022 16:57:17 -0400 Subject: [PATCH 05/11] name changes --- sdk/keyvault/azkeys/testdata/perf/get_key.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sdk/keyvault/azkeys/testdata/perf/get_key.go b/sdk/keyvault/azkeys/testdata/perf/get_key.go index 3ca21d5f6b1b..7fad6022ba39 100644 --- a/sdk/keyvault/azkeys/testdata/perf/get_key.go +++ b/sdk/keyvault/azkeys/testdata/perf/get_key.go @@ -15,9 +15,9 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys" ) -type getKeysTestOptions struct{} +type getKeyTestOptions struct{} -var getCertTestOpts getKeysTestOptions = getKeysTestOptions{} +var getCertTestOpts getKeyTestOptions = getKeyTestOptions{} type GetKeyTest struct { perf.PerfTestOptions @@ -25,8 +25,8 @@ type GetKeyTest struct { client *azkeys.Client } -// NewGetCertificateTest is called once per process -func NewGetCertificateTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { +// NewGetKeyTest is called once per process +func NewGetKeyTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { d := &GetKeyTest{ PerfTestOptions: options, keyName: "livekvtestgetkeyperfkey", From 57669e7c72020899e9772346ac9304e0dd9b15c8 Mon Sep 17 00:00:00 2001 From: seankane-msft Date: Fri, 8 Apr 2022 17:01:56 -0400 Subject: [PATCH 06/11] self review --- sdk/keyvault/azkeys/testdata/perf/get_key.go | 6 +----- sdk/keyvault/azkeys/testdata/perf/sign.go | 6 +++--- sdk/keyvault/azkeys/testdata/perf/unwrap.go | 15 ++++++--------- .../azsecrets/testdata/perf/get_secret.go | 4 ---- .../azsecrets/testdata/perf/list_secrets.go | 6 +----- 5 files changed, 11 insertions(+), 26 deletions(-) diff --git a/sdk/keyvault/azkeys/testdata/perf/get_key.go b/sdk/keyvault/azkeys/testdata/perf/get_key.go index 7fad6022ba39..8cdb6a82c3c2 100644 --- a/sdk/keyvault/azkeys/testdata/perf/get_key.go +++ b/sdk/keyvault/azkeys/testdata/perf/get_key.go @@ -17,7 +17,7 @@ import ( type getKeyTestOptions struct{} -var getCertTestOpts getKeyTestOptions = getKeyTestOptions{} +var getKeyTestOpts getKeyTestOptions = getKeyTestOptions{} type GetKeyTest struct { perf.PerfTestOptions @@ -73,8 +73,6 @@ func (gct *GetKeyTest) GlobalCleanup(ctx context.Context) error { } type GetKeyPerfTest struct { - *GetKeyTest - perf.PerfTestOptions client *azkeys.Client keyName string } @@ -82,8 +80,6 @@ type GetKeyPerfTest struct { // NewPerfTest is called once per goroutine func (gct *GetKeyTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { return &GetKeyPerfTest{ - GetKeyTest: gct, - PerfTestOptions: *options, client: gct.client, keyName: gct.keyName, }, nil diff --git a/sdk/keyvault/azkeys/testdata/perf/sign.go b/sdk/keyvault/azkeys/testdata/perf/sign.go index 8576cb28e291..5d35c0ae0dcf 100644 --- a/sdk/keyvault/azkeys/testdata/perf/sign.go +++ b/sdk/keyvault/azkeys/testdata/perf/sign.go @@ -27,7 +27,7 @@ type SignTest struct { keyName string client *azkeys.Client cryptoClient *crypto.Client - encrypAlg crypto.SignatureAlg + signAlg crypto.SignatureAlg digest []byte } @@ -36,7 +36,7 @@ func NewSignTest(ctx context.Context, options perf.PerfTestOptions) (perf.Global d := &SignTest{ PerfTestOptions: options, keyName: "livekvtestsignperfkey", - encrypAlg: crypto.SignatureAlgRS256, + signAlg: crypto.SignatureAlgRS256, } vaultURL, ok := os.LookupEnv("AZURE_KEYVAULT_URL") @@ -113,7 +113,7 @@ func (gct *SignTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOpti return &SignPerfTest{ SignTest: gct, PerfTestOptions: *options, - alg: gct.encrypAlg, + alg: gct.signAlg, digest: gct.digest, }, nil } diff --git a/sdk/keyvault/azkeys/testdata/perf/unwrap.go b/sdk/keyvault/azkeys/testdata/perf/unwrap.go index dd04b7cccd9e..190ee8313d04 100644 --- a/sdk/keyvault/azkeys/testdata/perf/unwrap.go +++ b/sdk/keyvault/azkeys/testdata/perf/unwrap.go @@ -26,7 +26,7 @@ type UnwrapTest struct { keyName string client *azkeys.Client cryptoClient *crypto.Client - wrapAlg crypto.WrapAlg + alg crypto.WrapAlg encryptedKey []byte } @@ -35,7 +35,7 @@ func NewUnwrapTest(ctx context.Context, options perf.PerfTestOptions) (perf.Glob d := &UnwrapTest{ PerfTestOptions: options, keyName: "livekvtestunwrapperfkey", - wrapAlg: crypto.WrapAlgRSAOAEP256, + alg: crypto.WrapAlgRSAOAEP256, } vaultURL, ok := os.LookupEnv("AZURE_KEYVAULT_URL") @@ -77,7 +77,7 @@ func NewUnwrapTest(ctx context.Context, options perf.PerfTestOptions) (perf.Glob return nil, err } - result, err := cryptoClient.WrapKey(ctx, d.wrapAlg, b, nil) + result, err := cryptoClient.WrapKey(ctx, d.alg, b, nil) if err != nil { return nil, err } @@ -104,8 +104,6 @@ func (gct *UnwrapTest) GlobalCleanup(ctx context.Context) error { } type UnwrapPerfTest struct { - *UnwrapTest - perf.PerfTestOptions cryptoClient *crypto.Client alg crypto.WrapAlg encryptedKey []byte @@ -114,10 +112,9 @@ type UnwrapPerfTest struct { // NewPerfTest is called once per goroutine func (gct *UnwrapTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { return &UnwrapPerfTest{ - UnwrapTest: gct, - PerfTestOptions: *options, - alg: gct.wrapAlg, - encryptedKey: gct.encryptedKey, + cryptoClient: gct.cryptoClient, + alg: gct.alg, + encryptedKey: gct.encryptedKey, }, nil } diff --git a/sdk/keyvault/azsecrets/testdata/perf/get_secret.go b/sdk/keyvault/azsecrets/testdata/perf/get_secret.go index 8962b0c5763f..df32316b69f5 100644 --- a/sdk/keyvault/azsecrets/testdata/perf/get_secret.go +++ b/sdk/keyvault/azsecrets/testdata/perf/get_secret.go @@ -72,8 +72,6 @@ func (gct *GetSecretTest) GlobalCleanup(ctx context.Context) error { } type GetSecretPerfTest struct { - *GetSecretTest - perf.PerfTestOptions client *azsecrets.Client secretName string } @@ -81,8 +79,6 @@ type GetSecretPerfTest struct { // NewPerfTest is called once per goroutine func (gct *GetSecretTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { return &GetSecretPerfTest{ - GetSecretTest: gct, - PerfTestOptions: *options, client: gct.client, secretName: gct.secretName, }, nil diff --git a/sdk/keyvault/azsecrets/testdata/perf/list_secrets.go b/sdk/keyvault/azsecrets/testdata/perf/list_secrets.go index 9f3fceeddb9e..3d2f831244f0 100644 --- a/sdk/keyvault/azsecrets/testdata/perf/list_secrets.go +++ b/sdk/keyvault/azsecrets/testdata/perf/list_secrets.go @@ -25,7 +25,7 @@ var getListSecretsTestOpts getListSecretsTestOptions = getListSecretsTestOptions } func registerListSecrets() { - flag.IntVar(&getListSecretsTestOpts.count, "count", 10, "number of secrets to create") + flag.IntVar(&getListSecretsTestOpts.count, "count", 100, "number of secrets to create") } type ListSecretsTest struct { @@ -89,8 +89,6 @@ func (gct *ListSecretsTest) GlobalCleanup(ctx context.Context) error { } type ListSecretsPerfTest struct { - *ListSecretsTest - perf.PerfTestOptions client *azsecrets.Client secretName string } @@ -98,8 +96,6 @@ type ListSecretsPerfTest struct { // NewPerfTest is called once per goroutine func (gct *ListSecretsTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { return &ListSecretsPerfTest{ - ListSecretsTest: gct, - PerfTestOptions: *options, client: gct.client, secretName: gct.secretName, }, nil From 8c0ce67b2ed5fbdc2865774c1813f0920f705fc6 Mon Sep 17 00:00:00 2001 From: seankane-msft Date: Fri, 8 Apr 2022 17:03:13 -0400 Subject: [PATCH 07/11] removing embedded stuff --- sdk/keyvault/azkeys/testdata/perf/sign.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/sdk/keyvault/azkeys/testdata/perf/sign.go b/sdk/keyvault/azkeys/testdata/perf/sign.go index 5d35c0ae0dcf..22a4c699bbe0 100644 --- a/sdk/keyvault/azkeys/testdata/perf/sign.go +++ b/sdk/keyvault/azkeys/testdata/perf/sign.go @@ -101,8 +101,6 @@ func (gct *SignTest) GlobalCleanup(ctx context.Context) error { } type SignPerfTest struct { - *SignTest - perf.PerfTestOptions cryptoClient *crypto.Client alg crypto.SignatureAlg digest []byte @@ -111,8 +109,6 @@ type SignPerfTest struct { // NewPerfTest is called once per goroutine func (gct *SignTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { return &SignPerfTest{ - SignTest: gct, - PerfTestOptions: *options, alg: gct.signAlg, digest: gct.digest, }, nil From 0f4d0a2c7054f00c4fc4fdba4b79330bb4f0c7e3 Mon Sep 17 00:00:00 2001 From: seankane-msft Date: Fri, 8 Apr 2022 17:27:31 -0400 Subject: [PATCH 08/11] fixing pipeline failures --- .../testdata/perf/get_certificate.go | 24 +++++++++---------- .../azcertificates/testdata/perf/main.go | 2 +- sdk/keyvault/azkeys/testdata/perf/decrypt.go | 24 +++++++++---------- sdk/keyvault/azkeys/testdata/perf/get_key.go | 24 +++++++++---------- sdk/keyvault/azkeys/testdata/perf/main.go | 8 +++---- sdk/keyvault/azkeys/testdata/perf/sign.go | 24 +++++++++---------- sdk/keyvault/azkeys/testdata/perf/unwrap.go | 20 ++++++++-------- .../azsecrets/testdata/perf/get_secret.go | 5 ++-- sdk/keyvault/azsecrets/testdata/perf/go.mod | 2 +- .../azsecrets/testdata/perf/list_secrets.go | 6 ++--- 10 files changed, 70 insertions(+), 69 deletions(-) diff --git a/sdk/keyvault/azcertificates/testdata/perf/get_certificate.go b/sdk/keyvault/azcertificates/testdata/perf/get_certificate.go index 61f383bf2c9b..aa423940abb0 100644 --- a/sdk/keyvault/azcertificates/testdata/perf/get_certificate.go +++ b/sdk/keyvault/azcertificates/testdata/perf/get_certificate.go @@ -19,16 +19,16 @@ type getCertificatesTestOptions struct{} var getCertTestOpts getCertificatesTestOptions = getCertificatesTestOptions{} -type GetCertificateTest struct { +type getCertificateTest struct { perf.PerfTestOptions certificateName string client *azcertificates.Client } -// NewGetCertificateTest is called once per process -func NewGetCertificateTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { +// newGetCertificateTest is called once per process +func newGetCertificateTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { certName := "livekvtestgetcertperfcert" - d := &GetCertificateTest{ + d := &getCertificateTest{ PerfTestOptions: options, certificateName: certName, } @@ -65,7 +65,7 @@ func NewGetCertificateTest(ctx context.Context, options perf.PerfTestOptions) (p return d, nil } -func (gct *GetCertificateTest) GlobalCleanup(ctx context.Context) error { +func (gct *getCertificateTest) GlobalCleanup(ctx context.Context) error { poller, err := gct.client.BeginDeleteCertificate(ctx, gct.certificateName, nil) if err != nil { return err @@ -80,28 +80,28 @@ func (gct *GetCertificateTest) GlobalCleanup(ctx context.Context) error { return err } -type GetCertificatePerfTest struct { - *GetCertificateTest +type getCertificatePerfTest struct { + *getCertificateTest perf.PerfTestOptions client *azcertificates.Client certificateName string } // NewPerfTest is called once per goroutine -func (gct *GetCertificateTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { - return &GetCertificatePerfTest{ - GetCertificateTest: gct, +func (gct *getCertificateTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { + return &getCertificatePerfTest{ + getCertificateTest: gct, PerfTestOptions: *options, client: gct.client, certificateName: gct.certificateName, }, nil } -func (gcpt *GetCertificatePerfTest) Run(ctx context.Context) error { +func (gcpt *getCertificatePerfTest) Run(ctx context.Context) error { _, err := gcpt.client.GetCertificate(ctx, gcpt.certificateName, nil) return err } -func (*GetCertificatePerfTest) Cleanup(ctx context.Context) error { +func (*getCertificatePerfTest) Cleanup(ctx context.Context) error { return nil } diff --git a/sdk/keyvault/azcertificates/testdata/perf/main.go b/sdk/keyvault/azcertificates/testdata/perf/main.go index 163410024ad5..c2a7b775b981 100644 --- a/sdk/keyvault/azcertificates/testdata/perf/main.go +++ b/sdk/keyvault/azcertificates/testdata/perf/main.go @@ -7,6 +7,6 @@ import "github.com/Azure/azure-sdk-for-go/sdk/internal/perf" func main() { perf.Run(map[string]perf.PerfMethods{ - "GetCertificateTest": {Register: nil, New: NewGetCertificateTest}, + "GetCertificateTest": {Register: nil, New: newGetCertificateTest}, }) } diff --git a/sdk/keyvault/azkeys/testdata/perf/decrypt.go b/sdk/keyvault/azkeys/testdata/perf/decrypt.go index b0cbbf7dabd5..80b4c16dc8b1 100644 --- a/sdk/keyvault/azkeys/testdata/perf/decrypt.go +++ b/sdk/keyvault/azkeys/testdata/perf/decrypt.go @@ -21,7 +21,7 @@ type decryptTestOptions struct{} var decryptTestOpts decryptTestOptions = decryptTestOptions{} -type DecryptTest struct { +type decryptTest struct { perf.PerfTestOptions keyName string client *azkeys.Client @@ -30,9 +30,9 @@ type DecryptTest struct { cipherText []byte } -// NewDecryptTest is called once per process -func NewDecryptTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { - d := &DecryptTest{ +// newDecryptTest is called once per process +func newDecryptTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { + d := &decryptTest{ PerfTestOptions: options, keyName: "livekvtestdecryptperfkey", encrypAlg: crypto.EncryptionAlgRSAOAEP256, @@ -88,7 +88,7 @@ func NewDecryptTest(ctx context.Context, options perf.PerfTestOptions) (perf.Glo return d, nil } -func (gct *DecryptTest) GlobalCleanup(ctx context.Context) error { +func (gct *decryptTest) GlobalCleanup(ctx context.Context) error { poller, err := gct.client.BeginDeleteKey(ctx, gct.keyName, nil) if err != nil { return err @@ -103,8 +103,8 @@ func (gct *DecryptTest) GlobalCleanup(ctx context.Context) error { return err } -type DecryptPerfTest struct { - *DecryptTest +type decryptPerfTest struct { + *decryptTest perf.PerfTestOptions cryptoClient *crypto.Client alg crypto.EncryptionAlg @@ -112,20 +112,20 @@ type DecryptPerfTest struct { } // NewPerfTest is called once per goroutine -func (gct *DecryptTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { - return &DecryptPerfTest{ - DecryptTest: gct, +func (gct *decryptTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { + return &decryptPerfTest{ + decryptTest: gct, PerfTestOptions: *options, alg: gct.encrypAlg, cipher: gct.cipherText, }, nil } -func (gcpt *DecryptPerfTest) Run(ctx context.Context) error { +func (gcpt *decryptPerfTest) Run(ctx context.Context) error { _, err := gcpt.cryptoClient.Decrypt(ctx, gcpt.alg, gcpt.cipher, nil) return err } -func (*DecryptPerfTest) Cleanup(ctx context.Context) error { +func (*decryptPerfTest) Cleanup(ctx context.Context) error { return nil } diff --git a/sdk/keyvault/azkeys/testdata/perf/get_key.go b/sdk/keyvault/azkeys/testdata/perf/get_key.go index 8cdb6a82c3c2..80a815beb7e8 100644 --- a/sdk/keyvault/azkeys/testdata/perf/get_key.go +++ b/sdk/keyvault/azkeys/testdata/perf/get_key.go @@ -19,15 +19,15 @@ type getKeyTestOptions struct{} var getKeyTestOpts getKeyTestOptions = getKeyTestOptions{} -type GetKeyTest struct { +type getKeyTest struct { perf.PerfTestOptions keyName string client *azkeys.Client } -// NewGetKeyTest is called once per process -func NewGetKeyTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { - d := &GetKeyTest{ +// newGetKeyTest is called once per process +func newGetKeyTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { + d := &getKeyTest{ PerfTestOptions: options, keyName: "livekvtestgetkeyperfkey", } @@ -57,7 +57,7 @@ func NewGetKeyTest(ctx context.Context, options perf.PerfTestOptions) (perf.Glob return d, nil } -func (gct *GetKeyTest) GlobalCleanup(ctx context.Context) error { +func (gct *getKeyTest) GlobalCleanup(ctx context.Context) error { poller, err := gct.client.BeginDeleteKey(ctx, gct.keyName, nil) if err != nil { return err @@ -72,24 +72,24 @@ func (gct *GetKeyTest) GlobalCleanup(ctx context.Context) error { return err } -type GetKeyPerfTest struct { +type getKeyPerfTest struct { client *azkeys.Client keyName string } // NewPerfTest is called once per goroutine -func (gct *GetKeyTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { - return &GetKeyPerfTest{ - client: gct.client, - keyName: gct.keyName, +func (gct *getKeyTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { + return &getKeyPerfTest{ + client: gct.client, + keyName: gct.keyName, }, nil } -func (gcpt *GetKeyPerfTest) Run(ctx context.Context) error { +func (gcpt *getKeyPerfTest) Run(ctx context.Context) error { _, err := gcpt.client.GetKey(ctx, gcpt.keyName, nil) return err } -func (*GetKeyPerfTest) Cleanup(ctx context.Context) error { +func (*getKeyPerfTest) Cleanup(ctx context.Context) error { return nil } diff --git a/sdk/keyvault/azkeys/testdata/perf/main.go b/sdk/keyvault/azkeys/testdata/perf/main.go index 0d016e46bdaf..672e4a0150e7 100644 --- a/sdk/keyvault/azkeys/testdata/perf/main.go +++ b/sdk/keyvault/azkeys/testdata/perf/main.go @@ -7,9 +7,9 @@ import "github.com/Azure/azure-sdk-for-go/sdk/internal/perf" func main() { perf.Run(map[string]perf.PerfMethods{ - "GetKeyTest": {Register: nil, New: NewGetCertificateTest}, - "DecryptTest": {Register: nil, New: NewDecryptTest}, - "SignTest": {Register: nil, New: NewSignTest}, - "UnwrapTest": {Register: nil, New: NewUnwrapTest}, + "GetKeyTest": {Register: nil, New: newGetKeyTest}, + "DecryptTest": {Register: nil, New: newDecryptTest}, + "SignTest": {Register: nil, New: newSignTest}, + "UnwrapTest": {Register: nil, New: newUnwrapTest}, }) } diff --git a/sdk/keyvault/azkeys/testdata/perf/sign.go b/sdk/keyvault/azkeys/testdata/perf/sign.go index 22a4c699bbe0..da2fb9d6c011 100644 --- a/sdk/keyvault/azkeys/testdata/perf/sign.go +++ b/sdk/keyvault/azkeys/testdata/perf/sign.go @@ -22,7 +22,7 @@ type signTestOptions struct{} var signTestOpts signTestOptions = signTestOptions{} -type SignTest struct { +type signTest struct { perf.PerfTestOptions keyName string client *azkeys.Client @@ -31,9 +31,9 @@ type SignTest struct { digest []byte } -// NewSignTest is called once per process -func NewSignTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { - d := &SignTest{ +// newSignTest is called once per process +func newSignTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { + d := &signTest{ PerfTestOptions: options, keyName: "livekvtestsignperfkey", signAlg: crypto.SignatureAlgRS256, @@ -85,7 +85,7 @@ func NewSignTest(ctx context.Context, options perf.PerfTestOptions) (perf.Global return d, nil } -func (gct *SignTest) GlobalCleanup(ctx context.Context) error { +func (gct *signTest) GlobalCleanup(ctx context.Context) error { poller, err := gct.client.BeginDeleteKey(ctx, gct.keyName, nil) if err != nil { return err @@ -100,25 +100,25 @@ func (gct *SignTest) GlobalCleanup(ctx context.Context) error { return err } -type SignPerfTest struct { +type signPerfTest struct { cryptoClient *crypto.Client alg crypto.SignatureAlg digest []byte } // NewPerfTest is called once per goroutine -func (gct *SignTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { - return &SignPerfTest{ - alg: gct.signAlg, - digest: gct.digest, +func (gct *signTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { + return &signPerfTest{ + alg: gct.signAlg, + digest: gct.digest, }, nil } -func (gcpt *SignPerfTest) Run(ctx context.Context) error { +func (gcpt *signPerfTest) Run(ctx context.Context) error { _, err := gcpt.cryptoClient.Sign(ctx, gcpt.alg, gcpt.digest, nil) return err } -func (*SignPerfTest) Cleanup(ctx context.Context) error { +func (*signPerfTest) Cleanup(ctx context.Context) error { return nil } diff --git a/sdk/keyvault/azkeys/testdata/perf/unwrap.go b/sdk/keyvault/azkeys/testdata/perf/unwrap.go index 190ee8313d04..4da2ff5e251d 100644 --- a/sdk/keyvault/azkeys/testdata/perf/unwrap.go +++ b/sdk/keyvault/azkeys/testdata/perf/unwrap.go @@ -21,7 +21,7 @@ type unwrapTestOptions struct{} var unwrapTestOpts unwrapTestOptions = unwrapTestOptions{} -type UnwrapTest struct { +type unwrapTest struct { perf.PerfTestOptions keyName string client *azkeys.Client @@ -30,9 +30,9 @@ type UnwrapTest struct { encryptedKey []byte } -// NewUnwrapTest is called once per process -func NewUnwrapTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { - d := &UnwrapTest{ +// newUnwrapTest is called once per process +func newUnwrapTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { + d := &unwrapTest{ PerfTestOptions: options, keyName: "livekvtestunwrapperfkey", alg: crypto.WrapAlgRSAOAEP256, @@ -88,7 +88,7 @@ func NewUnwrapTest(ctx context.Context, options perf.PerfTestOptions) (perf.Glob return d, nil } -func (gct *UnwrapTest) GlobalCleanup(ctx context.Context) error { +func (gct *unwrapTest) GlobalCleanup(ctx context.Context) error { poller, err := gct.client.BeginDeleteKey(ctx, gct.keyName, nil) if err != nil { return err @@ -103,26 +103,26 @@ func (gct *UnwrapTest) GlobalCleanup(ctx context.Context) error { return err } -type UnwrapPerfTest struct { +type unwrapPerfTest struct { cryptoClient *crypto.Client alg crypto.WrapAlg encryptedKey []byte } // NewPerfTest is called once per goroutine -func (gct *UnwrapTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { - return &UnwrapPerfTest{ +func (gct *unwrapTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { + return &unwrapPerfTest{ cryptoClient: gct.cryptoClient, alg: gct.alg, encryptedKey: gct.encryptedKey, }, nil } -func (gcpt *UnwrapPerfTest) Run(ctx context.Context) error { +func (gcpt *unwrapPerfTest) Run(ctx context.Context) error { _, err := gcpt.cryptoClient.UnwrapKey(ctx, gcpt.alg, gcpt.encryptedKey, nil) return err } -func (*UnwrapPerfTest) Cleanup(ctx context.Context) error { +func (*unwrapPerfTest) Cleanup(ctx context.Context) error { return nil } diff --git a/sdk/keyvault/azsecrets/testdata/perf/get_secret.go b/sdk/keyvault/azsecrets/testdata/perf/get_secret.go index df32316b69f5..f1c59bb2e10f 100644 --- a/sdk/keyvault/azsecrets/testdata/perf/get_secret.go +++ b/sdk/keyvault/azsecrets/testdata/perf/get_secret.go @@ -9,6 +9,7 @@ import ( "os" "time" + "github.com/Azure/azure-sdk-for-go/sdk/azcore" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/internal/perf" "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets" @@ -79,8 +80,8 @@ type GetSecretPerfTest struct { // NewPerfTest is called once per goroutine func (gct *GetSecretTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { return &GetSecretPerfTest{ - client: gct.client, - secretName: gct.secretName, + client: gct.client, + secretName: gct.secretName, }, nil } diff --git a/sdk/keyvault/azsecrets/testdata/perf/go.mod b/sdk/keyvault/azsecrets/testdata/perf/go.mod index ba7511739d83..c6c900d24e65 100644 --- a/sdk/keyvault/azsecrets/testdata/perf/go.mod +++ b/sdk/keyvault/azsecrets/testdata/perf/go.mod @@ -3,13 +3,13 @@ module github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets/testdata/perf go 1.18 require ( + github.com/Azure/azure-sdk-for-go/sdk/azcore v0.23.0 github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.14.0 github.com/Azure/azure-sdk-for-go/sdk/internal v0.9.2 github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets v0.7.0 ) require ( - github.com/Azure/azure-sdk-for-go/sdk/azcore v0.23.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.3.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0 // indirect github.com/golang-jwt/jwt v3.2.1+incompatible // indirect diff --git a/sdk/keyvault/azsecrets/testdata/perf/list_secrets.go b/sdk/keyvault/azsecrets/testdata/perf/list_secrets.go index 3d2f831244f0..71ae0e5f61d8 100644 --- a/sdk/keyvault/azsecrets/testdata/perf/list_secrets.go +++ b/sdk/keyvault/azsecrets/testdata/perf/list_secrets.go @@ -51,7 +51,7 @@ func NewListSecretsTest(ctx context.Context, options perf.PerfTestOptions) (perf panic(err) } - client, err := azsecret.NewClient(vaultURL, cred, &azsecret.ClientOptions{ + client, err := azsecrets.NewClient(vaultURL, cred, &azsecrets.ClientOptions{ ClientOptions: azcore.ClientOptions{ Transport: options.Transporter, }, @@ -96,8 +96,8 @@ type ListSecretsPerfTest struct { // NewPerfTest is called once per goroutine func (gct *ListSecretsTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { return &ListSecretsPerfTest{ - client: gct.client, - secretName: gct.secretName, + client: gct.client, + secretName: gct.secretName, }, nil } From 1b60e339fd5b71bd08339d097b4721789b182393 Mon Sep 17 00:00:00 2001 From: seankane-msft Date: Fri, 8 Apr 2022 17:38:51 -0400 Subject: [PATCH 09/11] making things public --- .../azsecrets/testdata/perf/get_secret.go | 20 +++++++++---------- .../azsecrets/testdata/perf/list_secrets.go | 20 +++++++++---------- sdk/keyvault/azsecrets/testdata/perf/main.go | 4 ++-- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/sdk/keyvault/azsecrets/testdata/perf/get_secret.go b/sdk/keyvault/azsecrets/testdata/perf/get_secret.go index f1c59bb2e10f..05790e4d1034 100644 --- a/sdk/keyvault/azsecrets/testdata/perf/get_secret.go +++ b/sdk/keyvault/azsecrets/testdata/perf/get_secret.go @@ -19,15 +19,15 @@ type getSecretTestOptions struct{} var getSecretTestOpts getSecretTestOptions = getSecretTestOptions{} -type GetSecretTest struct { +type getSecretTest struct { perf.PerfTestOptions secretName string client *azsecrets.Client } -// NewGetSecretTest is called once per process -func NewGetSecretTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { - d := &GetSecretTest{ +// newGetSecretTest is called once per process +func newGetSecretTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { + d := &getSecretTest{ PerfTestOptions: options, secretName: "livekvtestgetsecretperfsecret", } @@ -57,7 +57,7 @@ func NewGetSecretTest(ctx context.Context, options perf.PerfTestOptions) (perf.G return d, nil } -func (gct *GetSecretTest) GlobalCleanup(ctx context.Context) error { +func (gct *getSecretTest) GlobalCleanup(ctx context.Context) error { poller, err := gct.client.BeginDeleteSecret(ctx, gct.secretName, nil) if err != nil { return err @@ -72,24 +72,24 @@ func (gct *GetSecretTest) GlobalCleanup(ctx context.Context) error { return err } -type GetSecretPerfTest struct { +type getSecretPerfTest struct { client *azsecrets.Client secretName string } // NewPerfTest is called once per goroutine -func (gct *GetSecretTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { - return &GetSecretPerfTest{ +func (gct *getSecretTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { + return &getSecretPerfTest{ client: gct.client, secretName: gct.secretName, }, nil } -func (gcpt *GetSecretPerfTest) Run(ctx context.Context) error { +func (gcpt *getSecretPerfTest) Run(ctx context.Context) error { _, err := gcpt.client.GetSecret(ctx, gcpt.secretName, nil) return err } -func (*GetSecretPerfTest) Cleanup(ctx context.Context) error { +func (*getSecretPerfTest) Cleanup(ctx context.Context) error { return nil } diff --git a/sdk/keyvault/azsecrets/testdata/perf/list_secrets.go b/sdk/keyvault/azsecrets/testdata/perf/list_secrets.go index 71ae0e5f61d8..19efc1491ab5 100644 --- a/sdk/keyvault/azsecrets/testdata/perf/list_secrets.go +++ b/sdk/keyvault/azsecrets/testdata/perf/list_secrets.go @@ -28,15 +28,15 @@ func registerListSecrets() { flag.IntVar(&getListSecretsTestOpts.count, "count", 100, "number of secrets to create") } -type ListSecretsTest struct { +type listSecretsTest struct { perf.PerfTestOptions secretName string client *azsecrets.Client } -// NewListSecretsTest is called once per process -func NewListSecretsTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { - d := &ListSecretsTest{ +// newListSecretsTest is called once per process +func newListSecretsTest(ctx context.Context, options perf.PerfTestOptions) (perf.GlobalPerfTest, error) { + d := &listSecretsTest{ PerfTestOptions: options, secretName: "livekvtestlistsecretperfsecret", } @@ -68,7 +68,7 @@ func NewListSecretsTest(ctx context.Context, options perf.PerfTestOptions) (perf return d, nil } -func (gct *ListSecretsTest) GlobalCleanup(ctx context.Context) error { +func (gct *listSecretsTest) GlobalCleanup(ctx context.Context) error { for i := 0; i < getListSecretsTestOpts.count; i++ { poller, err := gct.client.BeginDeleteSecret(ctx, fmt.Sprintf("%s%d", gct.secretName, i), nil) if err != nil { @@ -88,20 +88,20 @@ func (gct *ListSecretsTest) GlobalCleanup(ctx context.Context) error { return nil } -type ListSecretsPerfTest struct { +type listSecretsPerfTest struct { client *azsecrets.Client secretName string } // NewPerfTest is called once per goroutine -func (gct *ListSecretsTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { - return &ListSecretsPerfTest{ +func (gct *listSecretsTest) NewPerfTest(ctx context.Context, options *perf.PerfTestOptions) (perf.PerfTest, error) { + return &listSecretsPerfTest{ client: gct.client, secretName: gct.secretName, }, nil } -func (gcpt *ListSecretsPerfTest) Run(ctx context.Context) error { +func (gcpt *listSecretsPerfTest) Run(ctx context.Context) error { pager := gcpt.client.ListPropertiesOfSecrets(nil) for pager.More() { _, err := pager.NextPage(ctx) @@ -112,6 +112,6 @@ func (gcpt *ListSecretsPerfTest) Run(ctx context.Context) error { return nil } -func (*ListSecretsPerfTest) Cleanup(ctx context.Context) error { +func (*listSecretsPerfTest) Cleanup(ctx context.Context) error { return nil } diff --git a/sdk/keyvault/azsecrets/testdata/perf/main.go b/sdk/keyvault/azsecrets/testdata/perf/main.go index 89ba6562a615..70c04e3dfffe 100644 --- a/sdk/keyvault/azsecrets/testdata/perf/main.go +++ b/sdk/keyvault/azsecrets/testdata/perf/main.go @@ -7,7 +7,7 @@ import "github.com/Azure/azure-sdk-for-go/sdk/internal/perf" func main() { perf.Run(map[string]perf.PerfMethods{ - "GetSecretTest": {Register: nil, New: NewGetSecretTest}, - "ListSecretsTest": {Register: registerListSecrets, New: NewListSecretsTest}, + "GetSecretTest": {Register: nil, New: newGetSecretTest}, + "ListSecretsTest": {Register: registerListSecrets, New: newListSecretsTest}, }) } From b5225c6dc5a7a3094ed74fd37705db38403ebb70 Mon Sep 17 00:00:00 2001 From: seankane-msft Date: Thu, 14 Apr 2022 12:21:00 -0400 Subject: [PATCH 10/11] heaths comments --- sdk/keyvault/azkeys/testdata/perf/decrypt.go | 3 ++- sdk/keyvault/azkeys/testdata/perf/get_key.go | 3 ++- sdk/keyvault/azkeys/testdata/perf/sign.go | 2 +- sdk/keyvault/azkeys/testdata/perf/unwrap.go | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/sdk/keyvault/azkeys/testdata/perf/decrypt.go b/sdk/keyvault/azkeys/testdata/perf/decrypt.go index 80b4c16dc8b1..c96a2cfbf19b 100644 --- a/sdk/keyvault/azkeys/testdata/perf/decrypt.go +++ b/sdk/keyvault/azkeys/testdata/perf/decrypt.go @@ -11,6 +11,7 @@ import ( "time" "github.com/Azure/azure-sdk-for-go/sdk/azcore" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/internal/perf" "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys" @@ -57,7 +58,7 @@ func newDecryptTest(ctx context.Context, options perf.PerfTestOptions) (perf.Glo return nil, err } - resp, err := client.CreateRSAKey(ctx, d.keyName, nil) + resp, err := client.CreateRSAKey(ctx, d.keyName, &azkeys.CreateRSAKeyOptions{Size: to.Ptr(int32(2048))}) if err != nil { return nil, err } diff --git a/sdk/keyvault/azkeys/testdata/perf/get_key.go b/sdk/keyvault/azkeys/testdata/perf/get_key.go index 80a815beb7e8..a133e97651a9 100644 --- a/sdk/keyvault/azkeys/testdata/perf/get_key.go +++ b/sdk/keyvault/azkeys/testdata/perf/get_key.go @@ -10,6 +10,7 @@ import ( "time" "github.com/Azure/azure-sdk-for-go/sdk/azcore" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/internal/perf" "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys" @@ -48,7 +49,7 @@ func newGetKeyTest(ctx context.Context, options perf.PerfTestOptions) (perf.Glob }, }) - _, err = client.CreateRSAKey(ctx, d.keyName, nil) + _, err = client.CreateRSAKey(ctx, d.keyName, &azkeys.CreateRSAKeyOptions{Size: to.Ptr(int32(2048))}) if err != nil { return nil, err } diff --git a/sdk/keyvault/azkeys/testdata/perf/sign.go b/sdk/keyvault/azkeys/testdata/perf/sign.go index da2fb9d6c011..d2a0cdce68df 100644 --- a/sdk/keyvault/azkeys/testdata/perf/sign.go +++ b/sdk/keyvault/azkeys/testdata/perf/sign.go @@ -58,7 +58,7 @@ func newSignTest(ctx context.Context, options perf.PerfTestOptions) (perf.Global return nil, err } - resp, err := client.CreateRSAKey(ctx, d.keyName, nil) + resp, err := client.CreateRSAKey(ctx, d.keyName, &azkeys.CreateRSAKeyOptions{Size: to.Ptr(int32(2048))} if err != nil { return nil, err } diff --git a/sdk/keyvault/azkeys/testdata/perf/unwrap.go b/sdk/keyvault/azkeys/testdata/perf/unwrap.go index 4da2ff5e251d..08d38da7f21b 100644 --- a/sdk/keyvault/azkeys/testdata/perf/unwrap.go +++ b/sdk/keyvault/azkeys/testdata/perf/unwrap.go @@ -57,7 +57,7 @@ func newUnwrapTest(ctx context.Context, options perf.PerfTestOptions) (perf.Glob return nil, err } - resp, err := client.CreateRSAKey(ctx, d.keyName, nil) + resp, err := client.CreateRSAKey(ctx, d.keyName, &azkeys.CreateRSAKeyOptions{Size: to.Ptr(int32(2048))} if err != nil { return nil, err } From 5c5fcf60ba94c6089d689eb6f557943c03b5b594 Mon Sep 17 00:00:00 2001 From: seankane-msft Date: Thu, 14 Apr 2022 12:53:58 -0400 Subject: [PATCH 11/11] fixing errors --- sdk/keyvault/azkeys/testdata/perf/sign.go | 3 ++- sdk/keyvault/azkeys/testdata/perf/unwrap.go | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/sdk/keyvault/azkeys/testdata/perf/sign.go b/sdk/keyvault/azkeys/testdata/perf/sign.go index d2a0cdce68df..8a76660dd34d 100644 --- a/sdk/keyvault/azkeys/testdata/perf/sign.go +++ b/sdk/keyvault/azkeys/testdata/perf/sign.go @@ -12,6 +12,7 @@ import ( "time" "github.com/Azure/azure-sdk-for-go/sdk/azcore" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/internal/perf" "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys" @@ -58,7 +59,7 @@ func newSignTest(ctx context.Context, options perf.PerfTestOptions) (perf.Global return nil, err } - resp, err := client.CreateRSAKey(ctx, d.keyName, &azkeys.CreateRSAKeyOptions{Size: to.Ptr(int32(2048))} + resp, err := client.CreateRSAKey(ctx, d.keyName, &azkeys.CreateRSAKeyOptions{Size: to.Ptr(int32(2048))}) if err != nil { return nil, err } diff --git a/sdk/keyvault/azkeys/testdata/perf/unwrap.go b/sdk/keyvault/azkeys/testdata/perf/unwrap.go index 08d38da7f21b..03a363561790 100644 --- a/sdk/keyvault/azkeys/testdata/perf/unwrap.go +++ b/sdk/keyvault/azkeys/testdata/perf/unwrap.go @@ -11,6 +11,7 @@ import ( "time" "github.com/Azure/azure-sdk-for-go/sdk/azcore" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/internal/perf" "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys" @@ -57,7 +58,7 @@ func newUnwrapTest(ctx context.Context, options perf.PerfTestOptions) (perf.Glob return nil, err } - resp, err := client.CreateRSAKey(ctx, d.keyName, &azkeys.CreateRSAKeyOptions{Size: to.Ptr(int32(2048))} + resp, err := client.CreateRSAKey(ctx, d.keyName, &azkeys.CreateRSAKeyOptions{Size: to.Ptr(int32(2048))}) if err != nil { return nil, err }