github.com/gocrane/crane@v0.11.0/pkg/utils/pod_template_test.go (about)

     1  package utils
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	appsv1 "k8s.io/api/apps/v1"
     8  	corev1 "k8s.io/api/core/v1"
     9  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    10  	"sigs.k8s.io/controller-runtime/pkg/client"
    11  	fakeClient "sigs.k8s.io/controller-runtime/pkg/client/fake"
    12  )
    13  
    14  func TestGetPodTemplate(t *testing.T) {
    15  	ctx := context.TODO()
    16  	testNamespace := "test-namespace"
    17  	testName := "test-name"
    18  	testImage := "test-image"
    19  	testCases := []struct {
    20  		object     client.Object
    21  		kind       string
    22  		apiVersion string
    23  	}{
    24  		{
    25  			object: &appsv1.Deployment{
    26  				ObjectMeta: metav1.ObjectMeta{
    27  					Namespace: testNamespace,
    28  					Name:      testName,
    29  				},
    30  				Spec: appsv1.DeploymentSpec{
    31  					Template: corev1.PodTemplateSpec{
    32  						Spec: corev1.PodSpec{
    33  							Containers: []corev1.Container{
    34  								{
    35  									Image: testImage,
    36  								},
    37  							},
    38  						},
    39  					},
    40  				},
    41  			},
    42  			kind:       "Deployment",
    43  			apiVersion: "apps/v1",
    44  		},
    45  		{
    46  			object: &appsv1.StatefulSet{
    47  				ObjectMeta: metav1.ObjectMeta{
    48  					Namespace: testNamespace,
    49  					Name:      testName,
    50  				},
    51  				Spec: appsv1.StatefulSetSpec{
    52  					Template: corev1.PodTemplateSpec{
    53  						Spec: corev1.PodSpec{
    54  							Containers: []corev1.Container{
    55  								{
    56  									Image: testImage,
    57  								},
    58  							},
    59  						},
    60  					},
    61  				},
    62  			},
    63  			kind:       "StatefulSet",
    64  			apiVersion: "apps/v1",
    65  		},
    66  		{
    67  			object: &appsv1.DaemonSet{
    68  				ObjectMeta: metav1.ObjectMeta{
    69  					Namespace: testNamespace,
    70  					Name:      testName,
    71  				},
    72  				Spec: appsv1.DaemonSetSpec{
    73  					Template: corev1.PodTemplateSpec{
    74  						Spec: corev1.PodSpec{
    75  							Containers: []corev1.Container{
    76  								{
    77  									Image: testImage,
    78  								},
    79  							},
    80  						},
    81  					},
    82  				},
    83  			},
    84  			kind:       "DaemonSet",
    85  			apiVersion: "apps/v1",
    86  		},
    87  	}
    88  
    89  	for _, tc := range testCases {
    90  		fakeClient := fakeClient.NewClientBuilder().WithObjects(tc.object).Build()
    91  		podTemplate, err := GetPodTemplate(ctx, testNamespace, testName, tc.kind, tc.apiVersion, fakeClient)
    92  		if err != nil {
    93  			t.Errorf("get pod template error: %v", err)
    94  		}
    95  		if len(podTemplate.Spec.Containers) == 1 && podTemplate.Spec.Containers[0].Image != testImage {
    96  			t.Errorf("the container image of pod template is inconsistent: expect %s, actual is %s", testImage, podTemplate.Spec.Containers[0].Image)
    97  		}
    98  	}
    99  }