Skip to content

Commit 0cb2b1a

Browse files
authored
Add GenerateAlphaNumericID feature to testutil of mgmt. plane interal. (Azure#18927)
* Add GenerateAlphaNumericID feature to testutil of mgmt. plane interal. * build: release resourcemanager/internal 1.1.0
1 parent ae58199 commit 0cb2b1a

File tree

5 files changed

+57
-9
lines changed

5 files changed

+57
-9
lines changed

sdk/resourcemanager/internal/CHANGELOG.md

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
11
# Release History
22

3-
## 1.0.2 (Unreleased)
3+
## 1.1.0 (2022-08-24)
44

55
### Features Added
6-
7-
### Breaking Changes
8-
9-
### Bugs Fixed
10-
11-
### Other Changes
6+
* Add `GenerateAlphaNumericID` to testutil
127

138
## 1.0.1 (2022-06-23)
149

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"Entries": [],
3+
"Variables": {
4+
"recordingRandomSeed": "1661246628"
5+
}
6+
}

sdk/resourcemanager/internal/testutil/recording.go

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,23 @@ package testutil
88

99
import (
1010
"fmt"
11+
"math/rand"
1112
"net/http"
13+
"strconv"
1214
"testing"
15+
"time"
1316

1417
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
1518
"github.com/Azure/azure-sdk-for-go/sdk/internal/recording"
1619
)
1720

21+
const recordingRandomSeedVariableName = "recordingRandomSeed"
22+
23+
var (
24+
recordingRandomSeed int64
25+
letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
26+
)
27+
1828
type recordingPolicy struct {
1929
options recording.RecordingOptions
2030
t *testing.T
@@ -97,8 +107,37 @@ func StartRecording(t *testing.T, pathToPackage string) func() {
97107

98108
// StopRecording stops the recording.
99109
func StopRecording(t *testing.T) {
100-
err := recording.Stop(t, nil)
110+
err := recording.Stop(t, &recording.RecordingOptions{Variables: map[string]interface{}{recordingRandomSeedVariableName: strconv.FormatInt(recordingRandomSeed, 10)}})
101111
if err != nil {
102112
t.Fatalf("Failed to stop recording: %v", err)
103113
}
104114
}
115+
116+
// GenerateAlphaNumericID will generate a random alpha numeric ID.
117+
// When handling live request, the random seed is generated.
118+
// Otherwise, the random seed is stable and will be stored in recording file.
119+
// The length parameter is the random part length, not include the prefix part.
120+
func GenerateAlphaNumericID(t *testing.T, prefix string, length int) string {
121+
if recording.GetRecordMode() != "live" {
122+
if recordingRandomSeed == 0 {
123+
variables := recording.GetVariables(t)
124+
if seed, ok := variables[recordingRandomSeedVariableName]; ok {
125+
seedNum, err := strconv.ParseInt(seed.(string), 10, 64)
126+
if err != nil {
127+
recordingRandomSeed = seedNum
128+
}
129+
}
130+
if recordingRandomSeed == 0 {
131+
recordingRandomSeed = time.Now().Unix()
132+
}
133+
}
134+
rand.Seed(recordingRandomSeed)
135+
} else {
136+
rand.Seed(time.Now().Unix())
137+
}
138+
b := make([]rune, length)
139+
for i := range b {
140+
b[i] = letterRunes[rand.Intn(len(letterRunes))]
141+
}
142+
return prefix + string(b)
143+
}

sdk/resourcemanager/internal/testutil/recording_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,11 @@ func TestStartStopRecording(t *testing.T) {
3535
stop := StartRecording(t, pathToPackage)
3636
defer stop()
3737
}
38+
39+
func TestGenerateAlphaNumericID(t *testing.T) {
40+
stop := StartRecording(t, pathToPackage)
41+
first := GenerateAlphaNumericID(t, "test", 6)
42+
second := GenerateAlphaNumericID(t, "test", 6)
43+
require.Equal(t, first, second)
44+
defer stop()
45+
}

sdk/resourcemanager/internal/version.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ const (
1111
Module = "internal"
1212

1313
// Version is the semantic version (see http://semver.org) of this module.
14-
Version = "v1.0.2"
14+
Version = "v1.1.0"
1515
)

0 commit comments

Comments
 (0)