Skip to content

Commit b2e7436

Browse files
authored
migrate from uber-go/mock to vektra/mockery (#212)
* feat: migrate from uber-go/mock to vektra/mockery - Replace go.uber.org/mock with github.com/vektra/mockery/v2 for mock generation - Update Makefile: replace mockgen target with mockery - Update go:generate directive in pkg/nftables/firewall.go - Regenerate mocks using mockery (now uses github.com/stretchr/testify/mock) - Update test imports and mock usage from gomock API to testify/mock API Mock API changes: - Mock class: MockFQDNCache -> FQDNCache - Constructor: NewMockFQDNCache(ctrl) -> NewFQDNCache(t) - Matchers: gomock.Any() -> mock.Anything - Expectations: .EXPECT().Method() -> .On("Method") * fix: match mock expectations on specific FQDNSelector values The test was using mock.Anything for both GetSetsForFQDN calls, causing both expectations to match every call and return the same values. Now matches on the actual FQDNSelector values (MatchName and MatchPattern) to properly test the different return values for IPv4 and IPv6 sets.
1 parent 267e119 commit b2e7436

6 files changed

Lines changed: 107 additions & 102 deletions

File tree

Makefile

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@ BUILDDATE := $(shell date -Iseconds)
44
VERSION := $(or ${VERSION},$(shell git describe --tags --exact-match 2> /dev/null || git symbolic-ref -q --short HEAD || git rev-parse --short HEAD))
55

66
CONTROLLER_TOOLS_VERSION ?= v0.18.0
7-
MOCKGEN_VERSION ?= $(shell go list -m all | grep go.uber.org/mock | awk '{print $$2}')
87
LOCALBIN ?= $(shell pwd)/bin
98
CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen
10-
MOCKGEN ?= $(LOCALBIN)/mockgen
9+
MOCKERY ?= $(LOCALBIN)/mockery
1110
ENVTEST ?= $(LOCALBIN)/setup-envtest
1211

1312
all: firewall-controller
@@ -65,7 +64,7 @@ vet:
6564
go vet ./...
6665

6766
# Generate code
68-
generate: controller-gen mockgen manifests
67+
generate: controller-gen mockery manifests
6968
$(CONTROLLER_GEN) object paths="./..."
7069
go generate ./...
7170

@@ -80,8 +79,7 @@ setup-envtest: $(ENVTEST)
8079
$(ENVTEST): $(LOCALBIN)
8180
test -s $(LOCALBIN)/setup-envtest || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest
8281

83-
.PHONY: mockgen
84-
mockgen: $(MOCKGEN)
85-
$(MOCKGEN): $(LOCALBIN)
86-
test -s $(LOCALBIN)/mockgen && $(LOCALBIN)/mockgen -version | grep -q $(MOCKGEN_VERSION) || \
87-
GOBIN=$(LOCALBIN) go install go.uber.org/mock/mockgen@$(MOCKGEN_VERSION)
82+
.PHONY: mockery
83+
mockery: $(MOCKERY)
84+
$(MOCKERY): $(LOCALBIN)
85+
test -s $(LOCALBIN)/mockery || GOBIN=$(LOCALBIN) go install github.com/vektra/mockery/v2@latest

go.mod

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ require (
1616
github.com/metal-stack/metal-networker v0.46.2
1717
github.com/metal-stack/v v1.0.3
1818
github.com/miekg/dns v1.1.72
19+
github.com/stretchr/testify v1.11.1
1920
github.com/txn2/txeh v1.7.0
2021
github.com/vishvananda/netlink v1.3.1
21-
go.uber.org/mock v0.6.0
2222
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba
2323
k8s.io/api v0.34.0
2424
k8s.io/apiextensions-apiserver v0.34.0
@@ -83,6 +83,7 @@ require (
8383
github.com/prometheus/common v0.67.5 // indirect
8484
github.com/prometheus/procfs v0.19.2 // indirect
8585
github.com/spf13/pflag v1.0.10 // indirect
86+
github.com/stretchr/objx v0.5.2 // indirect
8687
github.com/vishvananda/netns v0.0.5 // indirect
8788
github.com/x448/float16 v0.8.4 // indirect
8889
go.mongodb.org/mongo-driver v1.17.7 // indirect

go.sum

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,6 @@ go.mongodb.org/mongo-driver v1.17.7 h1:a9w+U3Vt67eYzcfq3k/OAv284/uUUkL0uP75VE5rC
213213
go.mongodb.org/mongo-driver v1.17.7/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ=
214214
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
215215
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
216-
go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y=
217-
go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU=
218216
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
219217
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
220218
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=

pkg/nftables/firewall.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
firewallv2 "github.com/metal-stack/firewall-controller-manager/api/v2"
2626
firewallv1 "github.com/metal-stack/firewall-controller/v2/api/v1"
2727

28-
_ "go.uber.org/mock/mockgen/model" // required for go:generate to work
2928
)
3029

3130
const (
@@ -38,7 +37,7 @@ const (
3837
//go:embed *.tpl
3938
var templates embed.FS
4039

41-
//go:generate ../../bin/mockgen -destination=./mocks/mock_fqdncache.go -package=mocks . FQDNCache
40+
//go:generate ../../bin/mockery --name=FQDNCache --outpkg=mocks --output=./mocks --filename=mock_fqdncache.go
4241
type FQDNCache interface {
4342
GetSetsForRendering(fqdns []firewallv1.FQDNSelector) (result []dns.RenderIPSet)
4443
GetSetsForFQDN(fqdn firewallv1.FQDNSelector) (result []firewallv1.IPSet)

pkg/nftables/mocks/mock_fqdncache.go

Lines changed: 91 additions & 75 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/nftables/networkpolicy_test.go

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"testing"
55

66
"github.com/google/go-cmp/cmp"
7-
"go.uber.org/mock/gomock"
87
corev1 "k8s.io/api/core/v1"
98
networking "k8s.io/api/networking/v1"
109
"k8s.io/apimachinery/pkg/util/intstr"
@@ -142,7 +141,7 @@ func TestClusterwideNetworkPolicyEgressRules(t *testing.T) {
142141
tests := []struct {
143142
name string
144143
input firewallv1.ClusterwideNetworkPolicy
145-
record func(*mocks.MockFQDNCache)
144+
record func(*mocks.FQDNCache)
146145
want want
147146
}{
148147
{
@@ -174,7 +173,7 @@ func TestClusterwideNetworkPolicyEgressRules(t *testing.T) {
174173
},
175174
},
176175
},
177-
record: func(cache *mocks.MockFQDNCache) {},
176+
record: func(cache *mocks.FQDNCache) {},
178177
want: want{
179178
egress: nftablesRules{
180179
`ip saddr == @cluster_prefixes ip daddr != { 1.1.0.1 } ip daddr { 1.1.0.0/24, 1.1.1.0/24 } tcp dport { 53 } counter accept comment "accept traffic for np tcp"`,
@@ -214,18 +213,15 @@ func TestClusterwideNetworkPolicyEgressRules(t *testing.T) {
214213
},
215214
},
216215
},
217-
record: func(cache *mocks.MockFQDNCache) {
216+
record: func(cache *mocks.FQDNCache) {
218217
cache.
219-
EXPECT().
220-
IsInitialized().
218+
On("IsInitialized").
221219
Return(true)
222220
cache.
223-
EXPECT().
224-
GetSetsForFQDN(gomock.Any()).
221+
On("GetSetsForFQDN", firewallv1.FQDNSelector{MatchName: "test.com"}).
225222
Return([]firewallv1.IPSet{{SetName: "test", Version: firewallv1.IPv4}})
226223
cache.
227-
EXPECT().
228-
GetSetsForFQDN(gomock.Any()).
224+
On("GetSetsForFQDN", firewallv1.FQDNSelector{MatchPattern: "*.test.com"}).
229225
Return([]firewallv1.IPSet{{SetName: "test2", Version: firewallv1.IPv6}})
230226
},
231227
want: want{
@@ -239,13 +235,10 @@ func TestClusterwideNetworkPolicyEgressRules(t *testing.T) {
239235
},
240236
}
241237

242-
ctrl := gomock.NewController(t)
243-
defer ctrl.Finish()
244-
245-
fqdnCache := mocks.NewMockFQDNCache(ctrl)
246238
for _, tt := range tests {
247239
tt := tt
248240
t.Run(tt.name, func(t *testing.T) {
241+
fqdnCache := mocks.NewFQDNCache(t)
249242
tt.record(fqdnCache)
250243
if len(tt.want.egress) > 0 {
251244
egress, _ := clusterwideNetworkPolicyEgressRules(fqdnCache, tt.input, false)

0 commit comments

Comments
 (0)