Skip to content

Commit e84bcf0

Browse files
committed
Merge branch 'ajwalker/mockery-constructors' into 'main'
Use mockery constructors in tests See merge request https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests/5581 Merged-by: Arran Walker <[email protected]> Approved-by: Hannes Hörl <[email protected]>
2 parents 2147fb4 + 06625b3 commit e84bcf0

File tree

73 files changed

+706
-1264
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+706
-1264
lines changed

cache/adapter_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func makeTestFactory(test factorizeTestCase) Factory {
4141
}
4242

4343
func TestCreateAdapter(t *testing.T) {
44-
adapterMock := new(MockAdapter)
44+
adapterMock := NewMockAdapter(t)
4545

4646
tests := map[string]factorizeTestCase{
4747
"adapter doesn't exist": {
@@ -79,7 +79,7 @@ func TestCreateAdapter(t *testing.T) {
7979
_ = factories.Register(
8080
"additional-adapter",
8181
func(config *common.CacheConfig, timeout time.Duration, objectName string) (Adapter, error) {
82-
return new(MockAdapter), nil
82+
return NewMockAdapter(t), nil
8383
})
8484

8585
config := &common.CacheConfig{

cache/azure/adapter_test.go

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,10 @@ func prepareMockedCredentialsResolverInitializer(tc adapterOperationInvalidConfi
6969
}
7070
}
7171

72-
func prepareMockedCredentialsResolverForInvalidConfig(adapter *azureAdapter, tc adapterOperationInvalidConfigTestCase) {
73-
cr := &mockCredentialsResolver{}
72+
func prepareMockedCredentialsResolverForInvalidConfig(t *testing.T, adapter *azureAdapter, tc adapterOperationInvalidConfigTestCase) {
73+
cr := newMockCredentialsResolver(t)
7474

75-
resolveCall := cr.On("Resolve")
75+
resolveCall := cr.On("Resolve").Maybe()
7676
if tc.credentialsResolverResolveError {
7777
resolveCall.Return(fmt.Errorf("test error"))
7878
} else {
@@ -86,7 +86,7 @@ func prepareMockedCredentialsResolverForInvalidConfig(adapter *azureAdapter, tc
8686

8787
// Always return an account key signer to avoid metadata lookups
8888
signer, err := newAccountKeySigner(config.Azure)
89-
cr.On("Signer").Return(signer, err)
89+
cr.On("Signer").Return(signer, err).Maybe()
9090

9191
adapter.credentialsResolver = cr
9292
}
@@ -100,7 +100,7 @@ func testGoCloudURLWithInvalidConfig(
100100
expectedErrorMessage string,
101101
) {
102102
t.Run(name, func(t *testing.T) {
103-
prepareMockedCredentialsResolverForInvalidConfig(adapter, tc)
103+
prepareMockedCredentialsResolverForInvalidConfig(t, adapter, tc)
104104

105105
u, err := operation(context.Background(), true)
106106

@@ -126,7 +126,7 @@ func testUploadEnvWithInvalidConfig(
126126
operation func(context.Context) (map[string]string, error),
127127
) {
128128
t.Run(name, func(t *testing.T) {
129-
prepareMockedCredentialsResolverForInvalidConfig(adapter, tc)
129+
prepareMockedCredentialsResolverForInvalidConfig(t, adapter, tc)
130130

131131
u, err := operation(context.Background())
132132
assert.NoError(t, err)
@@ -223,21 +223,6 @@ type adapterOperationTestCase struct {
223223
expectedError string
224224
}
225225

226-
func prepareMockedCredentialsResolver(adapter *azureAdapter) func(t *testing.T) {
227-
config := defaultAzureCache()
228-
signer, err := newAccountKeySigner(config.Azure)
229-
230-
cr := &mockCredentialsResolver{}
231-
cr.On("Resolve").Return(nil)
232-
cr.On("Signer").Return(signer, err)
233-
234-
adapter.credentialsResolver = cr
235-
236-
return func(t *testing.T) {
237-
cr.AssertExpectations(t)
238-
}
239-
}
240-
241226
func prepareMockedSignedURLGenerator(
242227
t *testing.T,
243228
tc adapterOperationTestCase,

cache/cache_test.go

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,10 @@ type cacheOperationTest struct {
2727
expectedOutput []string
2828
}
2929

30-
func prepareFakeCreateAdapter(t *testing.T, operationName string, tc cacheOperationTest) func() {
31-
assertAdapterExpectations := func(t mock.TestingT) bool { return true }
32-
30+
func prepareFakeCreateAdapter(t *testing.T, operationName string, tc cacheOperationTest) {
3331
var cacheAdapter Adapter
3432
if tc.adapterExists {
35-
a := new(MockAdapter)
33+
a := NewMockAdapter(t)
3634

3735
if tc.adapterURL.URL != nil {
3836
if operationName == "GetGoCloudURL" {
@@ -41,8 +39,6 @@ func prepareFakeCreateAdapter(t *testing.T, operationName string, tc cacheOperat
4139
a.On(operationName, mock.Anything).Return(tc.adapterURL)
4240
}
4341
}
44-
45-
assertAdapterExpectations = a.AssertExpectations
4642
cacheAdapter = a
4743
}
4844

@@ -56,10 +52,9 @@ func prepareFakeCreateAdapter(t *testing.T, operationName string, tc cacheOperat
5652
return cacheAdapter, cacheAdapterCreationError
5753
}
5854

59-
return func() {
55+
t.Cleanup(func() {
6056
createAdapter = oldCreateAdapter
61-
assertAdapterExpectations(t)
62-
}
57+
})
6358
}
6459

6560
func prepareFakeBuild(tc cacheOperationTest) *common.Build {
@@ -95,8 +90,7 @@ func testCacheOperation(
9590
ctx := context.Background()
9691
hook := test.NewGlobal()
9792

98-
cleanupCreateAdapter := prepareFakeCreateAdapter(t, operationName, tc)
99-
defer cleanupCreateAdapter()
93+
prepareFakeCreateAdapter(t, operationName, tc)
10094

10195
build := prepareFakeBuild(tc)
10296
generatedURL := operation(ctx, build, tc.key)

cache/credentials_adapter_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func makeTestCredentialsFactory(test credentialsFactoryTestCase) CredentialsFact
3838
}
3939

4040
func TestCreateCredentialsAdapter(t *testing.T) {
41-
adapterMock := new(MockCredentialsAdapter)
41+
adapterMock := NewMockCredentialsAdapter(t)
4242

4343
tests := map[string]credentialsFactoryTestCase{
4444
"adapter doesn't exist": {
@@ -76,7 +76,7 @@ func TestCreateCredentialsAdapter(t *testing.T) {
7676
_ = credentialsFactories.Register(
7777
"additional-adapter",
7878
func(config *common.CacheConfig) (CredentialsAdapter, error) {
79-
return new(MockCredentialsAdapter), nil
79+
return NewMockCredentialsAdapter(t), nil
8080
})
8181

8282
config := &common.CacheConfig{

cache/gcs/adapter_test.go

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ type adapterOperationInvalidConfigTestCase struct {
7777
expectedError string
7878
}
7979

80-
func prepareMockedCredentialsResolverInitializer(tc adapterOperationInvalidConfigTestCase) func() {
80+
func prepareMockedCredentialsResolverInitializer(t *testing.T, tc adapterOperationInvalidConfigTestCase) {
8181
oldCredentialsResolverInitializer := credentialsResolverInitializer
8282
credentialsResolverInitializer = func(config *common.CacheGCSConfig) (*defaultCredentialsResolver, error) {
8383
if tc.errorOnCredentialsResolverInitialization {
@@ -87,15 +87,15 @@ func prepareMockedCredentialsResolverInitializer(tc adapterOperationInvalidConfi
8787
return newDefaultCredentialsResolver(config)
8888
}
8989

90-
return func() {
90+
t.Cleanup(func() {
9191
credentialsResolverInitializer = oldCredentialsResolverInitializer
92-
}
92+
})
9393
}
9494

95-
func prepareMockedCredentialsResolverForInvalidConfig(adapter *gcsAdapter, tc adapterOperationInvalidConfigTestCase) {
96-
cr := &mockCredentialsResolver{}
95+
func prepareMockedCredentialsResolverForInvalidConfig(t *testing.T, adapter *gcsAdapter, tc adapterOperationInvalidConfigTestCase) {
96+
cr := newMockCredentialsResolver(t)
9797

98-
resolveCall := cr.On("Resolve")
98+
resolveCall := cr.On("Resolve").Maybe()
9999
if tc.credentialsResolverResolveError {
100100
resolveCall.Return(fmt.Errorf("test error"))
101101
} else {
@@ -105,11 +105,11 @@ func prepareMockedCredentialsResolverForInvalidConfig(adapter *gcsAdapter, tc ad
105105
cr.On("Credentials").Return(&common.CacheGCSCredentials{
106106
AccessID: tc.accessID,
107107
PrivateKey: tc.privateKey,
108-
})
108+
}).Maybe()
109109

110110
cr.On("SignBytesFunc", mock.Anything).Return(func(payload []byte) ([]byte, error) {
111111
return []byte("output"), nil
112-
})
112+
}).Maybe()
113113

114114
adapter.credentialsResolver = cr
115115
}
@@ -122,7 +122,7 @@ func testAdapterOperationWithInvalidConfig(
122122
operation func(context.Context) cache.PresignedURL,
123123
) {
124124
t.Run(name, func(t *testing.T) {
125-
prepareMockedCredentialsResolverForInvalidConfig(adapter, tc)
125+
prepareMockedCredentialsResolverForInvalidConfig(t, adapter, tc)
126126
hook := test.NewGlobal()
127127

128128
u := operation(context.Background())
@@ -167,8 +167,7 @@ func TestAdapterOperation_InvalidConfig(t *testing.T) {
167167

168168
for name, tc := range tests {
169169
t.Run(name, func(t *testing.T) {
170-
cleanupCredentialsResolverInitializerMock := prepareMockedCredentialsResolverInitializer(tc)
171-
defer cleanupCredentialsResolverInitializerMock()
170+
prepareMockedCredentialsResolverInitializer(t, tc)
172171

173172
config := defaultGCSCache()
174173
if tc.noGCSConfig {
@@ -217,8 +216,8 @@ func mockSignBytesFunc(_ context.Context) func([]byte) ([]byte, error) {
217216
}
218217
}
219218

220-
func prepareMockedCredentialsResolver(adapter *gcsAdapter, tc adapterOperationTestCase) func(t *testing.T) {
221-
cr := &mockCredentialsResolver{}
219+
func prepareMockedCredentialsResolver(t *testing.T, adapter *gcsAdapter, tc adapterOperationTestCase) {
220+
cr := newMockCredentialsResolver(t)
222221
cr.On("Resolve").Return(nil)
223222

224223
pk := privateKey
@@ -232,10 +231,6 @@ func prepareMockedCredentialsResolver(adapter *gcsAdapter, tc adapterOperationTe
232231
})
233232

234233
adapter.credentialsResolver = cr
235-
236-
return func(t *testing.T) {
237-
cr.AssertExpectations(t)
238-
}
239234
}
240235

241236
func prepareMockedSignedURLGenerator(
@@ -271,9 +266,7 @@ func testAdapterOperation(
271266
operation func(context.Context) cache.PresignedURL,
272267
) {
273268
t.Run(name, func(t *testing.T) {
274-
cleanupCredentialsResolverMock := prepareMockedCredentialsResolver(adapter, tc)
275-
defer cleanupCredentialsResolverMock(t)
276-
269+
prepareMockedCredentialsResolver(t, adapter, tc)
277270
prepareMockedSignedURLGenerator(t, tc, expectedMethod, expectedContentType, adapter)
278271
hook := test.NewGlobal()
279272

cache/gcs/credentials_resolver_test.go

Lines changed: 21 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"errors"
99
"fmt"
1010
"os"
11+
"path/filepath"
1112
"testing"
1213

1314
"cloud.google.com/go/iam/credentials/apiv1/credentialspb"
@@ -31,43 +32,6 @@ type credentialsResolverTestCase struct {
3132
expectedCredentials *common.CacheGCSCredentials
3233
}
3334

34-
func prepareStubbedCredentialsFile(t *testing.T, testCase credentialsResolverTestCase) func() {
35-
cleanup := func() {}
36-
37-
if testCase.credentialsFileContent != nil {
38-
file, err := os.CreateTemp("", "gcp-credentials-file")
39-
require.NoError(t, err)
40-
41-
cleanup = func() {
42-
os.Remove(file.Name())
43-
}
44-
45-
testCase.config.CredentialsFile = file.Name()
46-
47-
switch {
48-
case testCase.credentialsFileDoesNotExist:
49-
os.Remove(file.Name())
50-
case testCase.credentialsFileWithInvalidJSON:
51-
_, err = file.Write([]byte("a"))
52-
require.NoError(t, err)
53-
54-
err = file.Close()
55-
require.NoError(t, err)
56-
default:
57-
data, err := json.Marshal(testCase.credentialsFileContent)
58-
require.NoError(t, err)
59-
60-
_, err = file.Write(data)
61-
require.NoError(t, err)
62-
63-
err = file.Close()
64-
require.NoError(t, err)
65-
}
66-
}
67-
68-
return cleanup
69-
}
70-
7135
func getCredentialsConfig(accessID string, privateKey string) *common.CacheGCSConfig {
7236
return &common.CacheGCSConfig{
7337
CacheGCSCredentials: common.CacheGCSCredentials{
@@ -155,11 +119,25 @@ func TestDefaultCredentialsResolver(t *testing.T) {
155119

156120
for name, testCase := range cases {
157121
t.Run(name, func(t *testing.T) {
158-
cleanupCredentialsFileMock := prepareStubbedCredentialsFile(t, testCase)
159-
defer cleanupCredentialsFileMock()
122+
if testCase.credentialsFileContent != nil {
123+
pathname := filepath.Join(t.TempDir(), "gcp-credentials-file")
124+
125+
testCase.config.CredentialsFile = pathname
126+
127+
switch {
128+
case testCase.credentialsFileDoesNotExist:
129+
// no-op
130+
case testCase.credentialsFileWithInvalidJSON:
131+
require.NoError(t, os.WriteFile(pathname, []byte("a"), 0o600))
132+
default:
133+
data, err := json.Marshal(testCase.credentialsFileContent)
134+
require.NoError(t, err)
135+
require.NoError(t, os.WriteFile(pathname, data, 0o600))
136+
}
137+
}
160138

161-
mc := &MockMetadataClient{}
162-
metadataCall := mc.On("Email", mock.Anything)
139+
mc := NewMockMetadataClient(t)
140+
metadataCall := mc.On("Email", mock.Anything).Maybe()
163141
if testCase.metadataServerError {
164142
metadataCall.Return("", fmt.Errorf("test error"))
165143
} else {
@@ -211,8 +189,8 @@ func TestSignBytesOperation(t *testing.T) {
211189

212190
sbr := credentialspb.SignBlobResponse{SignedBlob: tc.output}
213191

214-
icc := &MockIamCredentialsClient{}
215-
signBlobCall := icc.On("SignBlob", mock.Anything, mock.Anything)
192+
icc := NewMockIamCredentialsClient(t)
193+
signBlobCall := icc.On("SignBlob", mock.Anything, mock.Anything).Maybe()
216194
cr, _ := newDefaultCredentialsResolver(config)
217195
if tc.returnError == nil {
218196
cr.credentialsClient = icc

cache/s3/adapter_test.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ type cacheOperationTest struct {
6161
expectedUploadHeaders http.Header
6262
}
6363

64-
func onFakeMinioURLGenerator(tc cacheOperationTest) func() {
65-
client := new(mockMinioClient)
64+
func onFakeMinioURLGenerator(t *testing.T, tc cacheOperationTest) {
65+
client := newMockMinioClient(t)
6666

6767
var err error
6868
if tc.errorOnURLPresigning {
@@ -74,7 +74,7 @@ func onFakeMinioURLGenerator(tc cacheOperationTest) func() {
7474
"PresignHeader", mock.Anything, mock.Anything, mock.Anything,
7575
mock.Anything, mock.Anything, mock.Anything, mock.Anything,
7676
).
77-
Return(tc.presignedURL, err)
77+
Return(tc.presignedURL, err).Maybe()
7878

7979
oldNewMinioURLGenerator := newMinioClient
8080
newMinioClient = func(s3 *common.CacheS3Config) (minioClient, error) {
@@ -84,9 +84,9 @@ func onFakeMinioURLGenerator(tc cacheOperationTest) func() {
8484
return client, nil
8585
}
8686

87-
return func() {
87+
t.Cleanup(func() {
8888
newMinioClient = oldNewMinioURLGenerator
89-
}
89+
})
9090
}
9191

9292
func testCacheOperation(
@@ -97,8 +97,7 @@ func testCacheOperation(
9797
cacheConfig *common.CacheConfig,
9898
) {
9999
t.Run(operationName, func(t *testing.T) {
100-
cleanupMinioURLGeneratorMock := onFakeMinioURLGenerator(tc)
101-
defer cleanupMinioURLGeneratorMock()
100+
onFakeMinioURLGenerator(t, tc)
102101

103102
adapter, err := New(cacheConfig, defaultTimeout, objectName)
104103

0 commit comments

Comments
 (0)