package envctl import ( "context" "fmt" "slices" "strings" "maps" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/client" ) func (s *Suite) TestConfigMapReplication() { s.NoError(confiMapsExists(s.ctx, s.Client)) keys := maps.Keys(configMapMapping) configMapKeys := strings.Join(slices.Collect(keys), ",") ns := &corev1.Namespace{ TypeMeta: metav1.TypeMeta{ APIVersion: "v1", Kind: "Namespace", }, ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("cm-%s", s.UniqueName), Annotations: map[string]string{ CMNamespaceAnnotation: configMapKeys, }, }, } s.NoError(s.Client.Create(s.ctx, ns)) for nn := range maps.Values(configMapMapping) { var err error s.Eventually(func() bool { err = s.assertConfigMapEqual(nn, types.NamespacedName{Namespace: ns.Name, Name: nn.Name}) return err == nil }, s.timeout, s.tick, "configmaps not equal: %v", err) } } func (s *Suite) assertConfigMapEqual(expected, actual types.NamespacedName) error { expectedCM := &corev1.ConfigMap{} actualCM := &corev1.ConfigMap{} err := s.Client.Get(s.ctx, expected, expectedCM) if err != nil { return err } err = s.Client.Get(s.ctx, actual, actualCM) if err != nil { return err } if !s.Equal(expectedCM.Data, actualCM.Data) { return fmt.Errorf("replicated configmap does not equal original configmap: %v", actual) } if actualCM.Annotations[CMReplicatedAnnotation] == "" { return fmt.Errorf("replicated configmap does have generated annotation: %v", actual) } return nil } func confiMapsExists(ctx context.Context, cl client.Client) error { for _, nn := range configMapMapping { cm := &corev1.ConfigMap{ TypeMeta: metav1.TypeMeta{ APIVersion: "v1", Kind: "ConfigMap", }, ObjectMeta: metav1.ObjectMeta{ Name: nn.Name, Namespace: nn.Namespace, }, Data: map[string]string{ "foo": "bar", }, } err := client.IgnoreAlreadyExists(cl.Create(ctx, cm)) if err != nil { return err } } return nil }