diff --git a/Makefile b/Makefile index eff4be3f3..5feba911e 100644 --- a/Makefile +++ b/Makefile @@ -58,7 +58,7 @@ manager: generate fmt vet go build $(GO_STATIC_FLAGS) -o $(BUILD_DIR)/bin/manager main.go KUBEBUILDER_ASSETS?="$(shell $(ENVTEST) --arch=$(ENVTEST_ARCH) use -i $(ENVTEST_KUBERNETES_VERSION) --bin-dir=$(ENVTEST_ASSETS_DIR) -p path)" -test: install-envtest test-api ## Run all tests +test: fix install-envtest test-api ## Run all tests HTTPS_PROXY="" HTTP_PROXY="" \ KUBEBUILDER_ASSETS=$(KUBEBUILDER_ASSETS) \ GIT_CONFIG_GLOBAL=/dev/null \ @@ -115,6 +115,10 @@ fmt: ## Run go fmt against code go fmt ./... cd api; go fmt ./... +fix: ## Run go fix against code + go fix ./... + cd api ; go fix ./... + vet: ## Run go vet against code go vet ./... cd api; go vet ./... @@ -204,7 +208,7 @@ fuzz-smoketest: fuzz-build bash -c "/runner.sh" # Run fuzz tests for the duration set in FUZZ_TIME. -fuzz-native: +fuzz-native: KUBEBUILDER_ASSETS=$(KUBEBUILDER_ASSETS) \ FUZZ_TIME=$(FUZZ_TIME) \ ./tests/fuzz/native_go_run.sh diff --git a/internal/bucket/azure/blob.go b/internal/bucket/azure/blob.go index da861abec..4bbb9584d 100644 --- a/internal/bucket/azure/blob.go +++ b/internal/bucket/azure/blob.go @@ -30,7 +30,6 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/azcore" "github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bloberror" @@ -259,7 +258,7 @@ func ValidateSecret(secret *corev1.Secret) error { // exists, or returns a (client) error. func (c *BlobClient) BucketExists(ctx context.Context, bucketName string) (bool, error) { items := c.Client.NewListBlobsFlatPager(bucketName, &azblob.ListBlobsFlatOptions{ - MaxResults: to.Ptr(int32(1)), + MaxResults: new(int32(1)), }) // We call next page only once since we just want to see if we get an error if _, err := items.NextPage(ctx); err != nil { diff --git a/internal/bucket/gcp/gcp_test.go b/internal/bucket/gcp/gcp_test.go index 6c2ef7699..0832fe751 100644 --- a/internal/bucket/gcp/gcp_test.go +++ b/internal/bucket/gcp/gcp_test.go @@ -35,7 +35,6 @@ import ( "cloud.google.com/go/compute/metadata" gcpstorage "cloud.google.com/go/storage" . "github.com/onsi/gomega" - "google.golang.org/api/googleapi" "google.golang.org/api/option" raw "google.golang.org/api/storage/v1" corev1 "k8s.io/api/core/v1" @@ -61,40 +60,32 @@ var ( close func() err error secret = corev1.Secret{ - ObjectMeta: v1.ObjectMeta{ - Name: "gcp-secret", - Namespace: "default", - }, + Name: "gcp-secret", + Namespace: "default", Data: map[string][]byte{ "serviceaccount": []byte(serviceAccountJSON), }, Type: "Opaque", } badSecret = corev1.Secret{ - ObjectMeta: v1.ObjectMeta{ - Name: "gcp-secret", - Namespace: "default", - }, + Name: "gcp-secret", + Namespace: "default", Data: map[string][]byte{ "username": []byte("test-user"), }, Type: "Opaque", } malformedSecret = corev1.Secret{ - ObjectMeta: v1.ObjectMeta{ - Name: "gcp-secret", - Namespace: "default", - }, + Name: "gcp-secret", + Namespace: "default", Data: map[string][]byte{ "serviceaccount": []byte("not-json"), }, Type: "Opaque", } externalAccountSecret = corev1.Secret{ - ObjectMeta: v1.ObjectMeta{ - Name: "gcp-secret", - Namespace: "default", - }, + Name: "gcp-secret", + Namespace: "default", Data: map[string][]byte{ "serviceaccount": []byte(externalAccountJSON), }, @@ -134,10 +125,8 @@ const externalAccountJSON = `{ // createTestBucket creates a test bucket for testing purposes func createTestBucket() *sourcev1.Bucket { return &sourcev1.Bucket{ - ObjectMeta: v1.ObjectMeta{ - Name: "test-bucket", - Namespace: "default", - }, + Name: "test-bucket", + Namespace: "default", Spec: sourcev1.BucketSpec{ BucketName: bucketName, Endpoint: "storage.googleapis.com", @@ -325,7 +314,6 @@ func TestProxy(t *testing.T) { } for _, tt := range tests { - tt := tt t.Run(tt.name, func(t *testing.T) { opts := []Option{WithProxyURL(tt.proxyURL)} opts = append(opts, func(o *options) { @@ -567,7 +555,7 @@ func getBucket() *raw.Bucket { }, Condition: &raw.BucketLifecycleRuleCondition{ Age: &age, - IsLive: googleapi.Bool(true), + IsLive: new(true), CreatedBefore: "2021-01-02", MatchesStorageClass: matchClasses, NumNewerVersions: 3, diff --git a/internal/bucket/minio/minio_test.go b/internal/bucket/minio/minio_test.go index 8d5878f49..039c7dcab 100644 --- a/internal/bucket/minio/minio_test.go +++ b/internal/bucket/minio/minio_test.go @@ -38,7 +38,6 @@ import ( "github.com/minio/minio-go/v7/pkg/credentials" . "github.com/onsi/gomega" corev1 "k8s.io/api/core/v1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/pkg/sourceignore" @@ -80,10 +79,8 @@ var ( bucketName = "test-bucket-minio" + uuid.New().String() prefix = "" secret = corev1.Secret{ - ObjectMeta: v1.ObjectMeta{ - Name: "minio-secret", - Namespace: "default", - }, + Name: "minio-secret", + Namespace: "default", Data: map[string][]byte{ "accesskey": []byte(testAccessKey), "secretkey": []byte(testSecretKey), @@ -91,18 +88,14 @@ var ( Type: "Opaque", } emptySecret = corev1.Secret{ - ObjectMeta: v1.ObjectMeta{ - Name: "minio-secret", - Namespace: "default", - }, - Data: map[string][]byte{}, - Type: "Opaque", + Name: "minio-secret", + Namespace: "default", + Data: map[string][]byte{}, + Type: "Opaque", } bucket = sourcev1.Bucket{ - ObjectMeta: v1.ObjectMeta{ - Name: "minio-test-bucket", - Namespace: "default", - }, + Name: "minio-test-bucket", + Namespace: "default", Spec: sourcev1.BucketSpec{ BucketName: bucketName, Provider: "generic", @@ -112,10 +105,8 @@ var ( }, } bucketAwsProvider = sourcev1.Bucket{ - ObjectMeta: v1.ObjectMeta{ - Name: "minio-test-bucket", - Namespace: "default", - }, + Name: "minio-test-bucket", + Namespace: "default", Spec: sourcev1.BucketSpec{ BucketName: bucketName, Provider: "aws", @@ -193,10 +184,8 @@ func TestNewClientEmptySecret(t *testing.T) { func TestNewClientAWSProvider(t *testing.T) { t.Run("with secret", func(t *testing.T) { validSecret := corev1.Secret{ - ObjectMeta: v1.ObjectMeta{ - Name: "valid-secret", - Namespace: "default", - }, + Name: "valid-secret", + Namespace: "default", Data: map[string][]byte{ "accesskey": []byte(testAccessKey), "secretkey": []byte(testSecretKey), @@ -716,7 +705,7 @@ func TestValidateSTSSecret(t *testing.T) { { name: "empty ldap secret", provider: "ldap", - secret: &corev1.Secret{ObjectMeta: v1.ObjectMeta{Name: "ldap-secret"}}, + secret: &corev1.Secret{Name: "ldap-secret"}, err: "invalid 'ldap-secret' secret data for 'ldap' STS provider: required fields username, password", }, { diff --git a/internal/cache/cache.go b/internal/cache/cache.go index 6f8ee8608..beb143396 100644 --- a/internal/cache/cache.go +++ b/internal/cache/cache.go @@ -27,7 +27,7 @@ type Cache struct { // Item is an item stored in the cache. type Item struct { // Object is the item's value. - Object interface{} + Object any // Expiration is the item's expiration time. Expiration int64 } @@ -50,7 +50,7 @@ func (c *cache) ItemCount() int { return n } -func (c *cache) set(key string, value interface{}, expiration time.Duration) { +func (c *cache) set(key string, value any, expiration time.Duration) { var e int64 if expiration > 0 { e = time.Now().Add(expiration).UnixNano() @@ -65,7 +65,7 @@ func (c *cache) set(key string, value interface{}, expiration time.Duration) { // Set adds an item to the cache, replacing any existing item. // If expiration is zero, the item never expires. // If the cache is full, Set will return an error. -func (c *cache) Set(key string, value interface{}, expiration time.Duration) error { +func (c *cache) Set(key string, value any, expiration time.Duration) error { c.mu.Lock() _, found := c.Items[key] if found { @@ -87,7 +87,7 @@ func (c *cache) Set(key string, value interface{}, expiration time.Duration) err // Add an item to the cache, existing items will not be overwritten. // To overwrite existing items, use Set. // If the cache is full, Add will return an error. -func (c *cache) Add(key string, value interface{}, expiration time.Duration) error { +func (c *cache) Add(key string, value any, expiration time.Duration) error { c.mu.Lock() _, found := c.Items[key] if found { @@ -107,7 +107,7 @@ func (c *cache) Add(key string, value interface{}, expiration time.Duration) err // Get an item from the cache. Returns the item or nil, and a bool indicating // whether the key was found. -func (c *cache) Get(key string) (interface{}, bool) { +func (c *cache) Get(key string) (any, bool) { c.mu.RLock() item, found := c.Items[key] if !found { diff --git a/internal/controller/artifact_matchers_test.go b/internal/controller/artifact_matchers_test.go index af716e086..36a688e68 100644 --- a/internal/controller/artifact_matchers_test.go +++ b/internal/controller/artifact_matchers_test.go @@ -36,7 +36,7 @@ type matchArtifact struct { expected *meta.Artifact } -func (m matchArtifact) Match(actual interface{}) (success bool, err error) { +func (m matchArtifact) Match(actual any) (success bool, err error) { actualArtifact, ok := actual.(*meta.Artifact) if !ok { return false, fmt.Errorf("actual should be a pointer to an Artifact") @@ -59,10 +59,10 @@ func (m matchArtifact) Match(actual interface{}) (success bool, err error) { return ok, err } -func (m matchArtifact) FailureMessage(actual interface{}) (message string) { +func (m matchArtifact) FailureMessage(actual any) (message string) { return fmt.Sprintf("expected\n\t%#v\nto match\n\t%#v\n", actual, m.expected) } -func (m matchArtifact) NegatedFailureMessage(actual interface{}) (message string) { +func (m matchArtifact) NegatedFailureMessage(actual any) (message string) { return fmt.Sprintf("expected\n\t%#v\nto not match\n\t%#v\n", actual, m.expected) } diff --git a/internal/controller/bucket_controller.go b/internal/controller/bucket_controller.go index 8406a1c08..a90e5608c 100644 --- a/internal/controller/bucket_controller.go +++ b/internal/controller/bucket_controller.go @@ -447,12 +447,10 @@ func (r *BucketReconciler) reconcileSource(ctx context.Context, sp *patch.Serial provider, err := r.createBucketProvider(ctx, obj, creds) if err != nil { - var stallingErr *serror.Stalling - var genericErr *serror.Generic - if errors.As(err, &stallingErr) { + if stallingErr, ok := errors.AsType[*serror.Stalling](err); ok { conditions.MarkTrue(obj, sourcev1.FetchFailedCondition, stallingErr.Reason, "%s", stallingErr) return sreconcile.ResultEmpty, stallingErr - } else if errors.As(err, &genericErr) { + } else if genericErr, ok := errors.AsType[*serror.Generic](err); ok { conditions.MarkTrue(obj, sourcev1.FetchFailedCondition, genericErr.Reason, "%s", genericErr) return sreconcile.ResultEmpty, genericErr } else { diff --git a/internal/controller/bucket_controller_fetch_test.go b/internal/controller/bucket_controller_fetch_test.go index 9f9c31a12..2c21bb73f 100644 --- a/internal/controller/bucket_controller_fetch_test.go +++ b/internal/controller/bucket_controller_fetch_test.go @@ -319,7 +319,7 @@ func Test_fetchFiles(t *testing.T) { tmp := t.TempDir() client := mockBucketClient{bucketName: bucketName} - for i := 0; i < 2*maxConcurrentBucketFetches; i++ { + for i := range 2 * maxConcurrentBucketFetches { f := fmt.Sprintf("file-%d", i) client.addObject(f, mockBucketObject{etag: f, data: f}) } diff --git a/internal/controller/bucket_controller_test.go b/internal/controller/bucket_controller_test.go index 6ec912dfe..6fbd50d2b 100644 --- a/internal/controller/bucket_controller_test.go +++ b/internal/controller/bucket_controller_test.go @@ -62,7 +62,7 @@ func TestBucketReconciler_deleteBeforeFinalizer(t *testing.T) { namespaceName := "bucket-" + randStringRunes(5) namespace := &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{Name: namespaceName}, + Name: namespaceName, } g.Expect(k8sClient.Create(ctx, namespace)).ToNot(HaveOccurred()) t.Cleanup(func() { @@ -113,10 +113,8 @@ func TestBucketReconciler_Reconcile(t *testing.T) { g.Expect(err).NotTo(HaveOccurred()) secret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "bucket-reconcile-", - Namespace: "default", - }, + GenerateName: "bucket-reconcile-", + Namespace: "default", Data: map[string][]byte{ "accesskey": []byte("key"), "secretkey": []byte("secret"), @@ -126,10 +124,8 @@ func TestBucketReconciler_Reconcile(t *testing.T) { defer testEnv.Delete(ctx, secret) origObj := &sourcev1.Bucket{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "bucket-reconcile-", - Namespace: "default", - }, + GenerateName: "bucket-reconcile-", + Namespace: "default", Spec: sourcev1.BucketSpec{ Provider: "generic", BucketName: s3Server.BucketName, @@ -234,7 +230,7 @@ func TestBucketReconciler_reconcileStorage(t *testing.T) { Revision: "d", Digest: "sha256:18ac3e7343f016890c510e93f935261169d9e3f565436429830faf0934f4f8e4", URL: testStorage.Hostname + "/reconcile-storage/d.txt", - Size: int64p(int64(len("d"))), + Size: new(int64(len("d"))), }, assertPaths: []string{ "/reconcile-storage/d.txt", @@ -363,7 +359,7 @@ func TestBucketReconciler_reconcileStorage(t *testing.T) { Revision: "f", Digest: "sha256:3b9c358f36f0a31b6ad3e14f309c7cf198ac9246e8316f9ce543d5b19ac02b80", URL: testStorage.Hostname + "/reconcile-storage/hostname.txt", - Size: int64p(int64(len("file"))), + Size: new(int64(len("file"))), }, assertConditions: []metav1.Condition{ *conditions.TrueCondition(meta.ReadyCondition, "foo", "bar"), @@ -389,10 +385,8 @@ func TestBucketReconciler_reconcileStorage(t *testing.T) { } obj := &sourcev1.Bucket{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "test-", - Generation: 1, - }, + GenerateName: "test-", + Generation: 1, } if tt.beforeFunc != nil { g.Expect(tt.beforeFunc(obj, testStorage)).To(Succeed()) @@ -493,9 +487,7 @@ func TestBucketReconciler_reconcileSource_generic(t *testing.T) { name: "Observes invalid secretRef", bucketName: "dummy", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "dummy", - }, + Name: "dummy", }, beforeFunc: func(obj *sourcev1.Bucket) { obj.Spec.SecretRef = &meta.LocalObjectReference{ @@ -534,9 +526,7 @@ func TestBucketReconciler_reconcileSource_generic(t *testing.T) { name: "Observes invalid certSecretRef", bucketName: "dummy", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "dummy", - }, + Name: "dummy", }, beforeFunc: func(obj *sourcev1.Bucket) { obj.Spec.CertSecretRef = &meta.LocalObjectReference{ @@ -575,9 +565,7 @@ func TestBucketReconciler_reconcileSource_generic(t *testing.T) { name: "Observes invalid proxySecretRef", bucketName: "dummy", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "dummy", - }, + Name: "dummy", Data: map[string][]byte{}, }, beforeFunc: func(obj *sourcev1.Bucket) { @@ -617,9 +605,7 @@ func TestBucketReconciler_reconcileSource_generic(t *testing.T) { name: "Observes invalid sts.secretRef", bucketName: "dummy", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "dummy", - }, + Name: "dummy", }, beforeFunc: func(obj *sourcev1.Bucket) { obj.Spec.Provider = "generic" @@ -661,9 +647,7 @@ func TestBucketReconciler_reconcileSource_generic(t *testing.T) { name: "Observes invalid sts.certSecretRef", bucketName: "dummy", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "dummy", - }, + Name: "dummy", }, beforeFunc: func(obj *sourcev1.Bucket) { obj.Spec.Provider = "generic" @@ -926,10 +910,8 @@ func TestBucketReconciler_reconcileSource_generic(t *testing.T) { tmpDir := t.TempDir() obj := &sourcev1.Bucket{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "test-bucket-", - Generation: 1, - }, + GenerateName: "test-bucket-", + Generation: 1, Spec: sourcev1.BucketSpec{ Timeout: &metav1.Duration{Duration: timeout}, }, @@ -1026,9 +1008,7 @@ func TestBucketReconciler_reconcileSource_gcs(t *testing.T) { }, }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "dummy", - }, + Name: "dummy", Data: map[string][]byte{ "accesskey": []byte("key"), "secretkey": []byte("secret"), @@ -1072,9 +1052,7 @@ func TestBucketReconciler_reconcileSource_gcs(t *testing.T) { name: "Observes invalid secretRef", bucketName: "dummy", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "dummy", - }, + Name: "dummy", }, beforeFunc: func(obj *sourcev1.Bucket) { obj.Spec.SecretRef = &meta.LocalObjectReference{ @@ -1096,9 +1074,7 @@ func TestBucketReconciler_reconcileSource_gcs(t *testing.T) { name: "Observes unsupported credential type in secretRef", bucketName: "dummy", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "dummy", - }, + Name: "dummy", Data: map[string][]byte{ "serviceaccount": []byte(gcsExternalAccountConfig), }, @@ -1143,9 +1119,7 @@ func TestBucketReconciler_reconcileSource_gcs(t *testing.T) { name: "Observes invalid proxySecretRef", bucketName: "dummy", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "dummy", - }, + Name: "dummy", }, beforeFunc: func(obj *sourcev1.Bucket) { obj.Spec.ProxySecretRef = &meta.LocalObjectReference{ @@ -1355,9 +1329,7 @@ func TestBucketReconciler_reconcileSource_gcs(t *testing.T) { }, }, serviceAccount: &corev1.ServiceAccount{ - ObjectMeta: metav1.ObjectMeta{ - Name: "test-sa", - }, + Name: "test-sa", }, beforeFunc: func(obj *sourcev1.Bucket) { obj.Spec.ServiceAccountName = "test-sa" @@ -1423,10 +1395,8 @@ func TestBucketReconciler_reconcileSource_gcs(t *testing.T) { // Test bucket object. obj := &sourcev1.Bucket{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "test-bucket-", - Generation: 1, - }, + GenerateName: "test-bucket-", + Generation: 1, Spec: sourcev1.BucketSpec{ BucketName: tt.bucketName, Timeout: &metav1.Duration{Duration: timeout}, @@ -1617,10 +1587,8 @@ func TestBucketReconciler_reconcileArtifact(t *testing.T) { } obj := &sourcev1.Bucket{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "test-bucket-", - Generation: 1, - }, + GenerateName: "test-bucket-", + Generation: 1, Spec: sourcev1.BucketSpec{ Timeout: &metav1.Duration{Duration: timeout}, }, @@ -1711,14 +1679,10 @@ func TestBucketReconciler_statusConditions(t *testing.T) { g := NewWithT(t) obj := &sourcev1.Bucket{ - TypeMeta: metav1.TypeMeta{ - APIVersion: sourcev1.GroupVersion.String(), - Kind: sourcev1.BucketKind, - }, - ObjectMeta: metav1.ObjectMeta{ - Name: "test-bucket", - Namespace: "foo", - }, + APIVersion: sourcev1.GroupVersion.String(), + Kind: sourcev1.BucketKind, + Name: "test-bucket", + Namespace: "foo", } c := fakeclient.NewClientBuilder(). @@ -2014,10 +1978,8 @@ func TestBucketReconciler_APIServerValidation_STS(t *testing.T) { g := NewWithT(t) obj := &sourcev1.Bucket{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "bucket-reconcile-", - Namespace: "default", - }, + GenerateName: "bucket-reconcile-", + Namespace: "default", Spec: sourcev1.BucketSpec{ Provider: tt.bucketProvider, BucketName: "test", diff --git a/internal/controller/gitrepository_controller.go b/internal/controller/gitrepository_controller.go index bfc44d199..eaefa27f0 100644 --- a/internal/controller/gitrepository_controller.go +++ b/internal/controller/gitrepository_controller.go @@ -693,8 +693,7 @@ func (r *GitRepositoryReconciler) getAuthOpts(ctx context.Context, obj *sourcev1 // Check if SSH identity key is encrypted but no password was provided. if opts.Transport == git.SSH && len(opts.Identity) > 0 && opts.Password == "" { _, err := ssh.ParseRawPrivateKey(opts.Identity) - var missingErr *ssh.PassphraseMissingError - if errors.As(err, &missingErr) { + if _, ok := errors.AsType[*ssh.PassphraseMissingError](err); ok { e := serror.NewGeneric( fmt.Errorf("SSH identity key is encrypted but no 'password' field was provided in the secret '%s/%s'", obj.GetNamespace(), obj.Spec.SecretRef.Name), diff --git a/internal/controller/gitrepository_controller_test.go b/internal/controller/gitrepository_controller_test.go index 38aadca4d..93d44c50f 100644 --- a/internal/controller/gitrepository_controller_test.go +++ b/internal/controller/gitrepository_controller_test.go @@ -39,7 +39,6 @@ import ( sshtestdata "golang.org/x/crypto/ssh/testdata" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/utils/ptr" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" fakeclient "sigs.k8s.io/controller-runtime/pkg/client/fake" @@ -208,7 +207,7 @@ func TestGitRepositoryReconciler_deleteBeforeFinalizer(t *testing.T) { namespaceName := "gitrepo-" + randStringRunes(5) namespace := &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{Name: namespaceName}, + Name: namespaceName, } g.Expect(k8sClient.Create(ctx, namespace)).ToNot(HaveOccurred()) t.Cleanup(func() { @@ -253,10 +252,8 @@ func TestGitRepositoryReconciler_Reconcile(t *testing.T) { g.Expect(err).NotTo(HaveOccurred()) origObj := &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "gitrepository-reconcile-", - Namespace: "default", - }, + GenerateName: "gitrepository-reconcile-", + Namespace: "default", Spec: sourcev1.GitRepositorySpec{ Interval: metav1.Duration{Duration: interval}, URL: server.HTTPAddress() + repoPath, @@ -326,10 +323,8 @@ func TestGitRepositoryReconciler_reconcileSource_emptyRepository(t *testing.T) { defer server.StopHTTP() obj := &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "empty-", - Generation: 1, - }, + GenerateName: "empty-", + Generation: 1, Spec: sourcev1.GitRepositorySpec{ Interval: metav1.Duration{Duration: interval}, Timeout: &metav1.Duration{Duration: timeout}, @@ -405,9 +400,7 @@ func TestGitRepositoryReconciler_reconcileSource_authStrategy(t *testing.T) { password: "1234", }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "basic-auth", - }, + Name: "basic-auth", Data: map[string][]byte{ "username": []byte("git"), "password": []byte("1234"), @@ -431,9 +424,7 @@ func TestGitRepositoryReconciler_reconcileSource_authStrategy(t *testing.T) { ca: tlsCA, }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "mtls-certs", - }, + Name: "mtls-certs", Data: map[string][]byte{ "ca.crt": tlsCA, "tls.crt": clientPublicKey, @@ -458,9 +449,7 @@ func TestGitRepositoryReconciler_reconcileSource_authStrategy(t *testing.T) { ca: tlsCA, }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "invalid-mtls-certs", - }, + Name: "invalid-mtls-certs", Data: map[string][]byte{ "ca.crt": tlsCA, "tls.crt": clientPublicKey, @@ -488,9 +477,7 @@ func TestGitRepositoryReconciler_reconcileSource_authStrategy(t *testing.T) { ca: tlsCA, }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ca-file", - }, + Name: "ca-file", Data: map[string][]byte{ "caFile": tlsCA, }, @@ -513,9 +500,7 @@ func TestGitRepositoryReconciler_reconcileSource_authStrategy(t *testing.T) { ca: tlsCA, }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ca-file", - }, + Name: "ca-file", Data: map[string][]byte{ "ca.crt": tlsCA, "caFile": []byte("invalid"), @@ -539,9 +524,7 @@ func TestGitRepositoryReconciler_reconcileSource_authStrategy(t *testing.T) { ca: tlsCA, }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "invalid-ca", - }, + Name: "invalid-ca", Data: map[string][]byte{ "caFile": []byte("invalid"), }, @@ -572,7 +555,7 @@ func TestGitRepositoryReconciler_reconcileSource_authStrategy(t *testing.T) { ca: tlsCA, }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{Name: "gh-app-no-ca"}, + Name: "gh-app-no-ca", Data: map[string][]byte{ githubapp.KeyAppID: []byte("123"), githubapp.KeyAppInstallationID: []byte("456"), @@ -607,7 +590,7 @@ func TestGitRepositoryReconciler_reconcileSource_authStrategy(t *testing.T) { password: "some-enterprise-token", }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{Name: "gh-app-ca"}, + Name: "gh-app-ca", Data: map[string][]byte{ githubapp.KeyAppID: []byte("123"), githubapp.KeyAppInstallationID: []byte("456"), @@ -652,9 +635,7 @@ func TestGitRepositoryReconciler_reconcileSource_authStrategy(t *testing.T) { username: "git", }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "private-key", - }, + Name: "private-key", Data: map[string][]byte{ "username": []byte("git"), "identity": sshtestdata.PEMBytes["rsa"], @@ -676,9 +657,7 @@ func TestGitRepositoryReconciler_reconcileSource_authStrategy(t *testing.T) { username: "git", }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "private-key", - }, + Name: "private-key", Data: map[string][]byte{ "username": []byte("git"), "identity": sshtestdata.PEMEncryptedKeys[2].PEMBytes, @@ -720,9 +699,7 @@ func TestGitRepositoryReconciler_reconcileSource_authStrategy(t *testing.T) { password: "1234", }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "basic-auth", - }, + Name: "basic-auth", Data: map[string][]byte{ "username": []byte("git"), "password": []byte("1234"), @@ -768,9 +745,7 @@ func TestGitRepositoryReconciler_reconcileSource_authStrategy(t *testing.T) { name: "empty provider with github app data in secret makes FetchFailed=True", protocol: "http", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "github-app-secret", - }, + Name: "github-app-secret", Data: map[string][]byte{ githubapp.KeyAppID: []byte("1111"), }, @@ -794,9 +769,7 @@ func TestGitRepositoryReconciler_reconcileSource_authStrategy(t *testing.T) { name: "github provider without github app data in secret makes FetchFailed=True", protocol: "http", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "github-basic-auth", - }, + Name: "github-basic-auth", Data: map[string][]byte{ "username": []byte("abc"), "password": []byte("1234"), @@ -823,10 +796,8 @@ func TestGitRepositoryReconciler_reconcileSource_authStrategy(t *testing.T) { g := NewWithT(t) obj := &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "auth-strategy-", - Generation: 1, - }, + GenerateName: "auth-strategy-", + Generation: 1, Spec: sourcev1.GitRepositorySpec{ Interval: metav1.Duration{Duration: interval}, Timeout: &metav1.Duration{Duration: timeout}, @@ -972,9 +943,7 @@ func TestGitRepositoryReconciler_getAuthOpts_provider(t *testing.T) { name: "github provider with github app data in secret", url: "https://example.com/org/repo", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "githubAppSecret", - }, + Name: "githubAppSecret", Data: map[string][]byte{ githubapp.KeyAppID: []byte("123"), githubapp.KeyAppInstallationID: []byte("456"), @@ -993,9 +962,7 @@ func TestGitRepositoryReconciler_getAuthOpts_provider(t *testing.T) { name: "generic provider with github app data in secret", url: "https://example.com/org/repo", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "githubAppSecret", - }, + Name: "githubAppSecret", Data: map[string][]byte{ githubapp.KeyAppID: []byte("123"), }, @@ -1012,9 +979,7 @@ func TestGitRepositoryReconciler_getAuthOpts_provider(t *testing.T) { name: "generic provider with github app client id in secret", url: "https://example.com/org/repo", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "githubAppSecret", - }, + Name: "githubAppSecret", Data: map[string][]byte{ githubapp.KeyAppClientID: []byte("Iv23liXXXXXXX"), }, @@ -1031,9 +996,7 @@ func TestGitRepositoryReconciler_getAuthOpts_provider(t *testing.T) { name: "github provider with basic auth secret", url: "https://github.com/org/repo.git", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "basic-auth-secret", - }, + Name: "basic-auth-secret", Data: map[string][]byte{ "username": []byte("abc"), "password": []byte("1234"), @@ -1256,7 +1219,7 @@ func TestGitRepositoryReconciler_reconcileSource_checkoutStrategy(t *testing.T) }, beforeFunc: func(obj *sourcev1.GitRepository, latestRev string) { // Set new ignore value. - obj.Spec.Ignore = ptr.To("foo") + obj.Spec.Ignore = new("foo") // Add existing artifact on the object and storage. obj.Status = sourcev1.GitRepositoryStatus{ Artifact: &meta.Artifact{ @@ -1313,10 +1276,8 @@ func TestGitRepositoryReconciler_reconcileSource_checkoutStrategy(t *testing.T) g := NewWithT(t) obj := &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "checkout-strategy-", - Generation: 1, - }, + GenerateName: "checkout-strategy-", + Generation: 1, Spec: sourcev1.GitRepositorySpec{ Interval: metav1.Duration{Duration: interval}, Timeout: &metav1.Duration{Duration: timeout}, @@ -1430,7 +1391,7 @@ func TestGitRepositoryReconciler_reconcileArtifact(t *testing.T) { dir: "testdata/git/repository", beforeFunc: func(obj *sourcev1.GitRepository) { obj.Spec.Interval = metav1.Duration{Duration: interval} - obj.Spec.Ignore = ptr.To("!**.txt\n") + obj.Spec.Ignore = new("!**.txt\n") }, afterFunc: func(t *WithT, obj *sourcev1.GitRepository) { t.Expect(obj.GetArtifact()).ToNot(BeNil()) @@ -1513,11 +1474,9 @@ func TestGitRepositoryReconciler_reconcileArtifact(t *testing.T) { } obj := &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "reconcile-artifact-", - Generation: 1, - }, - Status: sourcev1.GitRepositoryStatus{}, + GenerateName: "reconcile-artifact-", + Generation: 1, + Status: sourcev1.GitRepositoryStatus{}, } if tt.beforeFunc != nil { @@ -1629,9 +1588,7 @@ func TestGitRepositoryReconciler_reconcileInclude(t *testing.T) { var depObjs []client.Object for _, d := range tt.dependencies { obj := &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - Name: d.name, - }, + Name: d.name, Status: sourcev1.GitRepositoryStatus{ Conditions: d.conditions, }, @@ -1664,9 +1621,7 @@ func TestGitRepositoryReconciler_reconcileInclude(t *testing.T) { } obj := &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - Name: "reconcile-include", - }, + Name: "reconcile-include", Spec: sourcev1.GitRepositorySpec{ Interval: metav1.Duration{Duration: interval}, }, @@ -1764,7 +1719,7 @@ func TestGitRepositoryReconciler_reconcileStorage(t *testing.T) { Revision: "d", Digest: "sha256:18ac3e7343f016890c510e93f935261169d9e3f565436429830faf0934f4f8e4", URL: testStorage.Hostname + "/reconcile-storage/d.txt", - Size: int64p(int64(len("d"))), + Size: new(int64(len("d"))), }, assertPaths: []string{ "/reconcile-storage/d.txt", @@ -1893,7 +1848,7 @@ func TestGitRepositoryReconciler_reconcileStorage(t *testing.T) { Revision: "f", Digest: "sha256:3b9c358f36f0a31b6ad3e14f309c7cf198ac9246e8316f9ce543d5b19ac02b80", URL: testStorage.Hostname + "/reconcile-storage/hostname.txt", - Size: int64p(int64(len("file"))), + Size: new(int64(len("file"))), }, assertConditions: []metav1.Condition{ *conditions.TrueCondition(meta.ReadyCondition, "foo", "bar"), @@ -1919,10 +1874,8 @@ func TestGitRepositoryReconciler_reconcileStorage(t *testing.T) { } obj := &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "test-", - Generation: 1, - }, + GenerateName: "test-", + Generation: 1, } if tt.beforeFunc != nil { g.Expect(tt.beforeFunc(obj, testStorage)).To(Succeed()) @@ -1972,12 +1925,10 @@ func TestGitRepositoryReconciler_reconcileDelete(t *testing.T) { } obj := &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - Name: "reconcile-delete-", - DeletionTimestamp: &metav1.Time{Time: time.Now()}, - Finalizers: []string{ - sourcev1.SourceFinalizer, - }, + Name: "reconcile-delete-", + DeletionTimestamp: &metav1.Time{Time: time.Now()}, + Finalizers: []string{ + sourcev1.SourceFinalizer, }, Status: sourcev1.GitRepositoryStatus{}, } @@ -2007,9 +1958,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "Valid commit with mode=HEAD makes SourceVerifiedCondition=True", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "existing", - }, + Name: "existing", Data: map[string][]byte{ "foo": []byte(armoredKeyRingFixture), }, @@ -2029,7 +1978,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { } }, want: sreconcile.ResultSuccess, - wantSourceVerificationMode: ptrToVerificationMode(sourcev1.ModeGitHEAD), + wantSourceVerificationMode: new(sourcev1.ModeGitHEAD), assertConditions: []metav1.Condition{ *conditions.TrueCondition(sourcev1.SourceVerifiedCondition, meta.SucceededReason, "verified signature of\n\t- commit 'shasum' with key '5982D0279C227FFD'"), }, @@ -2037,9 +1986,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "Valid commit with mode=head makes SourceVerifiedCondition=True", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "existing", - }, + Name: "existing", Data: map[string][]byte{ "foo": []byte(armoredKeyRingFixture), }, @@ -2059,7 +2006,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { } }, want: sreconcile.ResultSuccess, - wantSourceVerificationMode: ptrToVerificationMode(sourcev1.ModeGitHEAD), + wantSourceVerificationMode: new(sourcev1.ModeGitHEAD), assertConditions: []metav1.Condition{ *conditions.TrueCondition(sourcev1.SourceVerifiedCondition, meta.SucceededReason, "verified signature of\n\t- commit 'shasum' with key '5982D0279C227FFD'"), }, @@ -2067,9 +2014,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "Valid tag with mode=tag makes SourceVerifiedCondition=True", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "existing", - }, + Name: "existing", Data: map[string][]byte{ "foo": []byte(armoredKeyRingFixture), }, @@ -2095,7 +2040,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { } }, want: sreconcile.ResultSuccess, - wantSourceVerificationMode: ptrToVerificationMode(sourcev1.ModeGitTag), + wantSourceVerificationMode: new(sourcev1.ModeGitTag), assertConditions: []metav1.Condition{ *conditions.TrueCondition(sourcev1.SourceVerifiedCondition, meta.SucceededReason, "verified signature of\n\t- tag 'v0.1.0@shasum' with key '5982D0279C227FFD'"), }, @@ -2103,9 +2048,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "Valid tag and commit with mode=TagAndHEAD makes SourceVerifiedCondition=True", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "existing", - }, + Name: "existing", Data: map[string][]byte{ "foo": []byte(armoredKeyRingFixture), }, @@ -2134,7 +2077,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { } }, want: sreconcile.ResultSuccess, - wantSourceVerificationMode: ptrToVerificationMode(sourcev1.ModeGitTagAndHEAD), + wantSourceVerificationMode: new(sourcev1.ModeGitTagAndHEAD), assertConditions: []metav1.Condition{ *conditions.TrueCondition(sourcev1.SourceVerifiedCondition, meta.SucceededReason, "verified signature of\n\t- tag 'v0.1.0@shasum' with key '5982D0279C227FFD'\n\t- commit 'shasum' with key '5982D0279C227FFD'"), }, @@ -2142,7 +2085,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "Source verification mode in status is unset if there's no verification in spec", beforeFunc: func(obj *sourcev1.GitRepository) { - obj.Status.SourceVerificationMode = ptrToVerificationMode(sourcev1.ModeGitHEAD) + obj.Status.SourceVerificationMode = new(sourcev1.ModeGitHEAD) obj.Status.SourceVerificationFingerprint = "stale-fingerprint" obj.Spec.Verification = nil }, @@ -2151,9 +2094,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "Verification of tag with no tag ref SourceVerifiedCondition=False and returns a stalling error", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "existing", - }, + Name: "existing", Data: map[string][]byte{ "foo": []byte(armoredKeyRingFixture), }, @@ -2182,9 +2123,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "Unsigned tag with mode=tag makes SourceVerifiedCondition=False", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "existing", - }, + Name: "existing", Data: map[string][]byte{ "foo": []byte(armoredKeyRingFixture), }, @@ -2216,9 +2155,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "Partially successful verification makes SourceVerifiedCondition=False", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "existing", - }, + Name: "existing", Data: map[string][]byte{ "foo": []byte(armoredKeyRingFixture), }, @@ -2254,9 +2191,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "No PGP keys in secret makes SourceVerifiedCondition=False and returns error", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "existing", - }, + Name: "existing", }, commit: git.Commit{ Hash: []byte("shasum"), @@ -2280,9 +2215,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "Invalid tag signature with mode=tag makes SourceVerifiedCondition=False", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "existing", - }, + Name: "existing", Data: map[string][]byte{ "foo": []byte(armoredKeyRingFixture), }, @@ -2315,9 +2248,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "Invalid PGP key makes SourceVerifiedCondition=False and returns error", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "invalid", - }, + Name: "invalid", Data: map[string][]byte{ "foo": []byte("invalid PGP public key"), }, @@ -2379,9 +2310,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "Valid SSH-signed commit with mode=HEAD makes SourceVerifiedCondition=True", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ssh-keys", - }, + Name: "ssh-keys", Data: map[string][]byte{ "author1.sshpub": []byte(sshAuthorizedKeysFixture), }, @@ -2401,7 +2330,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { } }, want: sreconcile.ResultSuccess, - wantSourceVerificationMode: ptrToVerificationMode(sourcev1.ModeGitHEAD), + wantSourceVerificationMode: new(sourcev1.ModeGitHEAD), assertConditions: []metav1.Condition{ *conditions.TrueCondition(sourcev1.SourceVerifiedCondition, meta.SucceededReason, "verified signature of\n\t- commit 'shasum' with key 'SHA256:SDB4adE/BP2VLwX9Pdf7aFUwW9JNdzoPSsHjd/wZIw4'"), }, @@ -2409,9 +2338,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "Valid SSH-signed tag with mode=Tag makes SourceVerifiedCondition=True", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ssh-keys", - }, + Name: "ssh-keys", Data: map[string][]byte{ "author1.sshpub": []byte(sshAuthorizedKeysFixture), }, @@ -2437,7 +2364,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { } }, want: sreconcile.ResultSuccess, - wantSourceVerificationMode: ptrToVerificationMode(sourcev1.ModeGitTag), + wantSourceVerificationMode: new(sourcev1.ModeGitTag), assertConditions: []metav1.Condition{ *conditions.TrueCondition(sourcev1.SourceVerifiedCondition, meta.SucceededReason, "verified signature of\n\t- tag 'v0.1.0@shasum' with key 'SHA256:SDB4adE/BP2VLwX9Pdf7aFUwW9JNdzoPSsHjd/wZIw4'"), }, @@ -2445,9 +2372,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "Valid SSH-signed tag and commit with mode=TagAndHEAD makes SourceVerifiedCondition=True", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ssh-keys", - }, + Name: "ssh-keys", Data: map[string][]byte{ "author1.sshpub": []byte(sshAuthorizedKeysFixture), }, @@ -2476,7 +2401,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { } }, want: sreconcile.ResultSuccess, - wantSourceVerificationMode: ptrToVerificationMode(sourcev1.ModeGitTagAndHEAD), + wantSourceVerificationMode: new(sourcev1.ModeGitTagAndHEAD), assertConditions: []metav1.Condition{ *conditions.TrueCondition(sourcev1.SourceVerifiedCondition, meta.SucceededReason, "verified signature of\n\t- tag 'v0.1.0@shasum' with key 'SHA256:SDB4adE/BP2VLwX9Pdf7aFUwW9JNdzoPSsHjd/wZIw4'\n\t- commit 'shasum' with key 'SHA256:SDB4adE/BP2VLwX9Pdf7aFUwW9JNdzoPSsHjd/wZIw4'"), }, @@ -2484,9 +2409,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "SSH-signed commit but Secret only has .asc keys makes SourceVerifiedCondition=False", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "pgp-keys-only", - }, + Name: "pgp-keys-only", Data: map[string][]byte{ "author1.asc": []byte(armoredKeyRingFixture), }, @@ -2513,9 +2436,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "PGP-signed commit but Secret only has .sshpub keys makes SourceVerifiedCondition=False", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ssh-keys-only", - }, + Name: "ssh-keys-only", Data: map[string][]byte{ "author1.sshpub": []byte(sshAuthorizedKeysFixture), }, @@ -2542,9 +2463,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "SSH-signed tag but Secret only has .asc keys makes SourceVerifiedCondition=False", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "pgp-keys-only", - }, + Name: "pgp-keys-only", Data: map[string][]byte{ "author1.asc": []byte(armoredKeyRingFixture), }, @@ -2577,9 +2496,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "Invalid SSH key in .sshpub entry makes SourceVerifiedCondition=False", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "invalid-ssh-key", - }, + Name: "invalid-ssh-key", Data: map[string][]byte{ "author1.sshpub": []byte("ssh-ed25519 INVALIDKEY test@example.com"), }, @@ -2606,9 +2523,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "Mixed: PGP-signed tag and SSH-signed commit with both key types in Secret and mode=TagAndHEAD makes SourceVerifiedCondition=True", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "mixed-keys", - }, + Name: "mixed-keys", Data: map[string][]byte{ "author1.asc": []byte(armoredKeyRingFixture), "author1.sshpub": []byte(sshAuthorizedKeysFixture), @@ -2638,7 +2553,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { } }, want: sreconcile.ResultSuccess, - wantSourceVerificationMode: ptrToVerificationMode(sourcev1.ModeGitTagAndHEAD), + wantSourceVerificationMode: new(sourcev1.ModeGitTagAndHEAD), assertConditions: []metav1.Condition{ *conditions.TrueCondition(sourcev1.SourceVerifiedCondition, meta.SucceededReason, "verified signature of\n\t- tag 'v0.1.0@shasum' with key '5982D0279C227FFD'\n\t- commit 'shasum' with key 'SHA256:SDB4adE/BP2VLwX9Pdf7aFUwW9JNdzoPSsHjd/wZIw4'"), }, @@ -2646,9 +2561,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "Mixed: SSH-signed tag and PGP-signed commit with both key types in Secret and mode=TagAndHEAD makes SourceVerifiedCondition=True", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "mixed-keys-reverse", - }, + Name: "mixed-keys-reverse", Data: map[string][]byte{ "author1.asc": []byte(armoredKeyRingFixture), "author1.sshpub": []byte(sshAuthorizedKeysFixture), @@ -2678,7 +2591,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { } }, want: sreconcile.ResultSuccess, - wantSourceVerificationMode: ptrToVerificationMode(sourcev1.ModeGitTagAndHEAD), + wantSourceVerificationMode: new(sourcev1.ModeGitTagAndHEAD), assertConditions: []metav1.Condition{ *conditions.TrueCondition(sourcev1.SourceVerifiedCondition, meta.SucceededReason, "verified signature of\n\t- tag 'v0.1.0@shasum' with key 'SHA256:SDB4adE/BP2VLwX9Pdf7aFUwW9JNdzoPSsHjd/wZIw4'\n\t- commit 'shasum' with key '5982D0279C227FFD'"), }, @@ -2686,9 +2599,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "Unsupported signature type makes SourceVerifiedCondition=False", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "existing", - }, + Name: "existing", Data: map[string][]byte{ "foo": []byte(armoredKeyRingFixture), }, @@ -2715,9 +2626,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { { name: "Valid commit with explicit .asc key suffix makes SourceVerifiedCondition=True", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "explicit-asc", - }, + Name: "explicit-asc", Data: map[string][]byte{ "foo.asc": []byte(armoredKeyRingFixture), }, @@ -2737,7 +2646,7 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { } }, want: sreconcile.ResultSuccess, - wantSourceVerificationMode: ptrToVerificationMode(sourcev1.ModeGitHEAD), + wantSourceVerificationMode: new(sourcev1.ModeGitHEAD), assertConditions: []metav1.Condition{ *conditions.TrueCondition(sourcev1.SourceVerifiedCondition, meta.SucceededReason, "verified signature of\n\t- commit 'shasum' with key '5982D0279C227FFD'"), }, @@ -2763,11 +2672,9 @@ func TestGitRepositoryReconciler_verifySignature(t *testing.T) { } obj := &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "verify-commit-", - Generation: 1, - }, - Status: sourcev1.GitRepositoryStatus{}, + GenerateName: "verify-commit-", + Generation: 1, + Status: sourcev1.GitRepositoryStatus{}, } if tt.beforeFunc != nil { @@ -2890,11 +2797,9 @@ func TestGitRepositoryReconciler_ConditionsUpdate(t *testing.T) { g := NewWithT(t) obj := &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - Name: "condition-update", - Namespace: "default", - Finalizers: []string{sourcev1.SourceFinalizer}, - }, + Name: "condition-update", + Namespace: "default", + Finalizers: []string{sourcev1.SourceFinalizer}, Spec: sourcev1.GitRepositorySpec{ URL: server.HTTPAddress() + repoPath, Interval: metav1.Duration{Duration: interval}, @@ -3138,14 +3043,10 @@ func TestGitRepositoryReconciler_statusConditions(t *testing.T) { g := NewWithT(t) obj := &sourcev1.GitRepository{ - TypeMeta: metav1.TypeMeta{ - APIVersion: sourcev1.GroupVersion.String(), - Kind: sourcev1.GitRepositoryKind, - }, - ObjectMeta: metav1.ObjectMeta{ - Name: "gitrepo", - Namespace: "foo", - }, + APIVersion: sourcev1.GroupVersion.String(), + Kind: sourcev1.GitRepositoryKind, + Name: "gitrepo", + Namespace: "foo", } clientBuilder := fakeclient.NewClientBuilder(). @@ -3438,9 +3339,7 @@ func TestGitRepositoryReconciler_fetchIncludes(t *testing.T) { var depObjs []client.Object for _, d := range tt.dependencies { obj := &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - Name: d.name, - }, + Name: d.name, Status: sourcev1.GitRepositoryStatus{ Conditions: d.conditions, }, @@ -3470,9 +3369,7 @@ func TestGitRepositoryReconciler_fetchIncludes(t *testing.T) { } obj := &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - Name: "reconcile-include", - }, + Name: "reconcile-include", Spec: sourcev1.GitRepositorySpec{ Interval: metav1.Duration{Duration: interval}, }, @@ -3680,15 +3577,15 @@ func TestGitContentConfigChanged(t *testing.T) { { name: "unobserved ignore", obj: sourcev1.GitRepository{ - Spec: sourcev1.GitRepositorySpec{Ignore: ptr.To("foo")}, + Spec: sourcev1.GitRepositorySpec{Ignore: new("foo")}, }, want: true, }, { name: "observed ignore", obj: sourcev1.GitRepository{ - Spec: sourcev1.GitRepositorySpec{Ignore: ptr.To("foo")}, - Status: sourcev1.GitRepositoryStatus{ObservedIgnore: ptr.To("foo")}, + Spec: sourcev1.GitRepositorySpec{Ignore: new("foo")}, + Status: sourcev1.GitRepositoryStatus{ObservedIgnore: new("foo")}, }, want: false, }, @@ -4017,7 +3914,7 @@ func Test_requiresVerification(t *testing.T) { }, }, Status: sourcev1.GitRepositoryStatus{ - SourceVerificationMode: ptrToVerificationMode(sourcev1.ModeGitTag), + SourceVerificationMode: new(sourcev1.ModeGitTag), }, }, want: true, @@ -4031,7 +3928,7 @@ func Test_requiresVerification(t *testing.T) { }, }, Status: sourcev1.GitRepositoryStatus{ - SourceVerificationMode: ptrToVerificationMode(sourcev1.ModeGitTag), + SourceVerificationMode: new(sourcev1.ModeGitTag), }, }, want: true, @@ -4045,7 +3942,7 @@ func Test_requiresVerification(t *testing.T) { }, }, Status: sourcev1.GitRepositoryStatus{ - SourceVerificationMode: ptrToVerificationMode(sourcev1.ModeGitHEAD), + SourceVerificationMode: new(sourcev1.ModeGitHEAD), }, }, want: true, @@ -4059,7 +3956,7 @@ func Test_requiresVerification(t *testing.T) { }, }, Status: sourcev1.GitRepositoryStatus{ - SourceVerificationMode: ptrToVerificationMode(sourcev1.ModeGitHEAD), + SourceVerificationMode: new(sourcev1.ModeGitHEAD), }, }, want: true, @@ -4073,7 +3970,7 @@ func Test_requiresVerification(t *testing.T) { }, }, Status: sourcev1.GitRepositoryStatus{ - SourceVerificationMode: ptrToVerificationMode(sourcev1.ModeGitTagAndHEAD), + SourceVerificationMode: new(sourcev1.ModeGitTagAndHEAD), }, }, want: false, @@ -4087,7 +3984,7 @@ func Test_requiresVerification(t *testing.T) { }, }, Status: sourcev1.GitRepositoryStatus{ - SourceVerificationMode: ptrToVerificationMode(sourcev1.ModeGitTagAndHEAD), + SourceVerificationMode: new(sourcev1.ModeGitTagAndHEAD), }, }, want: false, @@ -4133,17 +4030,17 @@ func Test_verificationFingerprint(t *testing.T) { func TestGitRepositoryReconciler_verificationPolicyChanged(t *testing.T) { secret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{Name: "keys", Namespace: "default"}, - Data: map[string][]byte{"foo": []byte(armoredKeyRingFixture)}, + Name: "keys", Namespace: "default", + Data: map[string][]byte{"foo": []byte(armoredKeyRingFixture)}, } rotatedSecret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{Name: "keys", Namespace: "default"}, - Data: map[string][]byte{"foo": []byte(armoredKeyRingFixture + "\n")}, + Name: "keys", Namespace: "default", + Data: map[string][]byte{"foo": []byte(armoredKeyRingFixture + "\n")}, } newObj := func(mode sourcev1.GitVerificationMode, fingerprint string) *sourcev1.GitRepository { obj := &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{Name: "repo", Namespace: "default"}, + Name: "repo", Namespace: "default", Spec: sourcev1.GitRepositorySpec{ Verification: &sourcev1.GitRepositoryVerification{ Mode: mode, @@ -4234,8 +4131,8 @@ func TestGitRepositoryReconciler_reconcileSource_verificationPolicyChange(t *tes g.Expect(remoteBranchForHead(localRepo, headRef, "staging")).To(Succeed()) secret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{Name: "keys", Namespace: "default"}, - Data: map[string][]byte{"foo": []byte(armoredKeyRingFixture)}, + Name: "keys", Namespace: "default", + Data: map[string][]byte{"foo": []byte(armoredKeyRingFixture)}, } tests := []struct { @@ -4259,11 +4156,9 @@ func TestGitRepositoryReconciler_reconcileSource_verificationPolicyChange(t *tes g := NewWithT(t) obj := &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "verification-policy-", - Namespace: "default", - Generation: 1, - }, + GenerateName: "verification-policy-", + Namespace: "default", + Generation: 1, Spec: sourcev1.GitRepositorySpec{ Interval: metav1.Duration{Duration: interval}, Timeout: &metav1.Duration{Duration: timeout}, @@ -4281,7 +4176,7 @@ func TestGitRepositoryReconciler_reconcileSource_verificationPolicyChange(t *tes Revision: "staging@sha1:" + headRef.Hash().String(), Path: randStringRunes(10), }, - SourceVerificationMode: ptrToVerificationMode(sourcev1.ModeGitHEAD), + SourceVerificationMode: new(sourcev1.ModeGitHEAD), SourceVerificationFingerprint: tt.fingerprint, }, } @@ -4316,6 +4211,7 @@ func TestGitRepositoryReconciler_reconcileSource_verificationPolicyChange(t *tes } } +//go:fix inline func ptrToVerificationMode(mode sourcev1.GitVerificationMode) *sourcev1.GitVerificationMode { - return &mode + return new(mode) } diff --git a/internal/controller/helmchart_controller_test.go b/internal/controller/helmchart_controller_test.go index 94c6f7de4..c10943c60 100644 --- a/internal/controller/helmchart_controller_test.go +++ b/internal/controller/helmchart_controller_test.go @@ -86,7 +86,7 @@ func TestHelmChartReconciler_deleteBeforeFinalizer(t *testing.T) { namespaceName := "helmchart-" + randStringRunes(5) namespace := &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{Name: namespaceName}, + Name: namespaceName, } g.Expect(k8sClient.Create(ctx, namespace)).ToNot(HaveOccurred()) t.Cleanup(func() { @@ -293,10 +293,8 @@ func TestHelmChartReconciler_Reconcile(t *testing.T) { defer func() { g.Expect(testEnv.Delete(ctx, ns)).To(Succeed()) }() repository := sourcev1.HelmRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "helmrepository-", - Namespace: ns.Name, - }, + GenerateName: "helmrepository-", + Namespace: ns.Name, Spec: sourcev1.HelmRepositorySpec{ URL: server.URL(), }, @@ -310,10 +308,8 @@ func TestHelmChartReconciler_Reconcile(t *testing.T) { defer func() { g.Expect(testEnv.Delete(ctx, &repository)).To(Succeed()) }() obj := sourcev1.HelmChart{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "helmrepository-reconcile-", - Namespace: ns.Name, - }, + GenerateName: "helmrepository-reconcile-", + Namespace: ns.Name, Spec: sourcev1.HelmChartSpec{ Chart: chartName, Version: chartVersion, @@ -371,7 +367,7 @@ func TestHelmChartReconciler_reconcileStorage(t *testing.T) { Revision: "d", Digest: "sha256:18ac3e7343f016890c510e93f935261169d9e3f565436429830faf0934f4f8e4", URL: testStorage.Hostname + "/reconcile-storage/d.txt", - Size: int64p(int64(len("d"))), + Size: new(int64(len("d"))), }, assertPaths: []string{ "/reconcile-storage/d.txt", @@ -500,7 +496,7 @@ func TestHelmChartReconciler_reconcileStorage(t *testing.T) { Revision: "f", Digest: "sha256:3b9c358f36f0a31b6ad3e14f309c7cf198ac9246e8316f9ce543d5b19ac02b80", URL: testStorage.Hostname + "/reconcile-storage/hostname.txt", - Size: int64p(int64(len("file"))), + Size: new(int64(len("file"))), }, assertConditions: []metav1.Condition{ *conditions.TrueCondition(meta.ReadyCondition, "foo", "bar"), @@ -526,10 +522,8 @@ func TestHelmChartReconciler_reconcileStorage(t *testing.T) { } obj := &sourcev1.HelmChart{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "test-", - Generation: 1, - }, + GenerateName: "test-", + Generation: 1, } if tt.beforeFunc != nil { g.Expect(tt.beforeFunc(obj, testStorage)).To(Succeed()) @@ -602,10 +596,8 @@ func TestHelmChartReconciler_reconcileSource(t *testing.T) { { name: "Observes Artifact revision and build result", source: &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - Name: "gitrepository", - Namespace: "default", - }, + Name: "gitrepository", + Namespace: "default", Status: sourcev1.GitRepositoryStatus{ Artifact: gitArtifact, }, @@ -637,10 +629,8 @@ func TestHelmChartReconciler_reconcileSource(t *testing.T) { { name: "Existing artifact makes AritfactOutdated=True", source: &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - Name: "gitrepository", - Namespace: "default", - }, + Name: "gitrepository", + Namespace: "default", Status: sourcev1.GitRepositoryStatus{ Artifact: gitArtifact, }, @@ -718,10 +708,8 @@ func TestHelmChartReconciler_reconcileSource(t *testing.T) { { name: "Stalling on persistent build error", source: &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - Name: "gitrepository", - Namespace: "default", - }, + Name: "gitrepository", + Namespace: "default", Status: sourcev1.GitRepositoryStatus{ Artifact: gitArtifact, }, @@ -751,11 +739,9 @@ func TestHelmChartReconciler_reconcileSource(t *testing.T) { { name: "ResultRequeue when source artifact is unavailable", source: &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - Name: "gitrepository", - Namespace: "default", - }, - Status: sourcev1.GitRepositoryStatus{}, + Name: "gitrepository", + Namespace: "default", + Status: sourcev1.GitRepositoryStatus{}, }, beforeFunc: func(obj *sourcev1.HelmChart) { obj.Spec.Chart = "testdata/charts/helmchart-0.1.0.tgz" @@ -801,12 +787,10 @@ func TestHelmChartReconciler_reconcileSource(t *testing.T) { } obj := sourcev1.HelmChart{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "chart", - Namespace: "default", - Generation: 1, - }, - Spec: sourcev1.HelmChartSpec{}, + GenerateName: "chart", + Namespace: "default", + Generation: 1, + Spec: sourcev1.HelmChartSpec{}, } if tt.beforeFunc != nil { tt.beforeFunc(&obj) @@ -901,9 +885,7 @@ func TestHelmChartReconciler_buildFromHelmRepository(t *testing.T) { password: "bar", }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "auth", - }, + Name: "auth", Data: map[string][]byte{ "username": []byte("foo"), "password": []byte("bar"), @@ -1139,9 +1121,7 @@ func TestHelmChartReconciler_buildFromHelmRepository(t *testing.T) { } repository := &sourcev1.HelmRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "helmrepository-", - }, + GenerateName: "helmrepository-", Spec: sourcev1.HelmRepositorySpec{ URL: server.URL(), Timeout: &metav1.Duration{Duration: timeout}, @@ -1153,10 +1133,8 @@ func TestHelmChartReconciler_buildFromHelmRepository(t *testing.T) { }, } obj := &sourcev1.HelmChart{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "helmrepository-", - }, - Spec: sourcev1.HelmChartSpec{}, + GenerateName: "helmrepository-", + Spec: sourcev1.HelmChartSpec{}, } if tt.beforeFunc != nil { @@ -1229,9 +1207,7 @@ func TestHelmChartReconciler_buildFromOCIHelmRepository(t *testing.T) { { name: "Reconciles chart build with docker repository credentials", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "auth", - }, + Name: "auth", Type: corev1.SecretTypeDockerConfigJson, Data: map[string][]byte{ ".dockerconfigjson": []byte(`{"auths":{"` + @@ -1258,9 +1234,7 @@ func TestHelmChartReconciler_buildFromOCIHelmRepository(t *testing.T) { { name: "Reconciles chart build with repository credentials", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "auth", - }, + Name: "auth", Data: map[string][]byte{ "username": []byte(testRegistryUsername), "password": []byte(testRegistryPassword), @@ -1301,9 +1275,7 @@ func TestHelmChartReconciler_buildFromOCIHelmRepository(t *testing.T) { { name: "Forces build on generation change", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "auth", - }, + Name: "auth", Data: map[string][]byte{ "username": []byte(testRegistryUsername), "password": []byte(testRegistryPassword), @@ -1392,9 +1364,7 @@ func TestHelmChartReconciler_buildFromOCIHelmRepository(t *testing.T) { } repository := &sourcev1.HelmRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "helmrepository-", - }, + GenerateName: "helmrepository-", Spec: sourcev1.HelmRepositorySpec{ URL: fmt.Sprintf("oci://%s/testrepo", testRegistryServer.registryHost), Timeout: &metav1.Duration{Duration: timeout}, @@ -1404,10 +1374,8 @@ func TestHelmChartReconciler_buildFromOCIHelmRepository(t *testing.T) { }, } obj := &sourcev1.HelmChart{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "helmrepository-", - }, - Spec: sourcev1.HelmChartSpec{}, + GenerateName: "helmrepository-", + Spec: sourcev1.HelmChartSpec{}, } if tt.beforeFunc != nil { @@ -1634,11 +1602,9 @@ func TestHelmChartReconciler_buildFromTarballArtifact(t *testing.T) { } obj := &sourcev1.HelmChart{ - ObjectMeta: metav1.ObjectMeta{ - Name: "artifact", - Namespace: "default", - }, - Spec: sourcev1.HelmChartSpec{}, + Name: "artifact", + Namespace: "default", + Spec: sourcev1.HelmChartSpec{}, } if tt.beforeFunc != nil { tt.beforeFunc(obj) @@ -1844,11 +1810,9 @@ func TestHelmChartReconciler_reconcileArtifact(t *testing.T) { } obj := &sourcev1.HelmChart{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "reconcile-artifact-", - Generation: 1, - }, - Status: sourcev1.HelmChartStatus{}, + GenerateName: "reconcile-artifact-", + Generation: 1, + Status: sourcev1.HelmChartStatus{}, } if tt.beforeFunc != nil { tt.beforeFunc(obj) @@ -1875,34 +1839,22 @@ func TestHelmChartReconciler_reconcileArtifact(t *testing.T) { func TestHelmChartReconciler_getSource(t *testing.T) { mocks := []client.Object{ &sourcev1.HelmRepository{ - TypeMeta: metav1.TypeMeta{ - Kind: sourcev1.HelmRepositoryKind, - APIVersion: sourcev1.GroupVersion.String(), - }, - ObjectMeta: metav1.ObjectMeta{ - Name: "helmrepository", - Namespace: "foo", - }, + Kind: sourcev1.HelmRepositoryKind, + APIVersion: sourcev1.GroupVersion.String(), + Name: "helmrepository", + Namespace: "foo", }, &sourcev1.GitRepository{ - TypeMeta: metav1.TypeMeta{ - Kind: sourcev1.GitRepositoryKind, - APIVersion: sourcev1.GroupVersion.String(), - }, - ObjectMeta: metav1.ObjectMeta{ - Name: "gitrepository", - Namespace: "foo", - }, + Kind: sourcev1.GitRepositoryKind, + APIVersion: sourcev1.GroupVersion.String(), + Name: "gitrepository", + Namespace: "foo", }, &sourcev1.Bucket{ - TypeMeta: metav1.TypeMeta{ - Kind: sourcev1.BucketKind, - APIVersion: sourcev1.GroupVersion.String(), - }, - ObjectMeta: metav1.ObjectMeta{ - Name: "bucket", - Namespace: "foo", - }, + Kind: sourcev1.BucketKind, + APIVersion: sourcev1.GroupVersion.String(), + Name: "bucket", + Namespace: "foo", }, } @@ -1925,9 +1877,7 @@ func TestHelmChartReconciler_getSource(t *testing.T) { { name: "Get HelmRepository source for reference", obj: &sourcev1.HelmChart{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: mocks[0].GetNamespace(), - }, + Namespace: mocks[0].GetNamespace(), Spec: sourcev1.HelmChartSpec{ SourceRef: sourcev1.LocalHelmChartSourceReference{ Name: mocks[0].GetName(), @@ -1940,9 +1890,7 @@ func TestHelmChartReconciler_getSource(t *testing.T) { { name: "Get GitRepository source for reference", obj: &sourcev1.HelmChart{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: mocks[1].GetNamespace(), - }, + Namespace: mocks[1].GetNamespace(), Spec: sourcev1.HelmChartSpec{ SourceRef: sourcev1.LocalHelmChartSourceReference{ Name: mocks[1].GetName(), @@ -1955,9 +1903,7 @@ func TestHelmChartReconciler_getSource(t *testing.T) { { name: "Get Bucket source for reference", obj: &sourcev1.HelmChart{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: mocks[2].GetNamespace(), - }, + Namespace: mocks[2].GetNamespace(), Spec: sourcev1.HelmChartSpec{ SourceRef: sourcev1.LocalHelmChartSourceReference{ Name: mocks[2].GetName(), @@ -1970,9 +1916,7 @@ func TestHelmChartReconciler_getSource(t *testing.T) { { name: "Error on client error", obj: &sourcev1.HelmChart{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: mocks[2].GetNamespace(), - }, + Namespace: mocks[2].GetNamespace(), Spec: sourcev1.HelmChartSpec{ SourceRef: sourcev1.LocalHelmChartSourceReference{ Name: mocks[1].GetName(), @@ -2035,12 +1979,10 @@ func TestHelmChartReconciler_reconcileDelete(t *testing.T) { } obj := &sourcev1.HelmChart{ - ObjectMeta: metav1.ObjectMeta{ - Name: "reconcile-delete-", - DeletionTimestamp: &metav1.Time{Time: time.Now()}, - Finalizers: []string{ - sourcev1.SourceFinalizer, - }, + Name: "reconcile-delete-", + DeletionTimestamp: &metav1.Time{Time: time.Now()}, + Finalizers: []string{ + sourcev1.SourceFinalizer, }, Status: sourcev1.HelmChartStatus{}, } @@ -2173,10 +2115,8 @@ func TestHelmChartReconciler_reconcileSubRecs(t *testing.T) { patchOptions: getPatchOptions(helmChartReadyCondition.Owned, "sc"), } obj := &sourcev1.HelmChart{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "test-", - Generation: tt.generation, - }, + GenerateName: "test-", + Generation: tt.generation, Status: sourcev1.HelmChartStatus{ ObservedGeneration: tt.observedGeneration, }, @@ -2275,14 +2215,10 @@ func TestHelmChartReconciler_statusConditions(t *testing.T) { g := NewWithT(t) obj := &sourcev1.HelmChart{ - TypeMeta: metav1.TypeMeta{ - Kind: sourcev1.HelmChartKind, - APIVersion: sourcev1.GroupVersion.String(), - }, - ObjectMeta: metav1.ObjectMeta{ - Name: "helmchart", - Namespace: "foo", - }, + Kind: sourcev1.HelmChartKind, + APIVersion: sourcev1.GroupVersion.String(), + Name: "helmchart", + Namespace: "foo", } clientBuilder := fakeclient.NewClientBuilder(). @@ -2493,9 +2429,7 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_authStrategy(t *testing.T) { password: testRegistryPassword, }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "auth-secretref", - }, + Name: "auth-secretref", Type: corev1.SecretTypeDockerConfigJson, Data: map[string][]byte{}, }, @@ -2517,9 +2451,7 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_authStrategy(t *testing.T) { password: "wrong-pass", }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "auth-secretref", - }, + Name: "auth-secretref", Type: corev1.SecretTypeDockerConfigJson, Data: map[string][]byte{}, }, @@ -2549,9 +2481,7 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_authStrategy(t *testing.T) { password: testRegistryPassword, }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "auth-secretref", - }, + Name: "auth-secretref", Type: corev1.SecretTypeDockerConfigJson, Data: map[string][]byte{}, }, @@ -2573,16 +2503,12 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_authStrategy(t *testing.T) { password: testRegistryPassword, }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "auth-secretref", - }, + Name: "auth-secretref", Type: corev1.SecretTypeDockerConfigJson, Data: map[string][]byte{}, }, certSecret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "certs-secretref", - }, + Name: "certs-secretref", Data: map[string][]byte{ "ca.crt": []byte("invalid caFile"), }, @@ -2598,9 +2524,7 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_authStrategy(t *testing.T) { withTLS: true, }, certSecret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "certs-secretref", - }, + Name: "certs-secretref", Type: corev1.SecretTypeOpaque, Data: map[string][]byte{ "ca.crt": tlsCA, @@ -2619,9 +2543,7 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_authStrategy(t *testing.T) { withClientCertAuth: true, }, certSecret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "certs-secretref", - }, + Name: "certs-secretref", Data: map[string][]byte{ "ca.crt": tlsCA, "tls.crt": clientPublicKey, @@ -2643,9 +2565,7 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_authStrategy(t *testing.T) { withClientCertAuth: true, }, certSecret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "certs-secretref", - }, + Name: "certs-secretref", Data: map[string][]byte{ "ca.crt": tlsCA, "tls.crt": clientInvalidPublicKey, @@ -2683,9 +2603,7 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_authStrategy(t *testing.T) { g.Expect(err).ToNot(HaveOccurred()) repo := &sourcev1.HelmRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "auth-strategy-", - }, + GenerateName: "auth-strategy-", Spec: sourcev1.HelmRepositorySpec{ Interval: metav1.Duration{Duration: interval}, Timeout: &metav1.Duration{Duration: timeout}, @@ -2728,9 +2646,7 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_authStrategy(t *testing.T) { clientBuilder.WithObjects(repo) obj := &sourcev1.HelmChart{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "auth-strategy-", - }, + GenerateName: "auth-strategy-", Spec: sourcev1.HelmChartSpec{ Chart: metadata.Name, Version: metadata.Version, @@ -2889,9 +2805,7 @@ func TestHelmChartRepository_reconcileSource_verifyOCISourceSignature_keyless(t clientBuilder := fakeclient.NewClientBuilder() repository := &sourcev1.HelmRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "helmrepository-", - }, + GenerateName: "helmrepository-", Spec: sourcev1.HelmRepositorySpec{ URL: "oci://ghcr.io/stefanprodan/charts", Timeout: &metav1.Duration{Duration: timeout}, @@ -2911,9 +2825,7 @@ func TestHelmChartRepository_reconcileSource_verifyOCISourceSignature_keyless(t } obj := &sourcev1.HelmChart{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "helmchart-", - }, + GenerateName: "helmchart-", Spec: sourcev1.HelmChartSpec{ SourceRef: sourcev1.LocalHelmChartSourceReference{ Kind: sourcev1.HelmRepositoryKind, @@ -3158,9 +3070,7 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_verifySignatureNotation(t *t clientBuilder := fakeclient.NewClientBuilder() repository := &sourcev1.HelmRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "helmrepository-", - }, + GenerateName: "helmrepository-", Spec: sourcev1.HelmRepositorySpec{ URL: fmt.Sprintf("oci://%s/testrepo", server.registryHost), Timeout: &metav1.Duration{Duration: timeout}, @@ -3190,17 +3100,13 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_verifySignatureNotation(t *t } secret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "notation-config", - }, + Name: "notation-config", Data: data, } caSecret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "valid-trust-store", - Generation: 1, - }, + Name: "valid-trust-store", + Generation: 1, Data: map[string][]byte{ "ca.crt": tlsCA, }, @@ -3218,9 +3124,7 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_verifySignatureNotation(t *t } obj := &sourcev1.HelmChart{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "helmchart-", - }, + GenerateName: "helmchart-", Spec: sourcev1.HelmChartSpec{ SourceRef: sourcev1.LocalHelmChartSourceReference{ Kind: sourcev1.HelmRepositoryKind, @@ -3250,10 +3154,8 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_verifySignatureNotation(t *t signatureMediaType := cose.MediaTypeEnvelope signOptions := notation.SignOptions{ - SignerSignOptions: notation.SignerSignOptions{ - SignatureMediaType: signatureMediaType, - }, - ArtifactReference: artifact, + SignatureMediaType: signatureMediaType, + ArtifactReference: artifact, } _, err = notation.Sign(ctx, sg, repo, signOptions) @@ -3440,9 +3342,7 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_verifySignatureCosign(t *tes clientBuilder := fakeclient.NewClientBuilder() repository := &sourcev1.HelmRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "helmrepository-", - }, + GenerateName: "helmrepository-", Spec: sourcev1.HelmRepositorySpec{ URL: fmt.Sprintf("oci://%s/testrepo", server.registryHost), Timeout: &metav1.Duration{Duration: timeout}, @@ -3453,9 +3353,7 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_verifySignatureCosign(t *tes } secret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "cosign-key", - }, + Name: "cosign-key", Data: map[string][]byte{ "cosign.pub": keys.PublicBytes, }} @@ -3472,9 +3370,7 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_verifySignatureCosign(t *tes } obj := &sourcev1.HelmChart{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "helmchart-", - }, + GenerateName: "helmchart-", Spec: sourcev1.HelmChartSpec{ SourceRef: sourcev1.LocalHelmChartSourceReference{ Kind: sourcev1.HelmRepositoryKind, diff --git a/internal/controller/helmrepository_controller_test.go b/internal/controller/helmrepository_controller_test.go index 68f1e77f9..fb6a628f5 100644 --- a/internal/controller/helmrepository_controller_test.go +++ b/internal/controller/helmrepository_controller_test.go @@ -65,7 +65,7 @@ func TestHelmRepositoryReconciler_deleteBeforeFinalizer(t *testing.T) { namespaceName := "helmrepo-" + randStringRunes(5) namespace := &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{Name: namespaceName}, + Name: namespaceName, } g.Expect(k8sClient.Create(ctx, namespace)).ToNot(HaveOccurred()) t.Cleanup(func() { @@ -109,10 +109,8 @@ func TestHelmRepositoryReconciler_Reconcile(t *testing.T) { defer testServer.Stop() origObj := &sourcev1.HelmRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "helmrepository-reconcile-", - Namespace: "default", - }, + GenerateName: "helmrepository-reconcile-", + Namespace: "default", Spec: sourcev1.HelmRepositorySpec{ Interval: metav1.Duration{Duration: interval}, URL: testServer.URL(), @@ -211,7 +209,7 @@ func TestHelmRepositoryReconciler_reconcileStorage(t *testing.T) { Revision: "d", Digest: "sha256:18ac3e7343f016890c510e93f935261169d9e3f565436429830faf0934f4f8e4", URL: testStorage.Hostname + "/reconcile-storage/d.txt", - Size: int64p(int64(len("d"))), + Size: new(int64(len("d"))), }, assertPaths: []string{ "/reconcile-storage/d.txt", @@ -343,7 +341,7 @@ func TestHelmRepositoryReconciler_reconcileStorage(t *testing.T) { Revision: "f", Digest: "sha256:3b9c358f36f0a31b6ad3e14f309c7cf198ac9246e8316f9ce543d5b19ac02b80", URL: testStorage.Hostname + "/reconcile-storage/hostname.txt", - Size: int64p(int64(len("file"))), + Size: new(int64(len("file"))), }, assertConditions: []metav1.Condition{ *conditions.TrueCondition(meta.ReadyCondition, "foo", "bar"), @@ -367,10 +365,8 @@ func TestHelmRepositoryReconciler_reconcileStorage(t *testing.T) { } obj := &sourcev1.HelmRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "test-", - Generation: 1, - }, + GenerateName: "test-", + Generation: 1, } if tt.beforeFunc != nil { g.Expect(tt.beforeFunc(obj, testStorage)).To(Succeed()) @@ -451,10 +447,8 @@ func TestHelmRepositoryReconciler_reconcileSource(t *testing.T) { want: sreconcile.ResultSuccess, wantErr: false, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ca-file", - Namespace: "default", - }, + Name: "ca-file", + Namespace: "default", Data: map[string][]byte{ "ca.crt": tlsCA, }, @@ -476,10 +470,8 @@ func TestHelmRepositoryReconciler_reconcileSource(t *testing.T) { ca: tlsCA, }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ca-file", - Namespace: "default", - }, + Name: "ca-file", + Namespace: "default", Data: map[string][]byte{ "ca.crt": tlsCA, }, @@ -528,10 +520,8 @@ func TestHelmRepositoryReconciler_reconcileSource(t *testing.T) { ca: tlsCA, }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ca-file", - Namespace: "default", - }, + Name: "ca-file", + Namespace: "default", Data: map[string][]byte{ "caFile": tlsCA, }, @@ -581,10 +571,8 @@ func TestHelmRepositoryReconciler_reconcileSource(t *testing.T) { ca: tlsCA, }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ca-file", - Namespace: "default", - }, + Name: "ca-file", + Namespace: "default", Data: map[string][]byte{ "caFile": tlsCA, }, @@ -665,10 +653,8 @@ func TestHelmRepositoryReconciler_reconcileSource(t *testing.T) { password: "1234", }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "basic-auth", - Namespace: "default", - }, + Name: "basic-auth", + Namespace: "default", Data: map[string][]byte{ "username": []byte("git"), "password": []byte("1234"), @@ -719,10 +705,8 @@ func TestHelmRepositoryReconciler_reconcileSource(t *testing.T) { password: "1234", }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "basic-auth", - Namespace: "default", - }, + Name: "basic-auth", + Namespace: "default", Data: map[string][]byte{ "username": []byte("git"), "password": []byte("1234"), @@ -774,10 +758,8 @@ func TestHelmRepositoryReconciler_reconcileSource(t *testing.T) { ca: tlsCA, }, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "invalid-ca", - Namespace: "default", - }, + Name: "invalid-ca", + Namespace: "default", Data: map[string][]byte{ "ca.crt": []byte("invalid"), }, @@ -869,10 +851,8 @@ func TestHelmRepositoryReconciler_reconcileSource(t *testing.T) { name: "Malformed secret returns FetchFailed=True and returns error", protocol: "http", secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "malformed-basic-auth", - Namespace: "default", - }, + Name: "malformed-basic-auth", + Namespace: "default", Data: map[string][]byte{ "username": []byte("git"), }, @@ -978,11 +958,9 @@ func TestHelmRepositoryReconciler_reconcileSource(t *testing.T) { for _, tt := range tests { obj := &sourcev1.HelmRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "auth-strategy-", - Generation: 1, - Namespace: "default", - }, + GenerateName: "auth-strategy-", + Generation: 1, + Namespace: "default", Spec: sourcev1.HelmRepositorySpec{ Interval: metav1.Duration{Duration: interval}, Timeout: &metav1.Duration{Duration: timeout}, @@ -1116,11 +1094,9 @@ func TestHelmRepositoryReconciler_reconcileSource_cachedIndexFile(t *testing.T) newObject := func(url string) *sourcev1.HelmRepository { return &sourcev1.HelmRepository{ - ObjectMeta: metav1.ObjectMeta{ - Name: "index-cache", - Namespace: "default", - Generation: 1, - }, + Name: "index-cache", + Namespace: "default", + Generation: 1, Spec: sourcev1.HelmRepositorySpec{ Interval: metav1.Duration{Duration: interval}, Timeout: &metav1.Duration{Duration: timeout}, @@ -1384,14 +1360,10 @@ func TestHelmRepositoryReconciler_reconcileArtifact(t *testing.T) { } obj := &sourcev1.HelmRepository{ - TypeMeta: metav1.TypeMeta{ - Kind: sourcev1.HelmRepositoryKind, - }, - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "test-bucket-", - Generation: 1, - Namespace: "default", - }, + Kind: sourcev1.HelmRepositoryKind, + GenerateName: "test-bucket-", + Generation: 1, + Namespace: "default", Spec: sourcev1.HelmRepositorySpec{ Timeout: &metav1.Duration{Duration: timeout}, URL: "https://example.com/index.yaml", @@ -1461,13 +1433,9 @@ func TestHelmRepositoryReconciler_garbageCollectEvictsCache(t *testing.T) { } obj := &sourcev1.HelmRepository{ - TypeMeta: metav1.TypeMeta{ - Kind: sourcev1.HelmRepositoryKind, - }, - ObjectMeta: metav1.ObjectMeta{ - Name: "cache-evict", - Namespace: "default", - }, + Kind: sourcev1.HelmRepositoryKind, + Name: "cache-evict", + Namespace: "default", } artifact := testStorage.NewArtifactFor(obj.Kind, obj, "existing", "index-existing.yaml") obj.Status.Artifact = &artifact @@ -1599,10 +1567,8 @@ func TestHelmRepositoryReconciler_reconcileSubRecs(t *testing.T) { patchOptions: getPatchOptions(helmRepositoryReadyCondition.Owned, "sc"), } obj := &sourcev1.HelmRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "test-", - Generation: tt.generation, - }, + GenerateName: "test-", + Generation: tt.generation, Status: sourcev1.HelmRepositoryStatus{ ObservedGeneration: tt.observedGeneration, }, @@ -1678,14 +1644,10 @@ func TestHelmRepositoryReconciler_statusConditions(t *testing.T) { g := NewWithT(t) obj := &sourcev1.HelmRepository{ - TypeMeta: metav1.TypeMeta{ - Kind: sourcev1.HelmRepositoryKind, - APIVersion: sourcev1.GroupVersion.String(), - }, - ObjectMeta: metav1.ObjectMeta{ - Name: "helmrepo", - Namespace: "foo", - }, + Kind: sourcev1.HelmRepositoryKind, + APIVersion: sourcev1.GroupVersion.String(), + Name: "helmrepo", + Namespace: "foo", } clientBuilder := fakeclient.NewClientBuilder(). @@ -1873,10 +1835,8 @@ func TestHelmRepositoryReconciler_ReconcileTypeUpdatePredicateFilter(t *testing. defer testServer.Stop() obj := &sourcev1.HelmRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "helmrepository-reconcile-", - Namespace: "default", - }, + GenerateName: "helmrepository-reconcile-", + Namespace: "default", Spec: sourcev1.HelmRepositorySpec{ Interval: metav1.Duration{Duration: interval}, URL: testServer.URL(), @@ -1962,10 +1922,8 @@ func TestHelmRepositoryReconciler_ReconcileSpecUpdatePredicateFilter(t *testing. defer testServer.Stop() obj := &sourcev1.HelmRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "helmrepository-reconcile-", - Namespace: "default", - }, + GenerateName: "helmrepository-reconcile-", + Namespace: "default", Spec: sourcev1.HelmRepositorySpec{ Interval: metav1.Duration{Duration: interval}, URL: testServer.URL(), @@ -2064,10 +2022,8 @@ func TestHelmRepositoryReconciler_InMemoryCaching(t *testing.T) { defer func() { g.Expect(testEnv.Delete(ctx, ns)).To(Succeed()) }() helmRepo := &sourcev1.HelmRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "helmrepository-", - Namespace: ns.Name, - }, + GenerateName: "helmrepository-", + Namespace: ns.Name, Spec: sourcev1.HelmRepositorySpec{ URL: testServer.URL(), }, @@ -2123,10 +2079,8 @@ func TestHelmRepositoryReconciler_ociMigration(t *testing.T) { }) hr := &sourcev1.HelmRepository{ - ObjectMeta: metav1.ObjectMeta{ - Name: fmt.Sprintf("hr-%s", randStringRunes(5)), - Namespace: testns.Name, - }, + Name: fmt.Sprintf("hr-%s", randStringRunes(5)), + Namespace: testns.Name, } hrKey := client.ObjectKeyFromObject(hr) diff --git a/internal/controller/ocirepository_controller_test.go b/internal/controller/ocirepository_controller_test.go index 8907d84d0..41c7f45eb 100644 --- a/internal/controller/ocirepository_controller_test.go +++ b/internal/controller/ocirepository_controller_test.go @@ -52,7 +52,6 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/utils/ptr" oras "oras.land/oras-go/v2/registry/remote" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" @@ -90,7 +89,7 @@ func TestOCIRepositoryReconciler_deleteBeforeFinalizer(t *testing.T) { namespaceName := "ocirepo-" + randStringRunes(5) namespace := &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{Name: namespaceName}, + Name: namespaceName, } g.Expect(k8sClient.Create(ctx, namespace)).ToNot(HaveOccurred()) t.Cleanup(func() { @@ -126,7 +125,7 @@ func TestOCIRepository_CELValidation(t *testing.T) { namespaceName := "ocirepo-" + randStringRunes(5) namespace := &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{Name: namespaceName}, + Name: namespaceName, } g.Expect(k8sClient.Create(ctx, namespace)).ToNot(HaveOccurred()) t.Cleanup(func() { @@ -135,7 +134,7 @@ func TestOCIRepository_CELValidation(t *testing.T) { tests := []struct { name string - spec map[string]interface{} + spec map[string]any wantErr []string }{ { @@ -144,26 +143,26 @@ func TestOCIRepository_CELValidation(t *testing.T) { }, { name: "empty spec", - spec: map[string]interface{}{}, + spec: map[string]any{}, wantErr: []string{"spec.url is required", "spec.interval is required"}, }, { name: "missing url", - spec: map[string]interface{}{ + spec: map[string]any{ "interval": "1m", }, wantErr: []string{"spec.url is required"}, }, { name: "missing interval", - spec: map[string]interface{}{ + spec: map[string]any{ "url": "oci://example.com", }, wantErr: []string{"spec.interval is required"}, }, { name: "valid", - spec: map[string]interface{}{ + spec: map[string]any{ "url": "oci://example.com", "interval": "1m", }, @@ -269,10 +268,8 @@ func TestOCIRepository_Reconcile(t *testing.T) { defer func() { g.Expect(testEnv.Delete(ctx, ns)).To(Succeed()) }() origObj := &sourcev1.OCIRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "ocirepository-reconcile", - Namespace: ns.Name, - }, + GenerateName: "ocirepository-reconcile", + Namespace: ns.Name, Spec: sourcev1.OCIRepositorySpec{ URL: tt.url, Interval: &metav1.Duration{Duration: 60 * time.Minute}, @@ -437,10 +434,8 @@ func TestOCIRepository_Reconcile_MediaType(t *testing.T) { defer func() { g.Expect(testEnv.Delete(ctx, ns)).To(Succeed()) }() obj := &sourcev1.OCIRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "ocirepository-reconcile", - Namespace: ns.Name, - }, + GenerateName: "ocirepository-reconcile", + Namespace: ns.Name, Spec: sourcev1.OCIRepositorySpec{ URL: tt.url, Interval: &metav1.Duration{Duration: 60 * time.Minute}, @@ -655,9 +650,7 @@ func TestOCIRepository_reconcileSource_authStrategy(t *testing.T) { }), }, tlsCertSecret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ca-file", - }, + Name: "ca-file", Data: map[string][]byte{ "ca.crt": tlsCA, }, @@ -680,9 +673,7 @@ func TestOCIRepository_reconcileSource_authStrategy(t *testing.T) { }), }, tlsCertSecret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ca-file", - }, + Name: "ca-file", Data: map[string][]byte{ "caFile": tlsCA, }, @@ -723,9 +714,7 @@ func TestOCIRepository_reconcileSource_authStrategy(t *testing.T) { }), }, tlsCertSecret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ca-file", - }, + Name: "ca-file", Data: map[string][]byte{ "ca.crt": []byte("invalid"), }, @@ -747,9 +736,7 @@ func TestOCIRepository_reconcileSource_authStrategy(t *testing.T) { }), }, tlsCertSecret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ca-file", - }, + Name: "ca-file", Data: map[string][]byte{ "ca.crt": tlsCA, "caFile": []byte("invalid"), @@ -808,10 +795,8 @@ func TestOCIRepository_reconcileSource_authStrategy(t *testing.T) { WithStatusSubresource(&sourcev1.OCIRepository{}) obj := &sourcev1.OCIRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "auth-strategy-", - Generation: 1, - }, + GenerateName: "auth-strategy-", + Generation: 1, Spec: sourcev1.OCIRepositorySpec{ Interval: &metav1.Duration{Duration: interval}, Timeout: &metav1.Duration{Duration: timeout}, @@ -844,9 +829,7 @@ func TestOCIRepository_reconcileSource_authStrategy(t *testing.T) { if tt.secretOpts.username != "" && tt.secretOpts.password != "" { secret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "auth-secretref", - }, + Name: "auth-secretref", Type: corev1.SecretTypeDockerConfigJson, Data: map[string][]byte{ ".dockerconfigjson": fmt.Appendf(nil, `{"auths": {%q: {"username": %q, "password": %q}}}`, @@ -857,9 +840,7 @@ func TestOCIRepository_reconcileSource_authStrategy(t *testing.T) { if tt.secretOpts.includeSA { serviceAccount := &corev1.ServiceAccount{ - ObjectMeta: metav1.ObjectMeta{ - Name: "sa-ocitest", - }, + Name: "sa-ocitest", ImagePullSecrets: []corev1.LocalObjectReference{{Name: secret.Name}}, } clientBuilder.WithObjects(serviceAccount) @@ -1014,11 +995,9 @@ func TestOCIRepository_CertSecret(t *testing.T) { defer func() { g.Expect(testEnv.Delete(ctx, ns)).To(Succeed()) }() obj := &sourcev1.OCIRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "ocirepository-test-resource", - Namespace: ns.Name, - Generation: 1, - }, + GenerateName: "ocirepository-test-resource", + Namespace: ns.Name, + Generation: 1, Spec: sourcev1.OCIRepositorySpec{ URL: tt.url, Interval: &metav1.Duration{Duration: 60 * time.Minute}, @@ -1140,11 +1119,9 @@ func TestOCIRepository_ProxySecret(t *testing.T) { defer func() { g.Expect(testEnv.Delete(ctx, ns)).To(Succeed()) }() obj := &sourcev1.OCIRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "ocirepository-test-resource", - Namespace: ns.Name, - Generation: 1, - }, + GenerateName: "ocirepository-test-resource", + Namespace: ns.Name, + Generation: 1, Spec: sourcev1.OCIRepositorySpec{ URL: tt.url, Interval: &metav1.Duration{Duration: 60 * time.Minute}, @@ -1354,10 +1331,8 @@ func TestOCIRepository_reconcileSource_remoteReference(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { obj := &sourcev1.OCIRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "checkout-strategy-", - Generation: 1, - }, + GenerateName: "checkout-strategy-", + Generation: 1, Spec: sourcev1.OCIRepositorySpec{ URL: fmt.Sprintf("oci://%s/podinfo", server.registryHost), Interval: &metav1.Duration{Duration: interval}, @@ -1598,10 +1573,8 @@ func TestOCIRepository_reconcileSource_verifyOCISourceSignatureNotation(t *testi g.Expect(err).NotTo(HaveOccurred()) caSecret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "valid-trust-store", - Generation: 1, - }, + Name: "valid-trust-store", + Generation: 1, Data: map[string][]byte{ "ca.crt": tlsCA, }, @@ -1623,10 +1596,8 @@ func TestOCIRepository_reconcileSource_verifyOCISourceSignatureNotation(t *testi }) obj := &sourcev1.OCIRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "verify-oci-source-signature-", - Generation: 1, - }, + GenerateName: "verify-oci-source-signature-", + Generation: 1, Spec: sourcev1.OCIRepositorySpec{ URL: fmt.Sprintf("oci://%s/podinfo", server.registryHost), Verify: &sourcev1.OCIRepositoryVerification{ @@ -1652,10 +1623,8 @@ func TestOCIRepository_reconcileSource_verifyOCISourceSignatureNotation(t *testi data["trustpolicy.json"] = policy secret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "notation-config-", - }, - Data: data, + GenerateName: "notation-config-", + Data: data, } g.Expect(r.Create(ctx, secret)).NotTo(HaveOccurred()) @@ -1717,10 +1686,8 @@ func TestOCIRepository_reconcileSource_verifyOCISourceSignatureNotation(t *testi signatureMediaType := cose.MediaTypeEnvelope signOptions := notation.SignOptions{ - SignerSignOptions: notation.SignerSignOptions{ - SignatureMediaType: signatureMediaType, - }, - ArtifactReference: artifactRef.String(), + SignatureMediaType: signatureMediaType, + ArtifactReference: artifactRef.String(), } _, err = notation.Sign(ctx, signer, repo, signOptions) @@ -1960,10 +1927,8 @@ func TestOCIRepository_reconcileSource_verifyOCISourceTrustPolicyNotation(t *tes }) obj := &sourcev1.OCIRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "verify-oci-source-signature-", - Generation: 1, - }, + GenerateName: "verify-oci-source-signature-", + Generation: 1, Spec: sourcev1.OCIRepositorySpec{ URL: fmt.Sprintf("oci://%s/podinfo", server.registryHost), Verify: &sourcev1.OCIRepositoryVerification{ @@ -2005,10 +1970,8 @@ func TestOCIRepository_reconcileSource_verifyOCISourceTrustPolicyNotation(t *tes data["notation.crt"] = certTuple.Cert.Raw secret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "notation-", - }, - Data: data, + GenerateName: "notation-", + Data: data, } g.Expect(r.Create(ctx, secret)).NotTo(HaveOccurred()) @@ -2048,10 +2011,8 @@ func TestOCIRepository_reconcileSource_verifyOCISourceTrustPolicyNotation(t *tes signatureMediaType := cose.MediaTypeEnvelope signOptions := notation.SignOptions{ - SignerSignOptions: notation.SignerSignOptions{ - SignatureMediaType: signatureMediaType, - }, - ArtifactReference: artifactRef.String(), + SignatureMediaType: signatureMediaType, + ArtifactReference: artifactRef.String(), } _, err = notation.Sign(ctx, signer, repo, signOptions) @@ -2268,9 +2229,7 @@ func TestOCIRepository_reconcileSource_verifyOCISourceSignatureCosign(t *testing g.Expect(err).ToNot(HaveOccurred()) secret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "cosign-key", - }, + Name: "cosign-key", Data: map[string][]byte{ "cosign.pub": keys.PublicBytes, }} @@ -2278,10 +2237,8 @@ func TestOCIRepository_reconcileSource_verifyOCISourceSignatureCosign(t *testing g.Expect(r.Create(ctx, secret)).NotTo(HaveOccurred()) caSecret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ca-cert-cosign", - Generation: 1, - }, + Name: "ca-cert-cosign", + Generation: 1, Data: map[string][]byte{ "ca.crt": tlsCA, }, @@ -2304,10 +2261,8 @@ func TestOCIRepository_reconcileSource_verifyOCISourceSignatureCosign(t *testing }) obj := &sourcev1.OCIRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "verify-oci-source-signature-", - Generation: 1, - }, + GenerateName: "verify-oci-source-signature-", + Generation: 1, Spec: sourcev1.OCIRepositorySpec{ URL: fmt.Sprintf("oci://%s/podinfo", server.registryHost), Verify: &sourcev1.OCIRepositoryVerification{ @@ -2534,10 +2489,8 @@ func TestOCIRepository_reconcileSource_verifyOCISourceSignature_keyless(t *testi g := NewWithT(t) obj := &sourcev1.OCIRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "verify-oci-source-signature-", - Generation: 1, - }, + GenerateName: "verify-oci-source-signature-", + Generation: 1, Spec: sourcev1.OCIRepositorySpec{ URL: "oci://ghcr.io/stefanprodan/manifests/podinfo", Verify: &sourcev1.OCIRepositoryVerification{ @@ -2626,7 +2579,7 @@ func TestOCIRepository_reconcileSource_noop(t *testing.T) { { name: "full reconcile - same rev, unobserved ignore", beforeFunc: func(obj *sourcev1.OCIRepository) { - obj.Status.ObservedIgnore = ptr.To("aaa") + obj.Status.ObservedIgnore = new("aaa") obj.Status.Artifact = &meta.Artifact{ Revision: testRevision, } @@ -2638,8 +2591,8 @@ func TestOCIRepository_reconcileSource_noop(t *testing.T) { { name: "noop - same rev, observed ignore", beforeFunc: func(obj *sourcev1.OCIRepository) { - obj.Spec.Ignore = ptr.To("aaa") - obj.Status.ObservedIgnore = ptr.To("aaa") + obj.Spec.Ignore = new("aaa") + obj.Status.ObservedIgnore = new("aaa") obj.Status.Artifact = &meta.Artifact{ Revision: testRevision, } @@ -2719,10 +2672,8 @@ func TestOCIRepository_reconcileSource_noop(t *testing.T) { g := NewWithT(t) obj := &sourcev1.OCIRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "noop-", - Generation: 1, - }, + GenerateName: "noop-", + Generation: 1, Spec: sourcev1.OCIRepositorySpec{ URL: fmt.Sprintf("oci://%s/podinfo", server.registryHost), Reference: &sourcev1.OCIRepositoryRef{Tag: "6.1.5"}, @@ -2794,7 +2745,7 @@ func TestOCIRepository_reconcileArtifact(t *testing.T) { targetPath: "testdata/oci/repository", artifact: &meta.Artifact{Revision: "revision"}, beforeFunc: func(obj *sourcev1.OCIRepository) { - obj.Spec.Ignore = ptr.To("foo.txt") + obj.Spec.Ignore = new("foo.txt") }, want: sreconcile.ResultSuccess, assertPaths: []string{ @@ -2834,7 +2785,7 @@ func TestOCIRepository_reconcileArtifact(t *testing.T) { }, beforeFunc: func(obj *sourcev1.OCIRepository) { obj.Status.Artifact = &meta.Artifact{Revision: "revision"} - obj.Spec.Ignore = ptr.To("aaa") + obj.Spec.Ignore = new("aaa") }, want: sreconcile.ResultSuccess, assertPaths: []string{ @@ -2901,10 +2852,10 @@ func TestOCIRepository_reconcileArtifact(t *testing.T) { Revision: "revision", }, beforeFunc: func(obj *sourcev1.OCIRepository) { - obj.Spec.Ignore = ptr.To("aaa") + obj.Spec.Ignore = new("aaa") obj.Spec.LayerSelector = &sourcev1.OCILayerSelector{MediaType: "foo"} obj.Status.Artifact = &meta.Artifact{Revision: "revision"} - obj.Status.ObservedIgnore = ptr.To("aaa") + obj.Status.ObservedIgnore = new("aaa") obj.Status.ObservedLayerSelector = &sourcev1.OCILayerSelector{MediaType: "foo"} }, want: sreconcile.ResultSuccess, @@ -2953,10 +2904,8 @@ func TestOCIRepository_reconcileArtifact(t *testing.T) { _ = resetChmod(tt.targetPath, 0o755, 0o644) obj := &sourcev1.OCIRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "reconcile-artifact-", - Generation: 1, - }, + GenerateName: "reconcile-artifact-", + Generation: 1, } if tt.beforeFunc != nil { tt.beforeFunc(obj) @@ -3114,9 +3063,7 @@ func TestOCIRepository_getArtifactRef(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { obj := &sourcev1.OCIRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "artifact-url-", - }, + GenerateName: "artifact-url-", Spec: sourcev1.OCIRepositorySpec{ URL: tt.url, Interval: &metav1.Duration{Duration: interval}, @@ -3152,10 +3099,8 @@ func TestOCIRepository_invalidURL(t *testing.T) { defer func() { g.Expect(testEnv.Delete(ctx, ns)).To(Succeed()) }() obj := &sourcev1.OCIRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "ocirepository-reconcile", - Namespace: ns.Name, - }, + GenerateName: "ocirepository-reconcile", + Namespace: ns.Name, Spec: sourcev1.OCIRepositorySpec{ URL: "oci://ghcr.io/test/test:v1", Interval: &metav1.Duration{Duration: 60 * time.Minute}, @@ -3194,22 +3139,18 @@ func TestOCIRepository_genericWorkloadIdentity(t *testing.T) { defer func() { g.Expect(testEnv.Delete(ctx, ns)).To(Succeed()) }() err = testEnv.Create(ctx, &corev1.ServiceAccount{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: ns.Name, - Name: "test", - Annotations: map[string]string{ - cryptov1.AnnotationCredentialProvider: cryptov1.CredentialProviderKubernetes, - cryptov1.AnnotationCredentialType: cryptov1.CredentialTypeJWT, - }, + Namespace: ns.Name, + Name: "test", + Annotations: map[string]string{ + cryptov1.AnnotationCredentialProvider: cryptov1.CredentialProviderKubernetes, + cryptov1.AnnotationCredentialType: cryptov1.CredentialTypeJWT, }, }) g.Expect(err).NotTo(HaveOccurred()) obj := &sourcev1.OCIRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "ocirepository-generic-olwi-", - Namespace: ns.Name, - }, + GenerateName: "ocirepository-generic-olwi-", + Namespace: ns.Name, Spec: sourcev1.OCIRepositorySpec{ URL: "oci://ghcr.io/stefanprodan/manifests/podinfo", Interval: &metav1.Duration{Duration: 60 * time.Minute}, @@ -3286,7 +3227,7 @@ func TestOCIRepository_reconcileStorage(t *testing.T) { Revision: "d", Digest: "sha256:18ac3e7343f016890c510e93f935261169d9e3f565436429830faf0934f4f8e4", URL: testStorage.Hostname + "/oci-reconcile-storage/d.txt", - Size: int64p(int64(len("d"))), + Size: new(int64(len("d"))), }, assertPaths: []string{ "/oci-reconcile-storage/d.txt", @@ -3415,7 +3356,7 @@ func TestOCIRepository_reconcileStorage(t *testing.T) { Revision: "f", Digest: "sha256:3b9c358f36f0a31b6ad3e14f309c7cf198ac9246e8316f9ce543d5b19ac02b80", URL: testStorage.Hostname + "/oci-reconcile-storage/hostname.txt", - Size: int64p(int64(len("file"))), + Size: new(int64(len("file"))), }, assertConditions: []metav1.Condition{ *conditions.TrueCondition(meta.ReadyCondition, "foo", "bar"), @@ -3439,10 +3380,8 @@ func TestOCIRepository_reconcileStorage(t *testing.T) { g := NewWithT(t) obj := &sourcev1.OCIRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "test-", - Generation: 1, - }, + GenerateName: "test-", + Generation: 1, } if tt.beforeFunc != nil { @@ -3499,12 +3438,10 @@ func TestOCIRepository_ReconcileDelete(t *testing.T) { } obj := &sourcev1.OCIRepository{ - ObjectMeta: metav1.ObjectMeta{ - Name: "reconcile-delete-", - DeletionTimestamp: &metav1.Time{Time: time.Now()}, - Finalizers: []string{ - sourcev1.SourceFinalizer, - }, + Name: "reconcile-delete-", + DeletionTimestamp: &metav1.Time{Time: time.Now()}, + Finalizers: []string{ + sourcev1.SourceFinalizer, }, Status: sourcev1.OCIRepositoryStatus{}, } @@ -3554,10 +3491,8 @@ func TestOCIRepositoryReconciler_notify(t *testing.T) { } }, wantEvent: &corev1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Annotations: map[string]string{ - fmt.Sprintf("%s/%s", sourcev1.GroupVersion.Group, eventv1.MetaOriginRevisionKey): "6.1.8/b3b00fe35424a45d373bf4c7214178bc36fd7872", - }, + Annotations: map[string]string{ + fmt.Sprintf("%s/%s", sourcev1.GroupVersion.Group, eventv1.MetaOriginRevisionKey): "6.1.8/b3b00fe35424a45d373bf4c7214178bc36fd7872", }, Type: corev1.EventTypeNormal, Reason: sourcev1.NewArtifactReason, @@ -3586,10 +3521,8 @@ func TestOCIRepositoryReconciler_notify(t *testing.T) { conditions.MarkTrue(obj, meta.ReadyCondition, meta.SucceededReason, "ready") }, wantEvent: &corev1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Annotations: map[string]string{ - fmt.Sprintf("%s/%s", sourcev1.GroupVersion.Group, eventv1.MetaOriginRevisionKey): "6.1.8/b3b00fe35424a45d373bf4c7214178bc36fd7872", - }, + Annotations: map[string]string{ + fmt.Sprintf("%s/%s", sourcev1.GroupVersion.Group, eventv1.MetaOriginRevisionKey): "6.1.8/b3b00fe35424a45d373bf4c7214178bc36fd7872", }, Type: corev1.EventTypeNormal, Reason: meta.SucceededReason, @@ -3760,7 +3693,7 @@ func pushMultiplePodinfoImages(serverURL string, insecure bool, versions ...stri } opts = append(opts, crane.WithTransport(transport)) } - for i := 0; i < len(versions); i++ { + for i := range versions { pi, err := createPodinfoImageFromTar(fmt.Sprintf("podinfo-%s.tar", versions[i]), versions[i], serverURL, opts...) if err != nil { return nil, err @@ -3791,34 +3724,34 @@ func TestOCIContentConfigChanged(t *testing.T) { { name: "same ignore, no layer selector", spec: sourcev1.OCIRepositorySpec{ - Ignore: ptr.To("nnn"), + Ignore: new("nnn"), }, status: sourcev1.OCIRepositoryStatus{ - ObservedIgnore: ptr.To("nnn"), + ObservedIgnore: new("nnn"), }, want: false, }, { name: "different ignore, no layer selector", spec: sourcev1.OCIRepositorySpec{ - Ignore: ptr.To("nnn"), + Ignore: new("nnn"), }, status: sourcev1.OCIRepositoryStatus{ - ObservedIgnore: ptr.To("mmm"), + ObservedIgnore: new("mmm"), }, want: true, }, { name: "same ignore, same layer selector", spec: sourcev1.OCIRepositorySpec{ - Ignore: ptr.To("nnn"), + Ignore: new("nnn"), LayerSelector: &sourcev1.OCILayerSelector{ MediaType: "foo", Operation: sourcev1.OCILayerExtract, }, }, status: sourcev1.OCIRepositoryStatus{ - ObservedIgnore: ptr.To("nnn"), + ObservedIgnore: new("nnn"), ObservedLayerSelector: &sourcev1.OCILayerSelector{ MediaType: "foo", Operation: sourcev1.OCILayerExtract, @@ -3829,14 +3762,14 @@ func TestOCIContentConfigChanged(t *testing.T) { { name: "same ignore, different layer selector operation", spec: sourcev1.OCIRepositorySpec{ - Ignore: ptr.To("nnn"), + Ignore: new("nnn"), LayerSelector: &sourcev1.OCILayerSelector{ MediaType: "foo", Operation: sourcev1.OCILayerCopy, }, }, status: sourcev1.OCIRepositoryStatus{ - ObservedIgnore: ptr.To("nnn"), + ObservedIgnore: new("nnn"), ObservedLayerSelector: &sourcev1.OCILayerSelector{ MediaType: "foo", Operation: sourcev1.OCILayerExtract, @@ -3847,14 +3780,14 @@ func TestOCIContentConfigChanged(t *testing.T) { { name: "same ignore, different layer selector mediatype", spec: sourcev1.OCIRepositorySpec{ - Ignore: ptr.To("nnn"), + Ignore: new("nnn"), LayerSelector: &sourcev1.OCILayerSelector{ MediaType: "bar", Operation: sourcev1.OCILayerExtract, }, }, status: sourcev1.OCIRepositoryStatus{ - ObservedIgnore: ptr.To("nnn"), + ObservedIgnore: new("nnn"), ObservedLayerSelector: &sourcev1.OCILayerSelector{ MediaType: "foo", Operation: sourcev1.OCILayerExtract, @@ -3951,17 +3884,17 @@ func Test_verificationMaterialFingerprint(t *testing.T) { func TestOCIRepositoryReconciler_verificationPolicyChanged(t *testing.T) { secret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{Name: "cosign-key", Namespace: "default"}, - Data: map[string][]byte{"cosign.pub": []byte("key")}, + Name: "cosign-key", Namespace: "default", + Data: map[string][]byte{"cosign.pub": []byte("key")}, } rotatedSecret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{Name: "cosign-key", Namespace: "default"}, - Data: map[string][]byte{"cosign.pub": []byte("rotated-key")}, + Name: "cosign-key", Namespace: "default", + Data: map[string][]byte{"cosign.pub": []byte("rotated-key")}, } newObj := func(secretRef *meta.LocalObjectReference, fingerprint string) *sourcev1.OCIRepository { obj := &sourcev1.OCIRepository{ - ObjectMeta: metav1.ObjectMeta{Name: "oci", Namespace: "default"}, + Name: "oci", Namespace: "default", Spec: sourcev1.OCIRepositorySpec{ Verify: &sourcev1.OCIRepositoryVerification{Provider: "cosign"}, }, diff --git a/internal/controller/ocirepository_verify_test.go b/internal/controller/ocirepository_verify_test.go index 1c347027e..7429eab3d 100644 --- a/internal/controller/ocirepository_verify_test.go +++ b/internal/controller/ocirepository_verify_test.go @@ -23,7 +23,6 @@ import ( "github.com/fluxcd/pkg/apis/meta" . "github.com/onsi/gomega" corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "sigs.k8s.io/controller-runtime/pkg/client/fake" ) @@ -45,10 +44,8 @@ func TestReadTrustedRootFromSecret(t *testing.T) { namespace: "default", ref: &meta.LocalObjectReference{Name: "sigstore-root"}, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "sigstore-root", - Namespace: "default", - }, + Name: "sigstore-root", + Namespace: "default", Data: map[string][]byte{ "trusted_root.json": []byte(`{"mediaType":"application/vnd.dev.sigstore.trustedroot+json;version=0.1"}`), }, @@ -66,10 +63,8 @@ func TestReadTrustedRootFromSecret(t *testing.T) { namespace: "default", ref: &meta.LocalObjectReference{Name: "no-key-secret"}, secret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "no-key-secret", - Namespace: "default", - }, + Name: "no-key-secret", + Namespace: "default", Data: map[string][]byte{ "other-key": []byte("data"), }, diff --git a/internal/controller/suite_test.go b/internal/controller/suite_test.go index 8023923fb..56b9294a7 100644 --- a/internal/controller/suite_test.go +++ b/internal/controller/suite_test.go @@ -169,7 +169,7 @@ func setupRegistryServer(ctx context.Context, workspaceDir string, opts registry config.HTTP.Addr = fmt.Sprintf(":%d", port) config.HTTP.DrainTimeout = time.Duration(10) * time.Second - config.Storage = map[string]configuration.Parameters{"inmemory": map[string]interface{}{}} + config.Storage = map[string]configuration.Parameters{"inmemory": map[string]any{}} if opts.withBasicAuth { // create htpasswd file (w BCrypt, which is required) @@ -513,8 +513,9 @@ func randStringRunes(n int) string { return string(b) } +//go:fix inline func int64p(i int64) *int64 { - return &i + return new(i) } func logOCIRepoStatus(t *testing.T, obj *sourcev1.OCIRepository) { diff --git a/internal/error/error.go b/internal/error/error.go index cb3a8cd78..650ffb26a 100644 --- a/internal/error/error.go +++ b/internal/error/error.go @@ -80,13 +80,11 @@ func NewStalling(err error, reason string) *Stalling { // Stalling errors are not returned to the runtime. Log it explicitly. // Since this failure requires user interaction, send warning notification. return &Stalling{ - Reason: reason, - Err: err, - Config: Config{ - Event: corev1.EventTypeWarning, - Log: true, - Notification: true, - }, + Reason: reason, + Err: err, + Event: corev1.EventTypeWarning, + Log: true, + Notification: true, } } @@ -124,10 +122,8 @@ func NewWaiting(err error, reason string) *Waiting { return &Waiting{ Reason: reason, Err: err, - Config: Config{ - Event: corev1.EventTypeNormal, - Log: true, - }, + Event: corev1.EventTypeNormal, + Log: true, } } @@ -157,11 +153,9 @@ func NewGeneric(err error, reason string) *Generic { // Since it's a generic error, it'll be returned to the runtime and logged // automatically, do not log it. Send failure notification. return &Generic{ - Reason: reason, - Err: err, - Config: Config{ - Event: corev1.EventTypeWarning, - Notification: true, - }, + Reason: reason, + Err: err, + Event: corev1.EventTypeWarning, + Notification: true, } } diff --git a/internal/helm/chart/builder_local.go b/internal/helm/chart/builder_local.go index 44399a80a..d9638c559 100644 --- a/internal/helm/chart/builder_local.go +++ b/internal/helm/chart/builder_local.go @@ -146,7 +146,7 @@ func (b *localChartBuilder) Build(ctx context.Context, ref Reference, p string, // Merge chart values, if instructed var ( - mergedValues map[string]interface{} + mergedValues map[string]any valuesFiles []string ) if len(opts.GetValuesFiles()) > 0 { @@ -199,8 +199,8 @@ func (b *localChartBuilder) Build(ctx context.Context, ref Reference, p string, // file is considered an error. If ignoreMissing is true, missing files are ignored. // It returns the merge result and the list of files that contributed to that result, // or an error. -func mergeFileValues(baseDir string, paths []string, ignoreMissing bool) (map[string]interface{}, []string, error) { - mergedValues := make(map[string]interface{}) +func mergeFileValues(baseDir string, paths []string, ignoreMissing bool) (map[string]any, []string, error) { + mergedValues := make(map[string]any) valuesFiles := make([]string, 0, len(paths)) for _, p := range paths { secureP, err := securejoin.SecureJoin(baseDir, p) @@ -222,7 +222,7 @@ func mergeFileValues(baseDir string, paths []string, ignoreMissing bool) (map[st if err != nil { return nil, nil, fmt.Errorf("could not read values from file '%s': %w", p, err) } - values := make(map[string]interface{}) + values := make(map[string]any) err = yaml.Unmarshal(b, &values) if err != nil { return nil, nil, fmt.Errorf("unmarshaling values from '%s' failed: %w", p, err) diff --git a/internal/helm/chart/builder_local_test.go b/internal/helm/chart/builder_local_test.go index cf9d6a742..9b8b5b512 100644 --- a/internal/helm/chart/builder_local_test.go +++ b/internal/helm/chart/builder_local_test.go @@ -285,7 +285,7 @@ func Test_mergeFileValues(t *testing.T) { files []*common.File paths []string ignoreMissing bool - wantValues map[string]interface{} + wantValues map[string]any wantFiles []string wantErr string }{ @@ -297,7 +297,7 @@ func Test_mergeFileValues(t *testing.T) { {Name: "c.yaml", Data: []byte("b: d")}, }, paths: []string{"a.yaml", "b.yaml", "c.yaml"}, - wantValues: map[string]interface{}{ + wantValues: map[string]any{ "a": "b", "b": "d", }, @@ -328,7 +328,7 @@ func Test_mergeFileValues(t *testing.T) { }, paths: []string{"a.yaml", "b.yaml"}, ignoreMissing: true, - wantValues: map[string]interface{}{ + wantValues: map[string]any{ "a": "b", }, wantFiles: []string{"a.yaml"}, @@ -337,7 +337,7 @@ func Test_mergeFileValues(t *testing.T) { name: "all files missing", paths: []string{"a.yaml"}, ignoreMissing: true, - wantValues: map[string]interface{}{}, + wantValues: map[string]any{}, wantFiles: []string{}, }, } diff --git a/internal/helm/chart/builder_remote.go b/internal/helm/chart/builder_remote.go index dbe3addca..2cd76c112 100644 --- a/internal/helm/chart/builder_remote.go +++ b/internal/helm/chart/builder_remote.go @@ -235,8 +235,8 @@ func setBuildMetaData(version, versionMetadata string) (*semver.Version, error) // missing files are ignored. // It returns the merge result and the list of files that contributed to that result, // or an error. -func mergeChartValues(chart *helmchart.Chart, paths []string, ignoreMissing bool) (map[string]interface{}, []string, error) { - mergedValues := make(map[string]interface{}) +func mergeChartValues(chart *helmchart.Chart, paths []string, ignoreMissing bool) (map[string]any, []string, error) { + mergedValues := make(map[string]any) valuesFiles := make([]string, 0, len(paths)) for _, p := range paths { cfn := filepath.Clean(p) @@ -258,7 +258,7 @@ func mergeChartValues(chart *helmchart.Chart, paths []string, ignoreMissing bool } return nil, nil, fmt.Errorf("no values file found at path '%s'", p) } - values := make(map[string]interface{}) + values := make(map[string]any) if err := yaml.Unmarshal(b, &values); err != nil { return nil, nil, fmt.Errorf("unmarshaling values from '%s' failed: %w", p, err) } diff --git a/internal/helm/chart/builder_remote_test.go b/internal/helm/chart/builder_remote_test.go index 4301f0630..bf6534606 100644 --- a/internal/helm/chart/builder_remote_test.go +++ b/internal/helm/chart/builder_remote_test.go @@ -456,7 +456,7 @@ func Test_mergeChartValues(t *testing.T) { chart *helmchart.Chart paths []string ignoreMissing bool - wantValues map[string]interface{} + wantValues map[string]any wantFiles []string wantErr string }{ @@ -470,7 +470,7 @@ func Test_mergeChartValues(t *testing.T) { }, }, paths: []string{"a.yaml", "b.yaml", "c.yaml"}, - wantValues: map[string]interface{}{ + wantValues: map[string]any{ "a": "b", "b": "d", }, @@ -482,12 +482,12 @@ func Test_mergeChartValues(t *testing.T) { Files: []*common.File{ {Name: "c.yaml", Data: []byte("b: d")}, }, - Values: map[string]interface{}{ + Values: map[string]any{ "a": "b", }, }, paths: []string{chartutil.ValuesfileName, "c.yaml"}, - wantValues: map[string]interface{}{ + wantValues: map[string]any{ "a": "b", "b": "d", }, @@ -518,7 +518,7 @@ func Test_mergeChartValues(t *testing.T) { }, paths: []string{"a.yaml", "b.yaml"}, ignoreMissing: true, - wantValues: map[string]interface{}{ + wantValues: map[string]any{ "a": "b", }, wantFiles: []string{"a.yaml"}, @@ -528,19 +528,19 @@ func Test_mergeChartValues(t *testing.T) { chart: &helmchart.Chart{}, paths: []string{"a.yaml"}, ignoreMissing: true, - wantValues: map[string]interface{}{}, + wantValues: map[string]any{}, wantFiles: []string{}, }, { name: "uses chart values ignoring missing file", chart: &helmchart.Chart{ - Values: map[string]interface{}{ + Values: map[string]any{ "a": "b", }, }, paths: []string{chartutil.ValuesfileName, "c.yaml"}, ignoreMissing: true, - wantValues: map[string]interface{}{ + wantValues: map[string]any{ "a": "b", }, wantFiles: []string{chartutil.ValuesfileName}, diff --git a/internal/helm/chart/secureloader/ignore/rules.go b/internal/helm/chart/secureloader/ignore/rules.go index d8054b44d..57858f432 100644 --- a/internal/helm/chart/secureloader/ignore/rules.go +++ b/internal/helm/chart/secureloader/ignore/rules.go @@ -170,10 +170,10 @@ func (r *Rules) parseRule(rule string) error { rule = strings.TrimSuffix(rule, "/") } - if strings.HasPrefix(rule, "/") { + if after, ok := strings.CutPrefix(rule, "/"); ok { // Require path matches the root path. p.match = func(n string, fi os.FileInfo) bool { - rule = strings.TrimPrefix(rule, "/") + rule = after ok, err := filepath.Match(rule, n) if err != nil { log.Printf("Failed to compile %q: %s", rule, err) diff --git a/internal/helm/getter/client_opts_test.go b/internal/helm/getter/client_opts_test.go index 87247b6a8..5d18b9873 100644 --- a/internal/helm/getter/client_opts_test.go +++ b/internal/helm/getter/client_opts_test.go @@ -51,17 +51,13 @@ func TestGetClientOpts(t *testing.T) { { name: "HelmRepository with certSecretRef discards TLS config in secretRef", certSecret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ca-file", - }, + Name: "ca-file", Data: map[string][]byte{ "ca.crt": tlsCA, }, }, authSecret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "auth", - }, + Name: "auth", Data: map[string][]byte{ "username": []byte("user"), "password": []byte("pass"), @@ -75,9 +71,7 @@ func TestGetClientOpts(t *testing.T) { { name: "HelmRepository with TLS config only in secretRef is marked as deprecated", authSecret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "auth-tls", - }, + Name: "auth-tls", Data: map[string][]byte{ "username": []byte("user"), "password": []byte("pass"), @@ -93,9 +87,7 @@ func TestGetClientOpts(t *testing.T) { { name: "OCI HelmRepository with secretRef has auth configured", authSecret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "auth-oci", - }, + Name: "auth-oci", Data: map[string][]byte{ "username": []byte("user"), "password": []byte("pass"), @@ -117,9 +109,7 @@ func TestGetClientOpts(t *testing.T) { { name: "OCI HelmRepository with insecure repository", authSecret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "auth-oci", - }, + Name: "auth-oci", Data: map[string][]byte{ "username": []byte("user"), "password": []byte("pass"), @@ -192,17 +182,13 @@ func TestGetClientOpts_registryTLSLoginOption(t *testing.T) { { name: "with valid caFile", certSecret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ca-file", - }, + Name: "ca-file", Data: map[string][]byte{ "ca.crt": tlsCA, }, }, authSecret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "auth-oci", - }, + Name: "auth-oci", Data: map[string][]byte{ "username": []byte("user"), "password": []byte("pass"), @@ -214,15 +200,11 @@ func TestGetClientOpts_registryTLSLoginOption(t *testing.T) { { name: "without caFile", certSecret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ca-file", - }, + Name: "ca-file", Data: map[string][]byte{}, }, authSecret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "auth-oci", - }, + Name: "auth-oci", Data: map[string][]byte{ "username": []byte("user"), "password": []byte("pass"), @@ -234,9 +216,7 @@ func TestGetClientOpts_registryTLSLoginOption(t *testing.T) { name: "without cert secret", certSecret: nil, authSecret: &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "auth-oci", - }, + Name: "auth-oci", Data: map[string][]byte{ "username": []byte("user"), "password": []byte("pass"), diff --git a/internal/helm/registry/auth_test.go b/internal/helm/registry/auth_test.go index c0e3ffde5..b61d1b523 100644 --- a/internal/helm/registry/auth_test.go +++ b/internal/helm/registry/auth_test.go @@ -123,10 +123,10 @@ func TestLoginOptionFromSecret(t *testing.T) { t.Run(tt.name, func(t *testing.T) { g := NewWithT(t) - secret := corev1.Secret{} - secret.Name = "test-secret" - secret.Data = tt.secretData - secret.Type = tt.secretType + secret := corev1.Secret{ + Name: "test-secret", + Data: tt.secretData, + Type: tt.secretType} _, err := KeychainFromSecret(tt.url, secret) g.Expect(err != nil).To(Equal(tt.wantErr)) diff --git a/internal/helm/repository/chart_repository.go b/internal/helm/repository/chart_repository.go index 4e2f7dfc4..e82f93f90 100644 --- a/internal/helm/repository/chart_repository.go +++ b/internal/helm/repository/chart_repository.go @@ -27,6 +27,7 @@ import ( "net/url" "os" "path" + "slices" "sort" "strings" "sync" @@ -88,19 +89,19 @@ func IndexFromBytes(b []byte) (*repo.IndexFile, error) { } for name, cvs := range i.Entries { - for idx := len(cvs) - 1; idx >= 0; idx-- { - if cvs[idx] == nil { + for idx, cv := range slices.Backward(cvs) { + if cv == nil { cvs = append(cvs[:idx], cvs[idx+1:]...) continue } // When metadata section missing, initialize with no data - if cvs[idx].Metadata == nil { - cvs[idx].Metadata = &chart.Metadata{} + if cv.Metadata == nil { + cv.Metadata = &chart.Metadata{} } - if cvs[idx].APIVersion == "" { - cvs[idx].APIVersion = chart.APIVersionV1 + if cv.APIVersion == "" { + cv.APIVersion = chart.APIVersionV1 } - if err := cvs[idx].Validate(); ignoreSkippableChartValidationError(err) != nil { + if err := cv.Validate(); ignoreSkippableChartValidationError(err) != nil { cvs = append(cvs[:idx], cvs[idx+1:]...) } } @@ -503,7 +504,7 @@ func (r *ChartRepository) VerifyChart(_ context.Context, _ *repo.ChartVersion) ( // // Can potentially be replaced when Helm PR for JSON support has been merged. // xref: https://github.com/helm/helm/pull/12245 -func jsonOrYamlUnmarshal(b []byte, i interface{}) error { +func jsonOrYamlUnmarshal(b []byte, i any) error { if json.Valid(b) { return json.Unmarshal(b, i) } diff --git a/internal/helm/repository/chart_repository_test.go b/internal/helm/repository/chart_repository_test.go index c9aadf8a2..cb41acf68 100644 --- a/internal/helm/repository/chart_repository_test.go +++ b/internal/helm/repository/chart_repository_test.go @@ -94,7 +94,6 @@ func TestIndexFromFile(t *testing.T) { } for _, tt := range tests { - tt := tt t.Run(tt.name, func(t *testing.T) { g := NewWithT(t) @@ -158,7 +157,6 @@ entries: }, } for _, tt := range tests { - tt := tt t.Run(tt.name, func(t *testing.T) { g := NewWithT(t) t.Parallel() @@ -366,7 +364,6 @@ func TestChartRepository_DownloadChart(t *testing.T) { }, } for _, tt := range tests { - tt := tt t.Run(tt.name, func(t *testing.T) { g := NewWithT(t) t.Parallel() diff --git a/internal/helm/repository/oci_chart_repository_test.go b/internal/helm/repository/oci_chart_repository_test.go index b63aef8da..b10f25be6 100644 --- a/internal/helm/repository/oci_chart_repository_test.go +++ b/internal/helm/repository/oci_chart_repository_test.go @@ -255,7 +255,6 @@ func TestOCIChartRepository_DownloadChart(t *testing.T) { } for _, tc := range testCases { - tc := tc t.Run(tc.name, func(t *testing.T) { t.Parallel() diff --git a/internal/index/digest.go b/internal/index/digest.go index 1f7bd642f..de9ea1f8e 100644 --- a/internal/index/digest.go +++ b/internal/index/digest.go @@ -19,6 +19,7 @@ package index import ( "fmt" "io" + "maps" "sort" "strings" "sync" @@ -54,9 +55,7 @@ func WithIndex(i map[string]string) DigesterOption { if d.index == nil { d.index = make(map[string]string, len(i)) } - for k, v := range i { - d.index[k] = v - } + maps.Copy(d.index, i) d.reset() } } @@ -118,9 +117,7 @@ func (i *Digester) Index() map[string]string { defer i.mu.RUnlock() index := make(map[string]string, len(i.index)) - for k, v := range i.index { - index[k] = v - } + maps.Copy(index, i.index) return index } diff --git a/internal/mock/s3/server.go b/internal/mock/s3/server.go index ae5835308..b5e0644fa 100644 --- a/internal/mock/s3/server.go +++ b/internal/mock/s3/server.go @@ -103,17 +103,17 @@ func (s *Server) handler(w http.ResponseWriter, r *http.Request) { return } - contents := "" + var contents strings.Builder for _, o := range s.Objects { etag := md5.Sum(o.Content) - contents += fmt.Sprintf(` + contents.WriteString(fmt.Sprintf(` %s %s %d "%x" STANDARD - `, o.Key, o.LastModified.UTC().Format(time.RFC3339), len(o.Content), etag) + `, o.Key, o.LastModified.UTC().Format(time.RFC3339), len(o.Content), etag)) } fmt.Fprintf(w, ` @@ -127,7 +127,7 @@ func (s *Server) handler(w http.ResponseWriter, r *http.Request) { false %s - `, s.BucketName, len(s.Objects), contents) + `, s.BucketName, len(s.Objects), contents.String()) default: if !strings.HasPrefix(r.URL.Path, "/"+s.BucketName+"/") { writeError(w, r, http.StatusNotFound, "NoSuchBucket", "The specified bucket does not exist") diff --git a/internal/oci/notation/notation_test.go b/internal/oci/notation/notation_test.go index 1a547617d..3a3b2fa61 100644 --- a/internal/oci/notation/notation_test.go +++ b/internal/oci/notation/notation_test.go @@ -654,7 +654,7 @@ func TestRemoteRepoAuthTokenReuse(t *testing.T) { // setting the scope hint on the context exactly like the ORAS repository // methods do during verification. doRequests := func(client *oauth.Client, n int) { - for i := 0; i < n; i++ { + for range n { ctx := oauth.WithScopesForHost(context.Background(), host, scope) req, err := http.NewRequestWithContext(ctx, http.MethodGet, fmt.Sprintf("%s/v2/%s/manifests/latest", baseURL, repository), nil) @@ -787,15 +787,15 @@ func (t *testLogger) Enabled(level int) bool { return true } -func (t *testLogger) Info(level int, msg string, keysAndValues ...interface{}) { +func (t *testLogger) Info(level int, msg string, keysAndValues ...any) { t.doLog(msg) } -func (t *testLogger) Error(err error, msg string, keysAndValues ...interface{}) { +func (t *testLogger) Error(err error, msg string, keysAndValues ...any) { t.doLog(msg) } -func (t *testLogger) WithValues(keysAndValues ...interface{}) logr.LogSink { +func (t *testLogger) WithValues(keysAndValues ...any) logr.LogSink { return t } diff --git a/internal/reconcile/event.go b/internal/reconcile/event.go index 57ebf4eb4..cfb800b27 100644 --- a/internal/reconcile/event.go +++ b/internal/reconcile/event.go @@ -39,7 +39,7 @@ import ( // The action identifies the reconcile stage that produced the event and is // recorded in the event's action field. Callers pass the relevant // sourcev1.Action for the stage. -func EventLogf(ctx context.Context, rec events.Recorder, obj runtime.Object, eventType string, reason string, action sourcev1.Action, messageFmt string, args ...interface{}) { +func EventLogf(ctx context.Context, rec events.Recorder, obj runtime.Object, eventType string, reason string, action sourcev1.Action, messageFmt string, args ...any) { msg := fmt.Sprintf(messageFmt, args...) if eventType == corev1.EventTypeWarning { ctrl.LoggerFrom(ctx).Error(errors.New(reason), msg) diff --git a/internal/reconcile/reconcile_test.go b/internal/reconcile/reconcile_test.go index e22f370b5..ef3978d4c 100644 --- a/internal/reconcile/reconcile_test.go +++ b/internal/reconcile/reconcile_test.go @@ -174,9 +174,7 @@ func TestComputeReconcileResult(t *testing.T) { }, recErr: &serror.Generic{ Err: fmt.Errorf("some error"), Reason: "some reason", - Config: serror.Config{ - Ignore: true, - }, + Ignore: true, }, wantResult: ctrl.Result{RequeueAfter: testSuccessInterval}, afterFunc: func(t *WithT, obj conditions.Setter, patchOpts *patch.HelperOptions) { diff --git a/internal/reconcile/summarize/matchers_test.go b/internal/reconcile/summarize/matchers_test.go index b71aa99c8..ea09a82ea 100644 --- a/internal/reconcile/summarize/matchers_test.go +++ b/internal/reconcile/summarize/matchers_test.go @@ -39,7 +39,7 @@ type haveStatusObservedGeneration struct { actual int64 } -func (m *haveStatusObservedGeneration) Match(actual interface{}) (success bool, err error) { +func (m *haveStatusObservedGeneration) Match(actual any) (success bool, err error) { obj, ok := actual.(runtime.Object) if !ok { return false, fmt.Errorf("actual should be a runtime object") @@ -54,11 +54,11 @@ func (m *haveStatusObservedGeneration) Match(actual interface{}) (success bool, return Equal(m.expected).Match(og) } -func (m *haveStatusObservedGeneration) FailureMessage(actual interface{}) (message string) { +func (m *haveStatusObservedGeneration) FailureMessage(actual any) (message string) { return fmt.Sprintf("expected\n\t%d\nto match\n\t%d\n", m.actual, m.expected) } -func (m *haveStatusObservedGeneration) NegatedFailureMessage(actual interface{}) (message string) { +func (m *haveStatusObservedGeneration) NegatedFailureMessage(actual any) (message string) { return fmt.Sprintf("expected\n\t%d\nto not match\n\t%d\n", m.actual, m.expected) } @@ -75,7 +75,7 @@ type haveStatusLastHandledReconcileAt struct { actual string } -func (m *haveStatusLastHandledReconcileAt) Match(actual interface{}) (success bool, err error) { +func (m *haveStatusLastHandledReconcileAt) Match(actual any) (success bool, err error) { obj, ok := actual.(runtime.Object) if !ok { return false, fmt.Errorf("actual should be a runtime object") @@ -90,10 +90,10 @@ func (m *haveStatusLastHandledReconcileAt) Match(actual interface{}) (success bo return Equal(m.expected).Match(ra) } -func (m *haveStatusLastHandledReconcileAt) FailureMessage(actual interface{}) (message string) { +func (m *haveStatusLastHandledReconcileAt) FailureMessage(actual any) (message string) { return fmt.Sprintf("expected\n\t%s\nto match\n\t%s\n", m.actual, m.expected) } -func (m *haveStatusLastHandledReconcileAt) NegatedFailureMessage(actual interface{}) (message string) { +func (m *haveStatusLastHandledReconcileAt) NegatedFailureMessage(actual any) (message string) { return fmt.Sprintf("expected\n\t%s\nto not match\n\t%s\n", m.actual, m.expected) } diff --git a/internal/reconcile/summarize/processor.go b/internal/reconcile/summarize/processor.go index 2b1fdddb6..4dda3c508 100644 --- a/internal/reconcile/summarize/processor.go +++ b/internal/reconcile/summarize/processor.go @@ -72,7 +72,7 @@ func ErrorActionHandler(ctx context.Context, recorder events.Recorder, obj clien } // logError logs error based on the passed error configurations. -func logError(ctx context.Context, eventType string, err error, msg string, keysAndValues ...interface{}) { +func logError(ctx context.Context, eventType string, err error, msg string, keysAndValues ...any) { switch eventType { case corev1.EventTypeNormal, serror.EventTypeNone: ctrl.LoggerFrom(ctx).Info(msg, keysAndValues...) diff --git a/internal/reconcile/summarize/processor_test.go b/internal/reconcile/summarize/processor_test.go index d7af0a00f..652516b14 100644 --- a/internal/reconcile/summarize/processor_test.go +++ b/internal/reconcile/summarize/processor_test.go @@ -21,7 +21,6 @@ import ( "testing" . "github.com/onsi/gomega" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/controller-runtime/pkg/client" "github.com/fluxcd/pkg/apis/meta" @@ -109,9 +108,7 @@ func TestRecordReconcileReq(t *testing.T) { g := NewWithT(t) obj := &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "test-obj", - }, + GenerateName: "test-obj", } if tt.beforeFunc != nil { diff --git a/internal/reconcile/summarize/summary_test.go b/internal/reconcile/summarize/summary_test.go index c9acbca38..afbf9312c 100644 --- a/internal/reconcile/summarize/summary_test.go +++ b/internal/reconcile/summarize/summary_test.go @@ -328,10 +328,8 @@ func TestSummarizeAndPatch(t *testing.T) { g.Expect(sourcev1.AddToScheme(scheme)).To(Succeed()) obj := &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "test-", - Generation: tt.generation, - }, + GenerateName: "test-", + Generation: tt.generation, Spec: sourcev1.GitRepositorySpec{ Interval: metav1.Duration{Duration: 5 * time.Second}, }, @@ -458,9 +456,7 @@ func TestSummarizeAndPatch_Intermediate(t *testing.T) { Build() obj := &sourcev1.GitRepository{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: "test-", - }, + GenerateName: "test-", Spec: sourcev1.GitRepositorySpec{ Interval: metav1.Duration{Duration: interval}, }, diff --git a/internal/util/temp_test.go b/internal/util/temp_test.go index 2f98079c6..a5e85fc38 100644 --- a/internal/util/temp_test.go +++ b/internal/util/temp_test.go @@ -23,7 +23,6 @@ import ( . "github.com/onsi/gomega" corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/controller-runtime/pkg/client" ) @@ -75,12 +74,8 @@ func Test_pattern(t *testing.T) { func mockObj() client.Object { return &corev1.Secret{ - TypeMeta: metav1.TypeMeta{ - Kind: "Secret", - }, - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "default", - }, + Kind: "Secret", + Name: "foo", + Namespace: "default", } } diff --git a/main.go b/main.go index 7379b1346..7720169f7 100644 --- a/main.go +++ b/main.go @@ -32,7 +32,6 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" clientgoscheme "k8s.io/client-go/kubernetes/scheme" _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" - "k8s.io/utils/ptr" ctrl "sigs.k8s.io/controller-runtime" ctrlcache "sigs.k8s.io/controller-runtime/pkg/cache" ctrlclient "sigs.k8s.io/controller-runtime/pkg/client" @@ -461,7 +460,7 @@ func mustSetupManager(metricsAddr, healthAddr string, maxConcurrent int, ExtraHandlers: pprof.GetHandlers(), }, Controller: ctrlcfg.Controller{ - RecoverPanic: ptr.To(true), + RecoverPanic: new(true), MaxConcurrentReconciles: maxConcurrent, }, } diff --git a/tests/registry/registry.go b/tests/registry/registry.go index 28b36fd20..b8a550d17 100644 --- a/tests/registry/registry.go +++ b/tests/registry/registry.go @@ -51,7 +51,7 @@ func New(t *testing.T) string { config := &configuration.Configuration{} config.HTTP.Addr = addr config.HTTP.DrainTimeout = time.Duration(10) * time.Second - config.Storage = map[string]configuration.Parameters{"inmemory": map[string]interface{}{}} + config.Storage = map[string]configuration.Parameters{"inmemory": map[string]any{}} config.Log.AccessLog.Disabled = true config.Log.Level = "error" logrus.SetOutput(io.Discard)