Add test for RESTMapper with CRD/CR
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
This commit is contained in:
		
							parent
							
								
									8b6f4bc6e9
								
							
						
					
					
						commit
						12b3acbaaa
					
				|  | @ -22,9 +22,11 @@ import ( | |||
| 	"testing" | ||||
| 	"time" | ||||
| 
 | ||||
| 	runtimeClient "github.com/fluxcd/pkg/runtime/client" | ||||
| 	. "github.com/onsi/gomega" | ||||
| 	apierrors "k8s.io/apimachinery/pkg/api/errors" | ||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||
| 	"k8s.io/apimachinery/pkg/runtime/schema" | ||||
| 	"k8s.io/apimachinery/pkg/types" | ||||
| 	"sigs.k8s.io/controller-runtime/pkg/client" | ||||
| 	"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" | ||||
|  | @ -368,3 +370,79 @@ data: {} | |||
| 	g.Expect(msg). | ||||
| 		To(ContainSubstring("failed to evaluate the CEL expression 'has(data.foo.bar)': no such attribute(s): data.foo.bar")) | ||||
| } | ||||
| 
 | ||||
| func TestKustomizationReconciler_RESTMapper(t *testing.T) { | ||||
| 	g := NewWithT(t) | ||||
| 	id := "rm-" + randStringRunes(5) | ||||
| 	resultK := &kustomizev1.Kustomization{} | ||||
| 
 | ||||
| 	restMapper, err := runtimeClient.NewDynamicRESTMapper(testEnv.Config) | ||||
| 	g.Expect(err).NotTo(HaveOccurred()) | ||||
| 
 | ||||
| 	err = createNamespace(id) | ||||
| 	g.Expect(err).NotTo(HaveOccurred(), "failed to create test namespace") | ||||
| 
 | ||||
| 	err = createKubeConfigSecret(id) | ||||
| 	g.Expect(err).NotTo(HaveOccurred(), "failed to create kubeconfig secret") | ||||
| 
 | ||||
| 	artifactName := "val-" + randStringRunes(5) | ||||
| 	artifactChecksum, err := testServer.ArtifactFromDir("testdata/restmapper", artifactName) | ||||
| 	g.Expect(err).ToNot(HaveOccurred()) | ||||
| 
 | ||||
| 	repositoryName := types.NamespacedName{ | ||||
| 		Name:      fmt.Sprintf("val-%s", randStringRunes(5)), | ||||
| 		Namespace: id, | ||||
| 	} | ||||
| 
 | ||||
| 	err = applyGitRepository(repositoryName, artifactName, "main/"+artifactChecksum) | ||||
| 	g.Expect(err).NotTo(HaveOccurred()) | ||||
| 
 | ||||
| 	kustomization := &kustomizev1.Kustomization{} | ||||
| 	kustomization.Name = id | ||||
| 	kustomization.Namespace = id | ||||
| 	kustomization.Spec = kustomizev1.KustomizationSpec{ | ||||
| 		Interval: metav1.Duration{Duration: 10 * time.Minute}, | ||||
| 		Prune:    true, | ||||
| 		Path:     "./", | ||||
| 		Wait:     true, | ||||
| 		SourceRef: kustomizev1.CrossNamespaceSourceReference{ | ||||
| 			Name:      repositoryName.Name, | ||||
| 			Namespace: repositoryName.Namespace, | ||||
| 			Kind:      sourcev1.GitRepositoryKind, | ||||
| 		}, | ||||
| 		KubeConfig: &meta.KubeConfigReference{ | ||||
| 			SecretRef: meta.SecretKeyReference{ | ||||
| 				Name: "kubeconfig", | ||||
| 			}, | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	g.Expect(k8sClient.Create(context.Background(), kustomization)).To(Succeed()) | ||||
| 
 | ||||
| 	g.Eventually(func() bool { | ||||
| 		_ = k8sClient.Get(context.Background(), client.ObjectKeyFromObject(kustomization), resultK) | ||||
| 		return isReconcileSuccess(resultK) && resultK.Status.LastAttemptedRevision == "main/"+artifactChecksum | ||||
| 	}, timeout, time.Second).Should(BeTrue()) | ||||
| 
 | ||||
| 	t.Run("discovers newly registered CRD and preferred version", func(t *testing.T) { | ||||
| 		mapping, err := restMapper.RESTMapping(schema.GroupKind{Kind: "ClusterCleanupPolicy", Group: "kyverno.io"}) | ||||
| 		g.Expect(err).NotTo(HaveOccurred()) | ||||
| 		g.Expect(mapping.Resource.Version).To(Equal("v2")) | ||||
| 	}) | ||||
| 
 | ||||
| 	t.Run("finalizes object", func(t *testing.T) { | ||||
| 		g.Expect(k8sClient.Delete(context.Background(), resultK)).To(Succeed()) | ||||
| 
 | ||||
| 		g.Eventually(func() bool { | ||||
| 			err = k8sClient.Get(context.Background(), client.ObjectKeyFromObject(kustomization), resultK) | ||||
| 			return apierrors.IsNotFound(err) | ||||
| 		}, timeout, time.Second).Should(BeTrue()) | ||||
| 	}) | ||||
| 
 | ||||
| 	t.Run("discovery fails for deleted CRD", func(t *testing.T) { | ||||
| 		newMapper, err := runtimeClient.NewDynamicRESTMapper(testEnv.Config) | ||||
| 		g.Expect(err).NotTo(HaveOccurred()) | ||||
| 		_, err = newMapper.RESTMapping(schema.GroupKind{Kind: "ClusterCleanupPolicy", Group: "kyverno.io"}) | ||||
| 		g.Expect(err).To(HaveOccurred()) | ||||
| 	}) | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,22 @@ | |||
| apiVersion: kyverno.io/v2 | ||||
| kind: ClusterCleanupPolicy | ||||
| metadata: | ||||
|   name: test-cluster-cleanup-policy | ||||
| spec: | ||||
|   conditions: | ||||
|     all: | ||||
|       - key: '{{ time_since('''', ''{{ target.metadata.creationTimestamp }}'', '''') }}' | ||||
|         operator: GreaterThan | ||||
|         value: 168h | ||||
|   match: | ||||
|     any: | ||||
|       - resources: | ||||
|           annotations: | ||||
|             openshift.io/description: review-* | ||||
|             openshift.io/requester: system:serviceaccount:* | ||||
|           kinds: | ||||
|             - Namespace | ||||
|           selector: | ||||
|             matchLabels: | ||||
|               test/project-name: "review" | ||||
|   schedule: '*/5 * * * *' | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue