provider-digitalocean icon indicating copy to clipboard operation
provider-digitalocean copied to clipboard

Add tests for the load balancer controller

Open ADustyOldMuffin opened this issue 2 years ago • 12 comments

We need tests for the load balancer controller, you can see how AWS is doing it here and use it as an example.

We need to test for basic functionality such as successful creation, and deletion as well as if we encounter errors. We don't currently allow for updating of resources so this will be good plumbing to put in before that.

ADustyOldMuffin avatar Feb 25 '22 03:02 ADustyOldMuffin

Hi, I came here from hacktoberfest discord server. Will try to look into this and other issues as well. Thanks

qascade avatar Sep 18 '22 07:09 qascade

I will study digital ocean docs and the repo and get back to you within a few days. I have looked at the contribution guidelines of cross-plane. If there are any specific things that I should also know or might help me. Please do let me know. I don't have experience with digital ocean, So, might take a while. Thanks.

qascade avatar Sep 18 '22 07:09 qascade

Sounds good, this is more around testing the controller than DigitalOcean itself. You can find some examples here as the tests would be similar just specific to the Load Balancer controller.

ADustyOldMuffin avatar Sep 18 '22 13:09 ADustyOldMuffin

I assigned you, but don't feel any pressure! Its just so someone else doesn't pick this up in the meantime.

ADustyOldMuffin avatar Sep 18 '22 13:09 ADustyOldMuffin

Sure, I have started setting up the dev environment; I will look at the load balancer code in more detail. If I have any questions, will get back to you. Thanks for assigning this task to me.

qascade avatar Sep 19 '22 08:09 qascade

I tried to build the submodule using make but I keep getting this error. I have tried go mod tidy.

make                                                                                                                     ─╯
00:13:11 [ .. ] verify dependencies have expected content
all modules verified
00:13:13 [ OK ] go modules dependencies verified
00:13:14 [ .. ] golangci-lint
WARN [runner] Can't run linter goanalysis_metalinter: bodyclose: failed prerequisites: [[email protected]/crossplane-contrib/provider-digitalocean/apis/compute/v1alpha1: analysis skipped: errors in package: [/Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/apis/compute/v1alpha1/droplet_types.go:20:9: could not import k8s.io/apimachinery/pkg/apis/meta/v1 (/Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/.work/pkg/pkg/mod/k8s.io/[email protected]/pkg/apis/meta/v1/controller_ref.go:20:2: could not import k8s.io/apimachinery/pkg/runtime/schema (/Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/.work/pkg/pkg/mod/k8s.io/[email protected]/pkg/runtime/schema/generated.pb.go:23:6: could not import fmt (/usr/local/Cellar/go/1.19.1/libexec/src/fmt/errors.go:7:8: could not import errors (/usr/local/Cellar/go/1.19.1/libexec/src/errors/wrap.go:8:2: could not import internal/reflectlite (/usr/local/Cellar/go/1.19.1/libexec/src/internal/reflectlite/swapper.go:8:2: could not import internal/goarch (-: could not load export data: cannot import "internal/goarch" (unknown iexport format version 2), export data is newer version - update tool)))))) /Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/apis/compute/v1alpha1/droplet_types.go:22:7: could not import github.com/crossplane/crossplane-runtime/apis/common/v1 (/Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/.work/pkg/pkg/mod/github.com/crossplane/[email protected]/apis/common/v1/condition.go:20:2: could not import sort (/usr/local/Cellar/go/1.19.1/libexec/src/sort/slice.go:7:8: could not import math/bits (-: could not load export data: cannot import "math/bits" (unknown iexport format version 2), export data is newer version - update tool))) /Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/apis/compute/v1alpha1/register.go:20:2: could not import reflect (/usr/local/Cellar/go/1.19.1/libexec/src/reflect/abi.go:8:2: could not import internal/abi (/usr/local/Cellar/go/1.19.1/libexec/src/internal/abi/abi.go:8:2: could not import internal/goarch (-: could not load export data: cannot import "internal/goarch" (unknown iexport format version 2), export data is newer version - update tool))) /Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/apis/compute/v1alpha1/register.go:22:2: could not import k8s.io/apimachinery/pkg/runtime/schema (/Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/.work/pkg/pkg/mod/k8s.io/[email protected]/pkg/runtime/schema/generated.pb.go:23:6: could not import fmt (/usr/local/Cellar/go/1.19.1/libexec/src/fmt/errors.go:7:8: could not import errors (/usr/local/Cellar/go/1.19.1/libexec/src/errors/wrap.go:8:2: could not import internal/reflectlite (/usr/local/Cellar/go/1.19.1/libexec/src/internal/reflectlite/swapper.go:8:2: could not import internal/goarch (-: could not load export data: cannot import "internal/goarch" (unknown iexport format version 2), export data is newer version - update tool))))) /Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/apis/compute/v1alpha1/register.go:23:2: could not import sigs.k8s.io/controller-runtime/pkg/scheme (/Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/.work/pkg/pkg/mod/sigs.k8s.io/[email protected]/pkg/scheme/scheme.go:58:9: could not import k8s.io/apimachinery/pkg/apis/meta/v1 (/Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/.work/pkg/pkg/mod/k8s.io/[email protected]/pkg/apis/meta/v1/controller_ref.go:20:2: could not import k8s.io/apimachinery/pkg/runtime/schema (/Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/.work/pkg/pkg/mod/k8s.io/[email protected]/pkg/runtime/schema/generated.pb.go:23:6: could not import fmt (/usr/local/Cellar/go/1.19.1/libexec/src/fmt/errors.go:7:8: could not import errors (/usr/local/Cellar/go/1.19.1/libexec/src/errors/wrap.go:8:2: could not import internal/reflectlite (/usr/local/Cellar/go/1.19.1/libexec/src/internal/reflectlite/swapper.go:8:2: could not import internal/goarch (-: could not load export data: cannot import "internal/goarch" (unknown iexport format version 2), export data is newer version - update tool))))))) /Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/apis/compute/v1alpha1/zz_generated.deepcopy.go:25:10: could not import k8s.io/apimachinery/pkg/runtime (/Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/.work/pkg/pkg/mod/k8s.io/[email protected]/pkg/runtime/codec.go:20:2: could not import bytes (/usr/local/Cellar/go/1.19.1/libexec/src/bytes/buffer.go:10:2: could not import errors (/usr/local/Cellar/go/1.19.1/libexec/src/errors/wrap.go:8:2: could not import internal/reflectlite (/usr/local/Cellar/go/1.19.1/libexec/src/internal/reflectlite/swapper.go:8:2: could not import internal/goarch (-: could not load export data: cannot import "internal/goarch" (unknown iexport format version 2), export data is newer version - update tool))))) /Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/apis/compute/v1alpha1/zz_generated.managedlist.go:20:17: could not import github.com/crossplane/crossplane-runtime/pkg/resource (/Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/.work/pkg/pkg/mod/github.com/crossplane/[email protected]/pkg/resource/api.go:20:2: could not import context (/usr/local/Cellar/go/1.19.1/libexec/src/context/context.go:51:2: could not import errors (/usr/local/Cellar/go/1.19.1/libexec/src/errors/wrap.go:8:2: could not import internal/reflectlite (/usr/local/Cellar/go/1.19.1/libexec/src/internal/reflectlite/swapper.go:8:2: could not import internal/goarch (-: could not load export data: cannot import "internal/goarch" (unknown iexport format version 2), export data is newer version - update tool))))) /Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/apis/compute/v1alpha1/zz_generated.managed.go:24:19: mg.Status.GetCondition undefined (type DropletStatus has no field or method GetCondition) /Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/apis/compute/v1alpha1/zz_generated.managed.go:29:17: mg.Spec.DeletionPolicy undefined (type DropletSpec has no field or method DeletionPolicy) /Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/apis/compute/v1alpha1/zz_generated.managed.go:34:17: mg.Spec.ProviderConfigReference undefined (type DropletSpec has no field or method ProviderConfigReference) /Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/apis/compute/v1alpha1/zz_generated.managed.go:42:17: mg.Spec.ProviderReference undefined (type DropletSpec has no field or method ProviderReference) /Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/apis/compute/v1alpha1/zz_generated.managed.go:47:17: mg.Spec.WriteConnectionSecretToReference undefined (type DropletSpec has no field or method WriteConnectionSecretToReference) /Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/apis/compute/v1alpha1/zz_generated.managed.go:52:12: mg.Status.SetConditions undefined (type DropletStatus has no field or method SetConditions) /Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/apis/compute/v1alpha1/zz_generated.managed.go:57:10: mg.Spec.DeletionPolicy undefined (type DropletSpec has no field or method DeletionPolicy) /Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/apis/compute/v1alpha1/zz_generated.managed.go:62:10: mg.Spec.ProviderConfigReference undefined (type DropletSpec has no field or method ProviderConfigReference) /Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/apis/compute/v1alpha1/zz_generated.managed.go:70:10: mg.Spec.ProviderReference undefined (type DropletSpec has no field or method ProviderReference) /Users/sksingh/Desktop/Projects/openSource/provider-digitalocean/apis/compute/v1alpha1/zz_generated.managed.go:75:10: mg.Spec.WriteConnectionSecretToReference undefined (type DropletSpec has no field or method WriteConnectionSecretToReference)]]
WARN [runner] Can't run linter unused: buildir: failed to load package goarch: could not load export data: cannot import "internal/goarch" (unknown iexport format version 2), export data is newer version - update tool
ERRO Running error: buildir: failed to load package goarch: could not load export data: cannot import "internal/goarch" (unknown iexport format version 2), export data is newer version - update tool
00:13:20 [FAIL]
make[2]: *** [go.lint] Error 1
make[1]: *** [build.all] Error 2
make: *** [build] Error 2

@ADustyOldMuffin Do you know why this might be happening?

qascade avatar Sep 21 '22 18:09 qascade

What go version are you using? Make sure it matches what's in go mod.

ADustyOldMuffin avatar Sep 21 '22 19:09 ADustyOldMuffin

I am using go 1.19.1 . go.mod has go 1.16

qascade avatar Sep 21 '22 19:09 qascade

So, I used go 1.16. Its still not building. I am using MacOS Monterey. This is the error message.

22:27:53 [ .. ] verify dependencies have expected content
all modules verified
22:27:54 [ OK ] go modules dependencies verified
22:27:54 [ .. ] golangci-lint
ERRO [linters context] typechecking error: //go:build comment without // +build comment
WARN [runner] Can't run linter goanalysis_metalinter: bodyclose: failed prerequisites: [[email protected]/crossplane-contrib/provider-digitalocean/pkg/clients/mock: analysis skipped: errors in package: [-: //go:build comment without // +build comment]]
WARN [runner] Can't run linter unused: buildir: analysis skipped: errors in package: [-: //go:build comment without // +build comment]
ERRO Running error: buildir: analysis skipped: errors in package: [-: //go:build comment without // +build comment]
22:28:23 [FAIL]
make[2]: *** [go.lint] Error 1
make[1]: *** [build.all] Error 2
make: *** [build] Error 2

qascade avatar Oct 04 '22 17:10 qascade

I think its a linter issue because I was able to build provider by running go build by going to cmd/provider. I think the problem is with the linter but I am not able to pinpoint what's the problem.

qascade avatar Oct 04 '22 17:10 qascade

Yep, the error given is a later version of Go I believe as they changed go:build to +build. I'll make an issue to update the go version as well since we shouldn't be on such an old version.

ADustyOldMuffin avatar Oct 04 '22 19:10 ADustyOldMuffin

You might need to set an argument, or downgrade your linter to remove the error. But if it builds then you can probably ignore it as we use the correct version in the PR checks.

ADustyOldMuffin avatar Oct 04 '22 19:10 ADustyOldMuffin