Skip to content

Commit

Permalink
added more test cases
Browse files Browse the repository at this point in the history
Signed-off-by: Disaiah Bennett <[email protected]>
  • Loading branch information
dislbenn committed May 23, 2024
1 parent 22cc923 commit 5ac9a35
Show file tree
Hide file tree
Showing 2 changed files with 206 additions and 32 deletions.
236 changes: 205 additions & 31 deletions controllers/discoveredcluster_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,17 @@ package controllers

import (
"context"
"fmt"
"os"
"path/filepath"
"testing"

klusterletconfigv1alpha1 "github.com/stolostron/cluster-lifecycle-api/klusterletconfig/v1alpha1"
discovery "github.com/stolostron/discovery/api/v1"
agentv1 "github.com/stolostron/klusterlet-addon-controller/pkg/apis/agent/v1"
corev1 "k8s.io/api/core/v1"
apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
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/apimachinery/pkg/types"
Expand All @@ -38,6 +41,8 @@ var r = &DiscoveredClusterReconciler{
Client: fake.NewClientBuilder().Build(),
}

var crdDir = "../test/resources/"

func registerScheme() {
clusterapiv1.AddToScheme(scheme.Scheme)
discovery.AddToScheme(scheme.Scheme)
Expand All @@ -46,6 +51,43 @@ func registerScheme() {
klusterletconfigv1alpha1.AddToScheme(scheme.Scheme)
}

func deployCRDs(directory string) error {
files, err := os.ReadDir(directory)

if err != nil {
return fmt.Errorf("failed to read directory %s: %v", directory, err)
}

for _, f := range files {
if f.IsDir() {
continue
}

filePath := filepath.Join(directory, f.Name())
crdFile, err := os.ReadFile(filePath)
if err != nil {
return fmt.Errorf("failed to read CRD YAML file: %v", err)
}

crd := &unstructured.Unstructured{}
if err := yaml.Unmarshal(crdFile, crd); err != nil {
return fmt.Errorf("failed to unmarshal CRD YAML file: %v", err)
}

if err := r.Get(context.TODO(), types.NamespacedName{Name: crd.GetName()}, crd); err != nil {
if apierrors.IsNotFound(err) {
if err := r.Create(context.TODO(), crd); err != nil {
return fmt.Errorf("failed to create CRD: %v", err)
}

} else {
return fmt.Errorf("failed to get CRD: %v", err)
}
}
}
return nil
}

func Test_DiscoveredCluster_Reconciler_Reconcile(t *testing.T) {
tests := []struct {
name string
Expand Down Expand Up @@ -105,17 +147,11 @@ func Test_DiscoveredCluster_Reconciler_Reconcile(t *testing.T) {
},
}

crdFile, err := os.ReadFile("../test/resources/klusterletaddonconfig-crd.yaml")
if err != nil {
t.Errorf("failed to read CRD YAML file: %v", err)
}

crd := unstructured.Unstructured{}
if err := yaml.Unmarshal(crdFile, &crd); err != nil {
t.Errorf("failed to unmarshal CRD YAML file: %v", err)
registerScheme()
if err := deployCRDs(crdDir); err != nil {
t.Errorf("failed to deploy CRDs: %v", err)
}

registerScheme()
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ns := &corev1.Namespace{}
Expand Down Expand Up @@ -151,10 +187,6 @@ func Test_DiscoveredCluster_Reconciler_Reconcile(t *testing.T) {
t.Errorf("failed to create DiscoveredCluster: %v", err)
}

if err := r.Create(context.TODO(), &crd); err != nil {
t.Errorf("failed to create KlusterletAddonConfig: %v", err)
}

if _, err := r.Reconcile(context.TODO(), tt.req); err != nil {
t.Errorf("error: %v", err)
}
Expand Down Expand Up @@ -506,24 +538,8 @@ func Test_Reconciler_EnsureCommonResources(t *testing.T) {
}

registerScheme()
crdFile, err := os.ReadFile("../test/resources/klusterletaddonconfig-crd.yaml")
if err != nil {
t.Errorf("failed to read CRD YAML file: %v", err)
}

kacCRD := unstructured.Unstructured{}
if err := yaml.Unmarshal(crdFile, &kacCRD); err != nil {
t.Errorf("failed to unmarshal CRD YAML file: %v", err)
}

crdFile, err = os.ReadFile("../test/resources/klusterletconfig-crd.yaml")
if err != nil {
t.Errorf("failed to read CRD YAML file: %v", err)
}

kcCRD := unstructured.Unstructured{}
if err := yaml.Unmarshal(crdFile, &kcCRD); err != nil {
t.Errorf("failed to unmarshal CRD YAML file: %v", err)
if err := deployCRDs(crdDir); err != nil {
t.Errorf("failed to deploy CRDs: %v", err)
}

for _, tt := range tests {
Expand Down Expand Up @@ -700,6 +716,74 @@ func Test_Reconciler_EnsureManagedCluster(t *testing.T) {
}
}

func Test_Reconciler_EnsureMultiClusterEngineHCP(t *testing.T) {
tests := []struct {
name string
dc *discovery.DiscoveredCluster
want bool
}{
{
name: "should ensure MultiClusterEngineHCP created",
dc: &discovery.DiscoveredCluster{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
Namespace: "bar",
},
Spec: discovery.DiscoveredClusterSpec{
DisplayName: "foo",
Type: "MultiClusterEngineHCP",
},
},
want: true,
},
}

registerScheme()
if err := deployCRDs(crdDir); err != nil {
t.Errorf("failed to deploy CRDs: %v", err)
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
kc := &klusterletconfigv1alpha1.KlusterletConfig{}
kac := &agentv1.KlusterletAddonConfig{}
mc := &clusterapiv1.ManagedCluster{}

defer func() {
if err := r.Delete(context.TODO(), mc); err != nil {
t.Errorf("failed to delete ManagedCluster: %v", err)
}

if err := r.Delete(context.TODO(), kc); err != nil {
t.Errorf("failed to delete KlusterletConfig: %v", err)
}

if err := r.Delete(context.TODO(), kac); err != nil {
t.Errorf("failed to delete KlusterletAddOnConfig: %v", err)
}
}()

if _, err := r.EnsureMultiClusterEngineHCP(context.TODO(), tt.dc); err != nil {
t.Errorf("failed to ensure MCE-HCP resources created: %v", err)
}

if err := r.Get(context.TODO(), types.NamespacedName{Name: tt.dc.Spec.DisplayName}, mc); err != nil {
t.Errorf("failed to get MCE-HCP ManagedCluster resource: %v", err)
}

if err := r.Get(context.TODO(), types.NamespacedName{Name: tt.dc.GetNamespace() + "-config"},
kc); err != nil {
t.Errorf("failed to get MCE-HCP KlusterletConfig resource: %v", err)
}

if err := r.Get(context.TODO(), types.NamespacedName{Name: tt.dc.Spec.DisplayName,
Namespace: tt.dc.Spec.DisplayName}, kac); err != nil {
t.Errorf("failed to get MCE-HCP KlusterletAddOnConfig resource: %v", err)
}
})
}
}

func Test_Reconciler_EnsureNamespaceForDiscoveredCluster(t *testing.T) {
tests := []struct {
name string
Expand Down Expand Up @@ -744,6 +828,96 @@ func Test_Reconciler_EnsureNamespaceForDiscoveredCluster(t *testing.T) {
}
}

func Test_Reconciler_EnsureROSA(t *testing.T) {
tests := []struct {
name string
dc *discovery.DiscoveredCluster
sec *corev1.Secret
want bool
}{
{
name: "should ensure namespace created for DiscoveredCluster",
dc: &discovery.DiscoveredCluster{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
Namespace: "bar",
},
Spec: discovery.DiscoveredClusterSpec{
Credential: corev1.ObjectReference{
Name: "admin",
Namespace: "bar",
},
DisplayName: "foo",
Type: "ROSA",
},
},
sec: &corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: "admin",
Namespace: "bar",
},
Data: map[string][]byte{
"ocmAPIToken": []byte("fake-token"),
},
},
want: true,
},
}

registerScheme()
if err := deployCRDs(crdDir); err != nil {
t.Errorf("failed to deploy CRDs: %v", err)
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
kac := &agentv1.KlusterletAddonConfig{}
mc := &clusterapiv1.ManagedCluster{}
autoSec := &corev1.Secret{}

defer func() {
if err := r.Delete(context.TODO(), tt.sec); err != nil {
t.Errorf("failed to delete Secret: %v", err)
}

if err := r.Delete(context.TODO(), mc); err != nil {
t.Errorf("failed to delete ManagedCluster: %v", err)
}

if err := r.Delete(context.TODO(), kac); err != nil {
t.Errorf("failed to delete KlusterletAddOnConfig: %v", err)
}

if err := r.Delete(context.TODO(), autoSec); err != nil {
t.Errorf("failed to delete Secret: %v", err)
}
}()

if err := r.Create(context.TODO(), tt.sec); err != nil {
t.Errorf("failed to ensure ROSA resources created: %v", err)
}

if _, err := r.EnsureROSA(context.TODO(), tt.dc); err != nil {
t.Errorf("failed to ensure ROSA resources created: %v", err)
}

if err := r.Get(context.TODO(), types.NamespacedName{Name: tt.dc.Spec.DisplayName}, mc); err != nil {
t.Errorf("failed to get ROSA ManagedCluster resource: %v", err)
}

if err := r.Get(context.TODO(), types.NamespacedName{Name: tt.dc.Spec.DisplayName,
Namespace: tt.dc.Spec.DisplayName}, kac); err != nil {
t.Errorf("failed to get ROSA KlusterletAddOnConfig resource: %v", err)
}

if err := r.Get(context.TODO(), types.NamespacedName{Name: "auto-import-secret",
Namespace: tt.dc.Spec.DisplayName}, autoSec); err != nil {
t.Errorf("failed to get ROSA AutoImportSecret resource: %v", err)
}
})
}
}

func Test_Reconciler_ShouldReconcile(t *testing.T) {
tests := []struct {
name string
Expand Down
2 changes: 1 addition & 1 deletion test/e2e/discovery_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ const (
SecretName = "test-connection-secret"
TestserverName = "mock-ocm-server"

timeout = time.Second * 45
timeout = time.Second * 60
interval = time.Millisecond * 250
)

Expand Down

0 comments on commit 5ac9a35

Please sign in to comment.