Skip to content

Commit 7117f02

Browse files
authored
Convert client test to use recordings (Azure#21540)
* Convert client test to use recordings A little clean-up of the test code. * don't defer in the same func as os.Exit
1 parent 12c612e commit 7117f02

File tree

6 files changed

+130
-37
lines changed

6 files changed

+130
-37
lines changed

sdk/data/azappconfig/assets.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"AssetsRepo": "Azure/azure-sdk-assets",
3+
"AssetsRepoPrefixPath": "go",
4+
"TagPrefix": "go/data/azappconfig",
5+
"Tag": "go/data/azappconfig_9494a52cb4"
6+
}

sdk/data/azappconfig/client_test.go

Lines changed: 28 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,35 +4,28 @@
44
// Copyright (c) Microsoft Corporation. All rights reserved.
55
// Licensed under the MIT License.
66

7-
package azappconfig
7+
package azappconfig_test
88

99
import (
1010
"context"
11-
"fmt"
12-
"os"
1311
"testing"
14-
"time"
1512

13+
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
14+
"github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig"
1615
"github.com/stretchr/testify/require"
1716
)
1817

1918
func TestClient(t *testing.T) {
20-
connectionString := os.Getenv("APPCONFIGURATION_CONNECTION_STRING")
21-
if connectionString == "" {
22-
// This test does run as live test, when the azure template is deployed,
23-
// and then the corresponding environment variable is set.
24-
t.Skip("Skipping client test")
25-
}
26-
27-
key := fmt.Sprintf("key-%d", time.Now().Unix())
28-
label := "label"
19+
const (
20+
key = "key-TestClient"
21+
label = "label"
22+
)
23+
2924
contentType := "content-type"
3025
value := "value"
31-
client, err := NewClientFromConnectionString(connectionString, nil)
32-
require.NoError(t, err)
33-
require.NotEmpty(t, client)
26+
client := NewClientFromConnectionString(t)
3427

35-
addResp, err2 := client.AddSetting(context.TODO(), key, &value, &AddSettingOptions{Label: &label, ContentType: &contentType})
28+
addResp, err2 := client.AddSetting(context.TODO(), key, &value, &azappconfig.AddSettingOptions{Label: to.Ptr(label), ContentType: &contentType})
3629
require.NoError(t, err2)
3730
require.NotEmpty(t, addResp)
3831
require.NotNil(t, addResp.Key)
@@ -44,7 +37,7 @@ func TestClient(t *testing.T) {
4437
require.Equal(t, contentType, *addResp.ContentType)
4538
require.Equal(t, value, *addResp.Value)
4639

47-
getResp, err3 := client.GetSetting(context.TODO(), key, &GetSettingOptions{Label: &label})
40+
getResp, err3 := client.GetSetting(context.TODO(), key, &azappconfig.GetSettingOptions{Label: to.Ptr(label)})
4841
require.NoError(t, err3)
4942
require.NotEmpty(t, getResp)
5043
require.NotNil(t, getResp.Key)
@@ -57,13 +50,13 @@ func TestClient(t *testing.T) {
5750
require.Equal(t, value, *getResp.Value)
5851

5952
etag := getResp.ETag
60-
getResp2, err4 := client.GetSetting(context.TODO(), key, &GetSettingOptions{Label: &label, OnlyIfChanged: etag})
53+
getResp2, err4 := client.GetSetting(context.TODO(), key, &azappconfig.GetSettingOptions{Label: to.Ptr(label), OnlyIfChanged: etag})
6154
require.Error(t, err4)
6255
require.Empty(t, getResp2)
6356

6457
value = "value2"
6558
contentType = "content-type2"
66-
setResp, err5 := client.SetSetting(context.TODO(), key, &value, &SetSettingOptions{Label: &label, ContentType: &contentType})
59+
setResp, err5 := client.SetSetting(context.TODO(), key, &value, &azappconfig.SetSettingOptions{Label: to.Ptr(label), ContentType: &contentType})
6760
require.NoError(t, err5)
6861
require.NotEmpty(t, setResp)
6962
require.NotNil(t, setResp.Key)
@@ -79,7 +72,7 @@ func TestClient(t *testing.T) {
7972
// after changing the setting, update the sync token so we don't get cached, stale data
8073
client.UpdateSyncToken(*setResp.SyncToken)
8174

82-
getResp3, err6 := client.GetSetting(context.TODO(), key, &GetSettingOptions{Label: &label, OnlyIfChanged: etag})
75+
getResp3, err6 := client.GetSetting(context.TODO(), key, &azappconfig.GetSettingOptions{Label: to.Ptr(label), OnlyIfChanged: etag})
8376
require.NoError(t, err6)
8477
require.NotEmpty(t, getResp3)
8578
require.NotNil(t, getResp3.Key)
@@ -93,7 +86,7 @@ func TestClient(t *testing.T) {
9386

9487
etag = getResp3.ETag
9588
value = "value3"
96-
setResp2, err7 := client.SetSetting(context.TODO(), key, &value, &SetSettingOptions{Label: &label, OnlyIfUnchanged: etag})
89+
setResp2, err7 := client.SetSetting(context.TODO(), key, &value, &azappconfig.SetSettingOptions{Label: to.Ptr(label), OnlyIfUnchanged: etag})
9790
require.NoError(t, err7)
9891
require.NotEmpty(t, setResp2)
9992
require.NotNil(t, setResp2.Key)
@@ -108,11 +101,11 @@ func TestClient(t *testing.T) {
108101
// after changing the setting, update the sync token so we don't get cached, stale data
109102
client.UpdateSyncToken(*setResp.SyncToken)
110103

111-
setResp3, err8 := client.SetSetting(context.TODO(), key, &value, &SetSettingOptions{Label: &label, OnlyIfUnchanged: etag})
104+
setResp3, err8 := client.SetSetting(context.TODO(), key, &value, &azappconfig.SetSettingOptions{Label: to.Ptr(label), OnlyIfUnchanged: etag})
112105
require.Error(t, err8)
113106
require.Empty(t, setResp3)
114107

115-
roResp, err9 := client.SetReadOnly(context.TODO(), key, true, &SetReadOnlyOptions{Label: &label})
108+
roResp, err9 := client.SetReadOnly(context.TODO(), key, true, &azappconfig.SetReadOnlyOptions{Label: to.Ptr(label)})
116109
require.NoError(t, err9)
117110
require.NotEmpty(t, roResp)
118111
require.NotNil(t, roResp.Key)
@@ -129,7 +122,7 @@ func TestClient(t *testing.T) {
129122
// after changing the setting, update the sync token so we don't get cached, stale data
130123
client.UpdateSyncToken(*setResp.SyncToken)
131124

132-
roResp2, err10 := client.SetReadOnly(context.TODO(), key, false, &SetReadOnlyOptions{Label: &label})
125+
roResp2, err10 := client.SetReadOnly(context.TODO(), key, false, &azappconfig.SetReadOnlyOptions{Label: to.Ptr(label)})
133126
require.NoError(t, err10)
134127
require.NotEmpty(t, roResp2)
135128
require.NotNil(t, roResp2.Key)
@@ -146,12 +139,12 @@ func TestClient(t *testing.T) {
146139
// after changing the setting, update the sync token so we don't get cached, stale data
147140
client.UpdateSyncToken(*setResp.SyncToken)
148141

149-
roResp3, err11 := client.SetReadOnly(context.TODO(), key, true, &SetReadOnlyOptions{Label: &label, OnlyIfUnchanged: etag})
142+
roResp3, err11 := client.SetReadOnly(context.TODO(), key, true, &azappconfig.SetReadOnlyOptions{Label: to.Ptr(label), OnlyIfUnchanged: etag})
150143
require.Error(t, err11)
151144
require.Empty(t, roResp3)
152145

153146
etag = roResp2.ETag
154-
roResp4, err12 := client.SetReadOnly(context.TODO(), key, true, &SetReadOnlyOptions{Label: &label, OnlyIfUnchanged: etag})
147+
roResp4, err12 := client.SetReadOnly(context.TODO(), key, true, &azappconfig.SetReadOnlyOptions{Label: to.Ptr(label), OnlyIfUnchanged: etag})
155148
require.NoError(t, err12)
156149
require.NotEmpty(t, roResp4)
157150
require.NotNil(t, roResp4.Key)
@@ -168,12 +161,12 @@ func TestClient(t *testing.T) {
168161
// after changing the setting, update the sync token so we don't get cached, stale data
169162
client.UpdateSyncToken(*setResp.SyncToken)
170163

171-
roResp5, err13 := client.SetReadOnly(context.TODO(), key, false, &SetReadOnlyOptions{Label: &label, OnlyIfUnchanged: etag})
164+
roResp5, err13 := client.SetReadOnly(context.TODO(), key, false, &azappconfig.SetReadOnlyOptions{Label: to.Ptr(label), OnlyIfUnchanged: etag})
172165
require.Error(t, err13)
173166
require.Empty(t, roResp5)
174167

175168
etag = roResp4.ETag
176-
roResp6, err14 := client.SetReadOnly(context.TODO(), key, false, &SetReadOnlyOptions{Label: &label, OnlyIfUnchanged: etag})
169+
roResp6, err14 := client.SetReadOnly(context.TODO(), key, false, &azappconfig.SetReadOnlyOptions{Label: to.Ptr(label), OnlyIfUnchanged: etag})
177170
require.NoError(t, err14)
178171
require.NotEmpty(t, roResp6)
179172
require.NotNil(t, roResp6.Key)
@@ -191,7 +184,7 @@ func TestClient(t *testing.T) {
191184
client.UpdateSyncToken(*setResp.SyncToken)
192185

193186
any := "*"
194-
revPgr := client.NewListRevisionsPager(SettingSelector{KeyFilter: &any, LabelFilter: &any, Fields: AllSettingFields()}, nil)
187+
revPgr := client.NewListRevisionsPager(azappconfig.SettingSelector{KeyFilter: &any, LabelFilter: &any, Fields: azappconfig.AllSettingFields()}, nil)
195188
require.NotEmpty(t, revPgr)
196189
hasMoreRevs := revPgr.More()
197190
require.True(t, hasMoreRevs)
@@ -201,7 +194,7 @@ func TestClient(t *testing.T) {
201194
require.Equal(t, key, *revResp.Settings[0].Key)
202195
require.Equal(t, label, *revResp.Settings[0].Label)
203196

204-
settsPgr := client.NewListSettingsPager(SettingSelector{KeyFilter: &any, LabelFilter: &any, Fields: AllSettingFields()}, nil)
197+
settsPgr := client.NewListSettingsPager(azappconfig.SettingSelector{KeyFilter: &any, LabelFilter: &any, Fields: azappconfig.AllSettingFields()}, nil)
205198
require.NotEmpty(t, settsPgr)
206199
hasMoreSetts := settsPgr.More()
207200
require.True(t, hasMoreSetts)
@@ -213,7 +206,7 @@ func TestClient(t *testing.T) {
213206
require.Equal(t, value, *settsResp.Settings[0].Value)
214207
require.False(t, *settsResp.Settings[0].IsReadOnly)
215208

216-
delResp, err17 := client.DeleteSetting(context.TODO(), key, &DeleteSettingOptions{Label: &label})
209+
delResp, err17 := client.DeleteSetting(context.TODO(), key, &azappconfig.DeleteSettingOptions{Label: to.Ptr(label)})
217210
require.NoError(t, err17)
218211
require.NotEmpty(t, delResp)
219212
require.NotNil(t, delResp.Key)
@@ -228,7 +221,7 @@ func TestClient(t *testing.T) {
228221
// after changing the setting, update the sync token so we don't get cached, stale data
229222
client.UpdateSyncToken(*setResp.SyncToken)
230223

231-
addResp2, err18 := client.AddSetting(context.TODO(), key, &value, &AddSettingOptions{Label: &label, ContentType: &contentType})
224+
addResp2, err18 := client.AddSetting(context.TODO(), key, &value, &azappconfig.AddSettingOptions{Label: to.Ptr(label), ContentType: &contentType})
232225
require.NoError(t, err18)
233226
require.NotEmpty(t, addResp2)
234227
require.NotNil(t, addResp2.Key)
@@ -240,12 +233,12 @@ func TestClient(t *testing.T) {
240233
require.Equal(t, contentType, *addResp2.ContentType)
241234
require.Equal(t, value, *addResp2.Value)
242235

243-
delResp2, err19 := client.DeleteSetting(context.TODO(), key, &DeleteSettingOptions{Label: &label, OnlyIfUnchanged: etag})
236+
delResp2, err19 := client.DeleteSetting(context.TODO(), key, &azappconfig.DeleteSettingOptions{Label: to.Ptr(label), OnlyIfUnchanged: etag})
244237
require.Error(t, err19)
245238
require.Empty(t, delResp2)
246239

247240
etag = addResp2.ETag
248-
delResp3, err20 := client.DeleteSetting(context.TODO(), key, &DeleteSettingOptions{Label: &label, OnlyIfUnchanged: etag})
241+
delResp3, err20 := client.DeleteSetting(context.TODO(), key, &azappconfig.DeleteSettingOptions{Label: to.Ptr(label), OnlyIfUnchanged: etag})
249242
require.NoError(t, err20)
250243
require.NotEmpty(t, delResp3)
251244
require.NotNil(t, delResp3.Key)

sdk/data/azappconfig/go.mod

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,16 @@ go 1.18
44

55
require (
66
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.2
7+
github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0
78
github.com/stretchr/testify v1.8.4
89
)
910

1011
require (
11-
github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect
1212
github.com/davecgh/go-spew v1.1.1 // indirect
13+
github.com/dnaeon/go-vcr v1.1.0 // indirect
1314
github.com/pmezard/go-difflib v1.0.0 // indirect
1415
golang.org/x/net v0.15.0 // indirect
1516
golang.org/x/text v0.13.0 // indirect
17+
gopkg.in/yaml.v2 v2.4.0 // indirect
1618
gopkg.in/yaml.v3 v3.0.1 // indirect
1719
)

sdk/data/azappconfig/go.sum

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInm
44
github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM=
55
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
66
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
7+
github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c=
8+
github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko=
9+
github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8=
710
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
811
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
912
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
@@ -14,5 +17,8 @@ golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
1417
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
1518
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
1619
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
20+
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
21+
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
22+
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
1723
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
1824
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

sdk/data/azappconfig/test-resources.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
"type": "string"
4646
},
4747
"azConfigPrefix": {
48-
"defaultValue": "azconfig-net",
48+
"defaultValue": "azappconfig-go",
4949
"type": "string"
5050
},
5151
"azConfigEndpointSuffix": {

sdk/data/azappconfig/utils_test.go

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
//go:build go1.18
2+
// +build go1.18
3+
4+
// Copyright (c) Microsoft Corporation. All rights reserved.
5+
// Licensed under the MIT License.
6+
7+
package azappconfig_test
8+
9+
import (
10+
"os"
11+
"testing"
12+
13+
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
14+
"github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig"
15+
"github.com/Azure/azure-sdk-for-go/sdk/internal/recording"
16+
"github.com/stretchr/testify/require"
17+
)
18+
19+
const (
20+
fakeConnStr = "Endpoint=https://contoso.azconfig.io;Id=fake-id:fake-value;Secret=ZmFrZS1zZWNyZXQ="
21+
)
22+
23+
func TestMain(m *testing.M) {
24+
os.Exit(run(m))
25+
}
26+
27+
func run(m *testing.M) int {
28+
err := recording.ResetProxy(nil)
29+
if err != nil {
30+
panic(err)
31+
}
32+
33+
switch recording.GetRecordMode() {
34+
case recording.PlaybackMode:
35+
if err := recording.SetDefaultMatcher(nil, &recording.SetDefaultMatcherOptions{
36+
ExcludedHeaders: []string{"Date", "X-Ms-Content-Sha256"},
37+
}); err != nil {
38+
panic(err)
39+
}
40+
41+
case recording.RecordingMode:
42+
defer func() {
43+
err := recording.ResetProxy(nil)
44+
if err != nil {
45+
panic(err)
46+
}
47+
}()
48+
49+
if err := recording.AddURISanitizer("https://contoso.azconfig.io", `https://\w+\.azconfig\.io`, nil); err != nil {
50+
panic(err)
51+
}
52+
53+
if err := recording.AddHeaderRegexSanitizer("x-ms-content-sha256", "fake-content", "", nil); err != nil {
54+
panic(err)
55+
}
56+
}
57+
58+
return m.Run()
59+
}
60+
61+
func NewClientFromConnectionString(t *testing.T) *azappconfig.Client {
62+
connStr := recording.GetEnvVariable("APPCONFIGURATION_CONNECTION_STRING", fakeConnStr)
63+
if connStr == "" && recording.GetRecordMode() != recording.PlaybackMode {
64+
t.Skip("set APPCONFIGURATION_CONNECTION_STRING to run this test")
65+
}
66+
67+
err := recording.Start(t, "sdk/data/azappconfig/testdata", nil)
68+
require.NoError(t, err)
69+
70+
t.Cleanup(func() {
71+
err := recording.Stop(t, nil)
72+
require.NoError(t, err)
73+
})
74+
75+
transport, err := recording.NewRecordingHTTPClient(t, nil)
76+
require.NoError(t, err)
77+
78+
client, err := azappconfig.NewClientFromConnectionString(connStr, &azappconfig.ClientOptions{
79+
ClientOptions: azcore.ClientOptions{
80+
Transport: transport,
81+
},
82+
})
83+
require.NoError(t, err)
84+
require.NotNil(t, client)
85+
return client
86+
}

0 commit comments

Comments
 (0)