Skip to content

Commit 0e49a25

Browse files
[testing] - add more coverage (#194)
* add tests for filter and version * exclude mock package from coverage since it's autogenerated * add helpers test * exclude autogenerated deepcopy from coverage
1 parent 7592c23 commit 0e49a25

9 files changed

+138
-8
lines changed

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
.idea
33
bin/*
44
kind-logs-*
5-
cover.out
5+
cover.out*
66
kubeconfig*
77
.devbox/*
88
docs/book

Makefile

+3-1
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,9 @@ docs:
140140

141141
.PHONY: test
142142
test: generate fmt vet envtest ## Run tests.
143-
KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(CACHE_BIN) -p path)" go test -race -timeout 60s ./... -coverprofile cover.out
143+
KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(CACHE_BIN) -p path)" go test -race -timeout 60s `go list ./... | grep -v ./mock` -coverprofile cover.out.tmp
144+
grep -v "zz_generated.deepcopy.go" cover.out.tmp > cover.out
145+
rm cover.out.tmp
144146

145147
.PHONY: e2etest
146148
e2etest: generate local-deploy chainsaw

cloud/services/loadbalancers.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,11 @@ func CreateNodeBalancer(ctx context.Context, clusterScope *scope.ClusterScope, l
3131
Label: NBLabel,
3232
Tags: tags,
3333
}
34-
linodeNBs, err := clusterScope.LinodeClient.ListNodeBalancers(ctx, linodego.NewListOptions(1, listFilter.String()))
34+
filter, err := listFilter.String()
35+
if err != nil {
36+
return nil, err
37+
}
38+
linodeNBs, err := clusterScope.LinodeClient.ListNodeBalancers(ctx, linodego.NewListOptions(1, filter))
3539
if err != nil {
3640
logger.Info("Failed to list NodeBalancers", "error", err.Error())
3741

controller/linodemachine_controller.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,11 @@ func (r *LinodeMachineReconciler) reconcileCreate(
248248
Label: machineScope.LinodeMachine.Name,
249249
Tags: tags,
250250
}
251-
linodeInstances, err := machineScope.LinodeClient.ListInstances(ctx, linodego.NewListOptions(1, listFilter.String()))
251+
filter, err := listFilter.String()
252+
if err != nil {
253+
return nil, err
254+
}
255+
linodeInstances, err := machineScope.LinodeClient.ListInstances(ctx, linodego.NewListOptions(1, filter))
252256
if err != nil {
253257
logger.Error(err, "Failed to list Linode machine instances")
254258

controller/linodevpc_controller_helpers.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,11 @@ func (r *LinodeVPCReconciler) reconcileVPC(ctx context.Context, vpcScope *scope.
4646
Label: createConfig.Label,
4747
Tags: nil,
4848
}
49-
if vpcs, err := vpcScope.LinodeClient.ListVPCs(ctx, linodego.NewListOptions(1, listFilter.String())); err != nil {
49+
filter, err := listFilter.String()
50+
if err != nil {
51+
return err
52+
}
53+
if vpcs, err := vpcScope.LinodeClient.ListVPCs(ctx, linodego.NewListOptions(1, filter)); err != nil {
5054
logger.Error(err, "Failed to list VPCs")
5155

5256
return err

util/filter.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@ func (f Filter) MarshalJSON() ([]byte, error) {
3535

3636
// String returns the string representation of the encoded value from
3737
// [Filter.MarshalJSON].
38-
func (f Filter) String() string {
38+
func (f Filter) String() (string, error) {
3939
p, err := f.MarshalJSON()
4040
if err != nil {
41-
panic("this should not have failed")
41+
return "", err
4242
}
4343

44-
return string(p)
44+
return string(p), nil
4545
}

util/filter_test.go

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package util
2+
3+
import "testing"
4+
5+
func TestString(t *testing.T) {
6+
t.Parallel()
7+
tests := []struct {
8+
name string
9+
filter Filter
10+
expectErr bool
11+
}{{
12+
name: "success ID",
13+
filter: Filter{
14+
ID: Pointer(123),
15+
Label: "",
16+
Tags: nil,
17+
},
18+
expectErr: false,
19+
}, {
20+
name: "success label",
21+
filter: Filter{
22+
ID: nil,
23+
Label: "test",
24+
Tags: nil,
25+
},
26+
expectErr: false,
27+
}, {
28+
name: "success tags",
29+
filter: Filter{
30+
ID: nil,
31+
Label: "",
32+
Tags: []string{"testtag"},
33+
},
34+
expectErr: false,
35+
}, {
36+
name: "failure unmarshal",
37+
filter: Filter{
38+
ID: nil,
39+
Label: "",
40+
Tags: []string{},
41+
},
42+
expectErr: true,
43+
}}
44+
for _, tt := range tests {
45+
testcase := tt
46+
t.Run(testcase.name, func(t *testing.T) {
47+
t.Parallel()
48+
_, err := testcase.filter.String()
49+
if testcase.expectErr && err != nil {
50+
t.Error("expected err but got nil")
51+
}
52+
})
53+
}
54+
}

util/helpers_test.go

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package util
2+
3+
import (
4+
"errors"
5+
"testing"
6+
7+
"github.com/linode/linodego"
8+
)
9+
10+
func TestIgnoreLinodeAPIError(t *testing.T) {
11+
t.Parallel()
12+
tests := []struct {
13+
name string
14+
err error
15+
code int
16+
shouldFilter bool
17+
}{{
18+
name: "Not Linode API error",
19+
err: errors.New("foo"),
20+
code: 0,
21+
shouldFilter: false,
22+
}, {
23+
name: "Ignore not found Linode API error",
24+
err: linodego.Error{
25+
Response: nil,
26+
Code: 400,
27+
Message: "not found",
28+
},
29+
code: 400,
30+
shouldFilter: true,
31+
}, {
32+
name: "Don't ignore not found Linode API error",
33+
err: linodego.Error{
34+
Response: nil,
35+
Code: 400,
36+
Message: "not found",
37+
},
38+
code: 500,
39+
shouldFilter: false,
40+
}}
41+
for _, tt := range tests {
42+
testcase := tt
43+
t.Run(testcase.name, func(t *testing.T) {
44+
t.Parallel()
45+
err := IgnoreLinodeAPIError(testcase.err, testcase.code)
46+
if testcase.shouldFilter && err != nil {
47+
t.Error("expected err but got nil")
48+
}
49+
})
50+
}
51+
}

version/version_test.go

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package version
2+
3+
import "testing"
4+
5+
func TestVersion(t *testing.T) {
6+
t.Parallel()
7+
vers := GetVersion()
8+
if vers != "dev" {
9+
t.Errorf("unset version should be dev, got %s", vers)
10+
}
11+
}

0 commit comments

Comments
 (0)