From 28a04cfdfc1f6ce515e677c90cbaff37ee4bcfb7 Mon Sep 17 00:00:00 2001 From: Joel Hendrix Date: Wed, 13 Sep 2023 13:07:59 -0700 Subject: [PATCH 1/5] Add KeyCredential and SASCredential types Includes supporting pipeline policies, config options, etc. --- sdk/azcore/CHANGELOG.md | 5 ++ sdk/azcore/core.go | 18 +++++ sdk/azcore/internal/exported/exported.go | 79 +++++++++++++++++++++ sdk/azcore/runtime/policy_key_credential.go | 50 +++++++++++++ sdk/azcore/runtime/policy_sas_credential.go | 39 ++++++++++ 5 files changed, 191 insertions(+) create mode 100644 sdk/azcore/runtime/policy_key_credential.go create mode 100644 sdk/azcore/runtime/policy_sas_credential.go diff --git a/sdk/azcore/CHANGELOG.md b/sdk/azcore/CHANGELOG.md index 8682b7ee4af8..0e0168d42bcf 100644 --- a/sdk/azcore/CHANGELOG.md +++ b/sdk/azcore/CHANGELOG.md @@ -4,6 +4,11 @@ ### Features Added +* Added types `KeyCredential` and `SASCredential` to the `azcore` package. + * Includes their respective constructor functions. +* Added types `KeyCredentialPolicy` and `SASCredentialPolicy` to the `azcore/runtime` package. + * Includes their respective constructor functions and options types. + ### Breaking Changes ### Bugs Fixed diff --git a/sdk/azcore/core.go b/sdk/azcore/core.go index e10b1ea093b3..f5d9b45c82cf 100644 --- a/sdk/azcore/core.go +++ b/sdk/azcore/core.go @@ -22,6 +22,24 @@ type AccessToken = exported.AccessToken // TokenCredential represents a credential capable of providing an OAuth token. type TokenCredential = exported.TokenCredential +// KeyCredential contains an authentication key used to authenticate to an Azure service. +type KeyCredential = exported.KeyCredential + +// NewKeyCredential creates a new instance of [KeyCredential] with the specified values. +// - key is the authentication key +func NewKeyCredential(key string) (*KeyCredential, error) { + return exported.NewKeyCredential(key) +} + +// SASCredential contains a shared access signature used to authenticate to an Azure service. +type SASCredential = exported.SASCredential + +// NewSASCredential creates a new instance of [SASCredential] with the specified values. +// - sas is the shared access signature +func NewSASCredential(sas string) (*SASCredential, error) { + return exported.NewSASCredential(sas) +} + // holds sentinel values used to send nulls var nullables map[reflect.Type]interface{} = map[reflect.Type]interface{}{} diff --git a/sdk/azcore/internal/exported/exported.go b/sdk/azcore/internal/exported/exported.go index 132f2a474fb9..65f84e8231e9 100644 --- a/sdk/azcore/internal/exported/exported.go +++ b/sdk/azcore/internal/exported/exported.go @@ -9,9 +9,11 @@ package exported import ( "context" "encoding/base64" + "errors" "fmt" "io" "net/http" + "sync/atomic" "time" ) @@ -110,3 +112,80 @@ func DecodeByteArray(s string, v *[]byte, format Base64Encoding) error { return fmt.Errorf("unrecognized byte array format: %d", format) } } + +// KeyCredential contains an authentication key used to authenticate to an Azure service. +// Exported as azcore.KeyCredential. +type KeyCredential struct { + cred *keyCredential +} + +// NewKeyCredential creates a new instance of [KeyCredential] with the specified values. +// - key is the authentication key +func NewKeyCredential(key string) (*KeyCredential, error) { + cred, err := newKeyCredential(key) + if err != nil { + return nil, err + } + return &KeyCredential{cred: cred}, nil +} + +// Update replaces the existing key with the specified value. +func (k *KeyCredential) Update(key string) error { + return k.cred.Update(key) +} + +// SASCredential contains a shared access signature used to authenticate to an Azure service. +// Exported as azcore.SASCredential. +type SASCredential struct { + cred *keyCredential +} + +// NewSASCredential creates a new instance of [SASCredential] with the specified values. +// - sas is the shared access signature +func NewSASCredential(sas string) (*SASCredential, error) { + cred, err := newKeyCredential(sas) + if err != nil { + return nil, err + } + return &SASCredential{cred: cred}, nil +} + +// Update replaces the existing shared access signature with the specified value. +func (k *SASCredential) Update(sas string) error { + return k.cred.Update(sas) +} + +// KeyCredentialGet returns the key for cred. +func KeyCredentialGet(cred *KeyCredential) string { + return cred.cred.Get() +} + +// SASCredentialGet returns the shared access sig for cred. +func SASCredentialGet(cred *SASCredential) string { + return cred.cred.Get() +} + +type keyCredential struct { + key atomic.Value // string +} + +func newKeyCredential(key string) (*keyCredential, error) { + if key == "" { + return nil, errors.New("key cannot be empty") + } + keyCred := keyCredential{} + keyCred.key.Store(key) + return &keyCred, nil +} + +func (k *keyCredential) Get() string { + return k.key.Load().(string) +} + +func (k *keyCredential) Update(key string) error { + if key == "" { + return errors.New("key cannot be empty") + } + k.key.Store(key) + return nil +} diff --git a/sdk/azcore/runtime/policy_key_credential.go b/sdk/azcore/runtime/policy_key_credential.go new file mode 100644 index 000000000000..0d932df83957 --- /dev/null +++ b/sdk/azcore/runtime/policy_key_credential.go @@ -0,0 +1,50 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package runtime + +import ( + "net/http" + + "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" +) + +// KeyCredentialPolicy authorizes requests with a [azcore.KeyCredential]. +type KeyCredentialPolicy struct { + cred *exported.KeyCredential + header string + format func(string) string +} + +// KeyCredentialPolicyOptions contains the optional values configuring [KeyCredentialPolicy]. +type KeyCredentialPolicyOptions struct { + // Format is used if the key needs special formatting (e.g. a prefix) before it's inserted into the HTTP request. + // The value passed to the callback is the raw key and the return value is the augmented key. + Format func(string) string +} + +// NewKeyCredentialPolicy creates a new instance of [KeyCredentialPolicy]. +// - cred is the [azcore.KeyCredential] used to authenticate with the service +// - header is the name of the HTTP request header in which the key is placed +// - options contains optional configuration, pass nil to accept the default values +func NewKeyCredentialPolicy(cred *exported.KeyCredential, header string, options *KeyCredentialPolicyOptions) *KeyCredentialPolicy { + if options == nil { + options = &KeyCredentialPolicyOptions{} + } + return &KeyCredentialPolicy{ + cred: cred, + header: header, + format: options.Format, + } +} + +// Do implementes the Do method on the [policy.Polilcy] interface. +func (k *KeyCredentialPolicy) Do(req *policy.Request) (*http.Response, error) { + val := exported.KeyCredentialGet(k.cred) + if k.format != nil { + val = k.format(val) + } + req.Raw().Header.Add(k.header, val) + return req.Next() +} diff --git a/sdk/azcore/runtime/policy_sas_credential.go b/sdk/azcore/runtime/policy_sas_credential.go new file mode 100644 index 000000000000..25266030ba21 --- /dev/null +++ b/sdk/azcore/runtime/policy_sas_credential.go @@ -0,0 +1,39 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package runtime + +import ( + "net/http" + + "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" +) + +// SASCredentialPolicy authorizes requests with a [azcore.SASCredential]. +type SASCredentialPolicy struct { + cred *exported.SASCredential + header string +} + +// SASCredentialPolicyOptions contains the optional values configuring [SASCredentialPolicy]. +type SASCredentialPolicyOptions struct { + // placeholder for future optional values +} + +// NewSASCredentialPolicy creates a new instance of [SASCredentialPolicy]. +// - cred is the [azcore.SASCredential] used to authenticate with the service +// - header is the name of the HTTP request header in which the shared access signature is placed +// - options contains optional configuration, pass nil to accept the default values +func NewSASCredentialPolicy(cred *exported.SASCredential, header string, options *SASCredentialPolicyOptions) *SASCredentialPolicy { + return &SASCredentialPolicy{ + cred: cred, + header: header, + } +} + +// Do implementes the Do method on the [policy.Polilcy] interface. +func (k *SASCredentialPolicy) Do(req *policy.Request) (*http.Response, error) { + req.Raw().Header.Add(k.header, exported.SASCredentialGet(k.cred)) + return req.Next() +} From c8af73ce9fdef59be9cf2cb0ada1d87d0e45a34f Mon Sep 17 00:00:00 2001 From: Joel Hendrix Date: Wed, 13 Sep 2023 15:10:50 -0700 Subject: [PATCH 2/5] add tests --- sdk/azcore/core_test.go | 18 +++++++ sdk/azcore/internal/exported/exported_test.go | 53 +++++++++++++++++++ .../runtime/policy_key_credential_test.go | 53 +++++++++++++++++++ .../runtime/polilcy_sas_credential_test.go | 35 ++++++++++++ 4 files changed, 159 insertions(+) create mode 100644 sdk/azcore/runtime/policy_key_credential_test.go create mode 100644 sdk/azcore/runtime/polilcy_sas_credential_test.go diff --git a/sdk/azcore/core_test.go b/sdk/azcore/core_test.go index 37812e80a477..4491c99ccc73 100644 --- a/sdk/azcore/core_test.go +++ b/sdk/azcore/core_test.go @@ -221,3 +221,21 @@ func TestClientWithClientName(t *testing.T) { require.NoError(t, err) require.EqualValues(t, "az.namespace:Widget.Factory", attrString) } + +func TestNewKeyCredential(t *testing.T) { + cred, err := NewKeyCredential("") + require.Error(t, err) + require.Nil(t, cred) + cred, err = NewKeyCredential("foo") + require.NoError(t, err) + require.NotNil(t, cred) +} + +func TestNewSASCredential(t *testing.T) { + cred, err := NewSASCredential("") + require.Error(t, err) + require.Nil(t, cred) + cred, err = NewSASCredential("foo") + require.NoError(t, err) + require.NotNil(t, cred) +} diff --git a/sdk/azcore/internal/exported/exported_test.go b/sdk/azcore/internal/exported/exported_test.go index 6b0776f64683..c279fdf39638 100644 --- a/sdk/azcore/internal/exported/exported_test.go +++ b/sdk/azcore/internal/exported/exported_test.go @@ -7,9 +7,12 @@ package exported import ( + "fmt" "net/http" "strings" "testing" + + "github.com/stretchr/testify/require" ) func TestNopCloser(t *testing.T) { @@ -33,3 +36,53 @@ func TestHasStatusCode(t *testing.T) { t.Fatal("unexpected failure") } } + +func TestDecodeByteArray(t *testing.T) { + out := []byte{} + require.NoError(t, DecodeByteArray("", &out, Base64StdFormat)) + require.Empty(t, out) + const ( + stdEncoding = "VGVzdERlY29kZUJ5dGVBcnJheQ==" + urlEncoding = "VGVzdERlY29kZUJ5dGVBcnJheQ" + decoded = "TestDecodeByteArray" + ) + require.NoError(t, DecodeByteArray(stdEncoding, &out, Base64StdFormat)) + require.EqualValues(t, decoded, string(out)) + require.NoError(t, DecodeByteArray(urlEncoding, &out, Base64URLFormat)) + require.EqualValues(t, decoded, string(out)) + require.NoError(t, DecodeByteArray(fmt.Sprintf("\"%s\"", stdEncoding), &out, Base64StdFormat)) + require.EqualValues(t, decoded, string(out)) + require.Error(t, DecodeByteArray(stdEncoding, &out, 123)) +} + +func TestNewKeyCredential(t *testing.T) { + cred, err := NewKeyCredential("") + require.Error(t, err) + require.Nil(t, cred) + const val1 = "foo" + cred, err = NewKeyCredential(val1) + require.NoError(t, err) + require.NotNil(t, cred) + require.EqualValues(t, val1, KeyCredentialGet(cred)) + require.Error(t, cred.Update("")) + require.EqualValues(t, val1, KeyCredentialGet(cred)) + const val2 = "bar" + require.NoError(t, cred.Update(val2)) + require.EqualValues(t, val2, KeyCredentialGet(cred)) +} + +func TestNewSASCredential(t *testing.T) { + cred, err := NewSASCredential("") + require.Error(t, err) + require.Nil(t, cred) + const val1 = "foo" + cred, err = NewSASCredential(val1) + require.NoError(t, err) + require.NotNil(t, cred) + require.EqualValues(t, val1, SASCredentialGet(cred)) + require.Error(t, cred.Update("")) + require.EqualValues(t, val1, SASCredentialGet(cred)) + const val2 = "bar" + require.NoError(t, cred.Update(val2)) + require.EqualValues(t, val2, SASCredentialGet(cred)) +} diff --git a/sdk/azcore/runtime/policy_key_credential_test.go b/sdk/azcore/runtime/policy_key_credential_test.go new file mode 100644 index 000000000000..ab621cb2bd4f --- /dev/null +++ b/sdk/azcore/runtime/policy_key_credential_test.go @@ -0,0 +1,53 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package runtime + +import ( + "context" + "net/http" + "testing" + + "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" + "github.com/stretchr/testify/require" +) + +func TestKeyCredentialPolicy(t *testing.T) { + const key = "foo" + cred, err := exported.NewKeyCredential(key) + require.NoError(t, err) + + const headerName = "fake-auth" + policy := NewKeyCredentialPolicy(cred, headerName, nil) + require.NotNil(t, policy) + + pl := exported.NewPipeline(shared.TransportFunc(func(req *http.Request) (*http.Response, error) { + require.EqualValues(t, key, req.Header.Get(headerName)) + return &http.Response{}, nil + }), policy) + + req, err := NewRequest(context.Background(), http.MethodGet, "http://contoso.com") + require.NoError(t, err) + + _, err = pl.Do(req) + require.NoError(t, err) + + policy = NewKeyCredentialPolicy(cred, headerName, &KeyCredentialPolicyOptions{ + Format: func(s string) string { + return "Prefix: " + s + }, + }) + require.NotNil(t, policy) + + pl = exported.NewPipeline(shared.TransportFunc(func(req *http.Request) (*http.Response, error) { + require.EqualValues(t, "Prefix: "+key, req.Header.Get(headerName)) + return &http.Response{}, nil + }), policy) + + req, err = NewRequest(context.Background(), http.MethodGet, "http://contoso.com") + require.NoError(t, err) + + _, err = pl.Do(req) + require.NoError(t, err) +} diff --git a/sdk/azcore/runtime/polilcy_sas_credential_test.go b/sdk/azcore/runtime/polilcy_sas_credential_test.go new file mode 100644 index 000000000000..b3bb8dbf5a33 --- /dev/null +++ b/sdk/azcore/runtime/polilcy_sas_credential_test.go @@ -0,0 +1,35 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package runtime + +import ( + "context" + "net/http" + "testing" + + "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" + "github.com/stretchr/testify/require" +) + +func TestSASCredentialPolicy(t *testing.T) { + const key = "foo" + cred, err := exported.NewSASCredential(key) + require.NoError(t, err) + + const headerName = "fake-auth" + policy := NewSASCredentialPolicy(cred, headerName, nil) + require.NotNil(t, policy) + + pl := exported.NewPipeline(shared.TransportFunc(func(req *http.Request) (*http.Response, error) { + require.EqualValues(t, key, req.Header.Get(headerName)) + return &http.Response{}, nil + }), policy) + + req, err := NewRequest(context.Background(), http.MethodGet, "http://contoso.com") + require.NoError(t, err) + + _, err = pl.Do(req) + require.NoError(t, err) +} From 712d7d0f1c2bb8b27dee8d35b1d59f7e7cbcf76c Mon Sep 17 00:00:00 2001 From: Joel Hendrix Date: Thu, 14 Sep 2023 11:49:26 -0700 Subject: [PATCH 3/5] change Format func to Prefix string --- sdk/azcore/runtime/policy_key_credential.go | 13 ++++++------- sdk/azcore/runtime/policy_key_credential_test.go | 4 +--- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/sdk/azcore/runtime/policy_key_credential.go b/sdk/azcore/runtime/policy_key_credential.go index 0d932df83957..2e47a5bad065 100644 --- a/sdk/azcore/runtime/policy_key_credential.go +++ b/sdk/azcore/runtime/policy_key_credential.go @@ -14,14 +14,13 @@ import ( type KeyCredentialPolicy struct { cred *exported.KeyCredential header string - format func(string) string + prefix string } // KeyCredentialPolicyOptions contains the optional values configuring [KeyCredentialPolicy]. type KeyCredentialPolicyOptions struct { - // Format is used if the key needs special formatting (e.g. a prefix) before it's inserted into the HTTP request. - // The value passed to the callback is the raw key and the return value is the augmented key. - Format func(string) string + // Prefix is used if the key requires a prefix before it's inserted into the HTTP request. + Prefix string } // NewKeyCredentialPolicy creates a new instance of [KeyCredentialPolicy]. @@ -35,15 +34,15 @@ func NewKeyCredentialPolicy(cred *exported.KeyCredential, header string, options return &KeyCredentialPolicy{ cred: cred, header: header, - format: options.Format, + prefix: options.Prefix, } } // Do implementes the Do method on the [policy.Polilcy] interface. func (k *KeyCredentialPolicy) Do(req *policy.Request) (*http.Response, error) { val := exported.KeyCredentialGet(k.cred) - if k.format != nil { - val = k.format(val) + if k.prefix != "" { + val = k.prefix + val } req.Raw().Header.Add(k.header, val) return req.Next() diff --git a/sdk/azcore/runtime/policy_key_credential_test.go b/sdk/azcore/runtime/policy_key_credential_test.go index ab621cb2bd4f..0384de1bf664 100644 --- a/sdk/azcore/runtime/policy_key_credential_test.go +++ b/sdk/azcore/runtime/policy_key_credential_test.go @@ -34,9 +34,7 @@ func TestKeyCredentialPolicy(t *testing.T) { require.NoError(t, err) policy = NewKeyCredentialPolicy(cred, headerName, &KeyCredentialPolicyOptions{ - Format: func(s string) string { - return "Prefix: " + s - }, + Prefix: "Prefix: ", }) require.NotNil(t, policy) From 9f4e46a6ee4dfe81f3263d8a5e1aedb557e0e0aa Mon Sep 17 00:00:00 2001 From: Joel Hendrix Date: Thu, 14 Sep 2023 11:54:22 -0700 Subject: [PATCH 4/5] remove error return value from constructors --- sdk/azcore/core.go | 4 ++-- sdk/azcore/core_test.go | 14 ++--------- sdk/azcore/internal/exported/exported.go | 23 +++++-------------- sdk/azcore/internal/exported/exported_test.go | 12 ++-------- .../runtime/policy_key_credential_test.go | 3 +-- .../runtime/polilcy_sas_credential_test.go | 3 +-- 6 files changed, 14 insertions(+), 45 deletions(-) diff --git a/sdk/azcore/core.go b/sdk/azcore/core.go index f5d9b45c82cf..d2172ced5811 100644 --- a/sdk/azcore/core.go +++ b/sdk/azcore/core.go @@ -27,7 +27,7 @@ type KeyCredential = exported.KeyCredential // NewKeyCredential creates a new instance of [KeyCredential] with the specified values. // - key is the authentication key -func NewKeyCredential(key string) (*KeyCredential, error) { +func NewKeyCredential(key string) *KeyCredential { return exported.NewKeyCredential(key) } @@ -36,7 +36,7 @@ type SASCredential = exported.SASCredential // NewSASCredential creates a new instance of [SASCredential] with the specified values. // - sas is the shared access signature -func NewSASCredential(sas string) (*SASCredential, error) { +func NewSASCredential(sas string) *SASCredential { return exported.NewSASCredential(sas) } diff --git a/sdk/azcore/core_test.go b/sdk/azcore/core_test.go index 4491c99ccc73..43876043ed2e 100644 --- a/sdk/azcore/core_test.go +++ b/sdk/azcore/core_test.go @@ -223,19 +223,9 @@ func TestClientWithClientName(t *testing.T) { } func TestNewKeyCredential(t *testing.T) { - cred, err := NewKeyCredential("") - require.Error(t, err) - require.Nil(t, cred) - cred, err = NewKeyCredential("foo") - require.NoError(t, err) - require.NotNil(t, cred) + require.NotNil(t, NewKeyCredential("foo")) } func TestNewSASCredential(t *testing.T) { - cred, err := NewSASCredential("") - require.Error(t, err) - require.Nil(t, cred) - cred, err = NewSASCredential("foo") - require.NoError(t, err) - require.NotNil(t, cred) + require.NotNil(t, NewSASCredential("foo")) } diff --git a/sdk/azcore/internal/exported/exported.go b/sdk/azcore/internal/exported/exported.go index 65f84e8231e9..b4992428bceb 100644 --- a/sdk/azcore/internal/exported/exported.go +++ b/sdk/azcore/internal/exported/exported.go @@ -121,12 +121,8 @@ type KeyCredential struct { // NewKeyCredential creates a new instance of [KeyCredential] with the specified values. // - key is the authentication key -func NewKeyCredential(key string) (*KeyCredential, error) { - cred, err := newKeyCredential(key) - if err != nil { - return nil, err - } - return &KeyCredential{cred: cred}, nil +func NewKeyCredential(key string) *KeyCredential { + return &KeyCredential{cred: newKeyCredential(key)} } // Update replaces the existing key with the specified value. @@ -142,12 +138,8 @@ type SASCredential struct { // NewSASCredential creates a new instance of [SASCredential] with the specified values. // - sas is the shared access signature -func NewSASCredential(sas string) (*SASCredential, error) { - cred, err := newKeyCredential(sas) - if err != nil { - return nil, err - } - return &SASCredential{cred: cred}, nil +func NewSASCredential(sas string) *SASCredential { + return &SASCredential{cred: newKeyCredential(sas)} } // Update replaces the existing shared access signature with the specified value. @@ -169,13 +161,10 @@ type keyCredential struct { key atomic.Value // string } -func newKeyCredential(key string) (*keyCredential, error) { - if key == "" { - return nil, errors.New("key cannot be empty") - } +func newKeyCredential(key string) *keyCredential { keyCred := keyCredential{} keyCred.key.Store(key) - return &keyCred, nil + return &keyCred } func (k *keyCredential) Get() string { diff --git a/sdk/azcore/internal/exported/exported_test.go b/sdk/azcore/internal/exported/exported_test.go index c279fdf39638..cb73faaafcfb 100644 --- a/sdk/azcore/internal/exported/exported_test.go +++ b/sdk/azcore/internal/exported/exported_test.go @@ -56,12 +56,8 @@ func TestDecodeByteArray(t *testing.T) { } func TestNewKeyCredential(t *testing.T) { - cred, err := NewKeyCredential("") - require.Error(t, err) - require.Nil(t, cred) const val1 = "foo" - cred, err = NewKeyCredential(val1) - require.NoError(t, err) + cred := NewKeyCredential(val1) require.NotNil(t, cred) require.EqualValues(t, val1, KeyCredentialGet(cred)) require.Error(t, cred.Update("")) @@ -72,12 +68,8 @@ func TestNewKeyCredential(t *testing.T) { } func TestNewSASCredential(t *testing.T) { - cred, err := NewSASCredential("") - require.Error(t, err) - require.Nil(t, cred) const val1 = "foo" - cred, err = NewSASCredential(val1) - require.NoError(t, err) + cred := NewSASCredential(val1) require.NotNil(t, cred) require.EqualValues(t, val1, SASCredentialGet(cred)) require.Error(t, cred.Update("")) diff --git a/sdk/azcore/runtime/policy_key_credential_test.go b/sdk/azcore/runtime/policy_key_credential_test.go index 0384de1bf664..e26e009ff602 100644 --- a/sdk/azcore/runtime/policy_key_credential_test.go +++ b/sdk/azcore/runtime/policy_key_credential_test.go @@ -15,8 +15,7 @@ import ( func TestKeyCredentialPolicy(t *testing.T) { const key = "foo" - cred, err := exported.NewKeyCredential(key) - require.NoError(t, err) + cred := exported.NewKeyCredential(key) const headerName = "fake-auth" policy := NewKeyCredentialPolicy(cred, headerName, nil) diff --git a/sdk/azcore/runtime/polilcy_sas_credential_test.go b/sdk/azcore/runtime/polilcy_sas_credential_test.go index b3bb8dbf5a33..5853eed253d7 100644 --- a/sdk/azcore/runtime/polilcy_sas_credential_test.go +++ b/sdk/azcore/runtime/polilcy_sas_credential_test.go @@ -15,8 +15,7 @@ import ( func TestSASCredentialPolicy(t *testing.T) { const key = "foo" - cred, err := exported.NewSASCredential(key) - require.NoError(t, err) + cred := exported.NewSASCredential(key) const headerName = "fake-auth" policy := NewSASCredentialPolicy(cred, headerName, nil) From 31cf0ec69fdaf738b1fbfc025a6522f0f854fef9 Mon Sep 17 00:00:00 2001 From: Joel Hendrix Date: Fri, 15 Sep 2023 10:18:41 -0700 Subject: [PATCH 5/5] remove error return for Update method --- sdk/azcore/internal/exported/exported.go | 15 +++++---------- sdk/azcore/internal/exported/exported_test.go | 8 ++------ 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/sdk/azcore/internal/exported/exported.go b/sdk/azcore/internal/exported/exported.go index b4992428bceb..f2b296b6dc7c 100644 --- a/sdk/azcore/internal/exported/exported.go +++ b/sdk/azcore/internal/exported/exported.go @@ -9,7 +9,6 @@ package exported import ( "context" "encoding/base64" - "errors" "fmt" "io" "net/http" @@ -126,8 +125,8 @@ func NewKeyCredential(key string) *KeyCredential { } // Update replaces the existing key with the specified value. -func (k *KeyCredential) Update(key string) error { - return k.cred.Update(key) +func (k *KeyCredential) Update(key string) { + k.cred.Update(key) } // SASCredential contains a shared access signature used to authenticate to an Azure service. @@ -143,8 +142,8 @@ func NewSASCredential(sas string) *SASCredential { } // Update replaces the existing shared access signature with the specified value. -func (k *SASCredential) Update(sas string) error { - return k.cred.Update(sas) +func (k *SASCredential) Update(sas string) { + k.cred.Update(sas) } // KeyCredentialGet returns the key for cred. @@ -171,10 +170,6 @@ func (k *keyCredential) Get() string { return k.key.Load().(string) } -func (k *keyCredential) Update(key string) error { - if key == "" { - return errors.New("key cannot be empty") - } +func (k *keyCredential) Update(key string) { k.key.Store(key) - return nil } diff --git a/sdk/azcore/internal/exported/exported_test.go b/sdk/azcore/internal/exported/exported_test.go index cb73faaafcfb..5132d1d697ab 100644 --- a/sdk/azcore/internal/exported/exported_test.go +++ b/sdk/azcore/internal/exported/exported_test.go @@ -60,10 +60,8 @@ func TestNewKeyCredential(t *testing.T) { cred := NewKeyCredential(val1) require.NotNil(t, cred) require.EqualValues(t, val1, KeyCredentialGet(cred)) - require.Error(t, cred.Update("")) - require.EqualValues(t, val1, KeyCredentialGet(cred)) const val2 = "bar" - require.NoError(t, cred.Update(val2)) + cred.Update(val2) require.EqualValues(t, val2, KeyCredentialGet(cred)) } @@ -72,9 +70,7 @@ func TestNewSASCredential(t *testing.T) { cred := NewSASCredential(val1) require.NotNil(t, cred) require.EqualValues(t, val1, SASCredentialGet(cred)) - require.Error(t, cred.Update("")) - require.EqualValues(t, val1, SASCredentialGet(cred)) const val2 = "bar" - require.NoError(t, cred.Update(val2)) + cred.Update(val2) require.EqualValues(t, val2, SASCredentialGet(cred)) }