256 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			256 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Go
		
	
	
	
package util
 | 
						|
 | 
						|
import (
 | 
						|
	"reflect"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 | 
						|
)
 | 
						|
 | 
						|
func TestMergeAnnotation(t *testing.T) {
 | 
						|
	tests := []struct {
 | 
						|
		name            string
 | 
						|
		obj             *unstructured.Unstructured
 | 
						|
		annotationKey   string
 | 
						|
		annotationValue string
 | 
						|
		expected        *unstructured.Unstructured
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			name: "nil annotations",
 | 
						|
			obj: &unstructured.Unstructured{
 | 
						|
				Object: map[string]interface{}{
 | 
						|
					"apiVersion": "apps/v1",
 | 
						|
					"kind":       "Deployment",
 | 
						|
					"metadata": map[string]interface{}{
 | 
						|
						"name": "demo-deployment",
 | 
						|
					},
 | 
						|
					"spec": map[string]interface{}{
 | 
						|
						"replicas": 2,
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expected: &unstructured.Unstructured{
 | 
						|
				Object: map[string]interface{}{
 | 
						|
					"apiVersion": "apps/v1",
 | 
						|
					"kind":       "Deployment",
 | 
						|
					"metadata": map[string]interface{}{
 | 
						|
						"name":        "demo-deployment",
 | 
						|
						"annotations": map[string]interface{}{"foo": "bar"},
 | 
						|
					},
 | 
						|
					"spec": map[string]interface{}{
 | 
						|
						"replicas": 2,
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			annotationKey:   "foo",
 | 
						|
			annotationValue: "bar",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "same annotationKey",
 | 
						|
			obj: &unstructured.Unstructured{
 | 
						|
				Object: map[string]interface{}{
 | 
						|
					"apiVersion": "apps/v1",
 | 
						|
					"kind":       "Deployment",
 | 
						|
					"metadata": map[string]interface{}{
 | 
						|
						"name":        "demo-deployment",
 | 
						|
						"annotations": map[string]interface{}{"foo": "bar"},
 | 
						|
					},
 | 
						|
					"spec": map[string]interface{}{
 | 
						|
						"replicas": 2,
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expected: &unstructured.Unstructured{
 | 
						|
				Object: map[string]interface{}{
 | 
						|
					"apiVersion": "apps/v1",
 | 
						|
					"kind":       "Deployment",
 | 
						|
					"metadata": map[string]interface{}{
 | 
						|
						"name":        "demo-deployment",
 | 
						|
						"annotations": map[string]interface{}{"foo": "bar"},
 | 
						|
					},
 | 
						|
					"spec": map[string]interface{}{
 | 
						|
						"replicas": 2,
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			annotationKey:   "foo",
 | 
						|
			annotationValue: "bar1",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "new labelKey",
 | 
						|
			obj: &unstructured.Unstructured{
 | 
						|
				Object: map[string]interface{}{
 | 
						|
					"apiVersion": "apps/v1",
 | 
						|
					"kind":       "Deployment",
 | 
						|
					"metadata": map[string]interface{}{
 | 
						|
						"name":        "demo-deployment",
 | 
						|
						"annotations": map[string]interface{}{"foo": "bar"},
 | 
						|
					},
 | 
						|
					"spec": map[string]interface{}{
 | 
						|
						"replicas": 2,
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expected: &unstructured.Unstructured{
 | 
						|
				Object: map[string]interface{}{
 | 
						|
					"apiVersion": "apps/v1",
 | 
						|
					"kind":       "Deployment",
 | 
						|
					"metadata": map[string]interface{}{
 | 
						|
						"name":        "demo-deployment",
 | 
						|
						"annotations": map[string]interface{}{"foo": "bar", "foo1": "bar1"},
 | 
						|
					},
 | 
						|
					"spec": map[string]interface{}{
 | 
						|
						"replicas": 2,
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			annotationKey:   "foo1",
 | 
						|
			annotationValue: "bar1",
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, tt := range tests {
 | 
						|
		t.Run(tt.name, func(t *testing.T) {
 | 
						|
			MergeAnnotation(tt.obj, tt.annotationKey, tt.annotationValue)
 | 
						|
			if !reflect.DeepEqual(tt.obj, tt.expected) {
 | 
						|
				t.Errorf("MergeAnnotation() = %v, want %v", tt.obj, tt.expected)
 | 
						|
			}
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestMergeAnnotations(t *testing.T) {
 | 
						|
	tests := []struct {
 | 
						|
		name     string
 | 
						|
		dst      *unstructured.Unstructured
 | 
						|
		src      *unstructured.Unstructured
 | 
						|
		expected *unstructured.Unstructured
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			name: "src has nil annotations",
 | 
						|
			dst: &unstructured.Unstructured{
 | 
						|
				Object: map[string]interface{}{
 | 
						|
					"apiVersion": "apps/v1",
 | 
						|
					"kind":       "Deployment",
 | 
						|
					"metadata": map[string]interface{}{
 | 
						|
						"name": "demo-deployment",
 | 
						|
					},
 | 
						|
					"spec": map[string]interface{}{
 | 
						|
						"replicas": 2,
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			src: &unstructured.Unstructured{
 | 
						|
				Object: map[string]interface{}{
 | 
						|
					"apiVersion": "apps/v1",
 | 
						|
					"kind":       "Deployment",
 | 
						|
					"metadata": map[string]interface{}{
 | 
						|
						"name": "demo-deployment-1",
 | 
						|
					},
 | 
						|
					"spec": map[string]interface{}{
 | 
						|
						"replicas": 2,
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expected: &unstructured.Unstructured{
 | 
						|
				Object: map[string]interface{}{
 | 
						|
					"apiVersion": "apps/v1",
 | 
						|
					"kind":       "Deployment",
 | 
						|
					"metadata": map[string]interface{}{
 | 
						|
						"name": "demo-deployment",
 | 
						|
					},
 | 
						|
					"spec": map[string]interface{}{
 | 
						|
						"replicas": 2,
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "src has annotations",
 | 
						|
			dst: &unstructured.Unstructured{
 | 
						|
				Object: map[string]interface{}{
 | 
						|
					"apiVersion": "apps/v1",
 | 
						|
					"kind":       "Deployment",
 | 
						|
					"metadata": map[string]interface{}{
 | 
						|
						"name": "demo-deployment",
 | 
						|
					},
 | 
						|
					"spec": map[string]interface{}{
 | 
						|
						"replicas": 2,
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			src: &unstructured.Unstructured{
 | 
						|
				Object: map[string]interface{}{
 | 
						|
					"apiVersion": "apps/v1",
 | 
						|
					"kind":       "Deployment",
 | 
						|
					"metadata": map[string]interface{}{
 | 
						|
						"name":        "demo-deployment-1",
 | 
						|
						"annotations": map[string]interface{}{"foo": "bar"},
 | 
						|
					},
 | 
						|
					"spec": map[string]interface{}{
 | 
						|
						"replicas": 2,
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expected: &unstructured.Unstructured{
 | 
						|
				Object: map[string]interface{}{
 | 
						|
					"apiVersion": "apps/v1",
 | 
						|
					"kind":       "Deployment",
 | 
						|
					"metadata": map[string]interface{}{
 | 
						|
						"name":        "demo-deployment",
 | 
						|
						"annotations": map[string]interface{}{"foo": "bar"},
 | 
						|
					},
 | 
						|
					"spec": map[string]interface{}{
 | 
						|
						"replicas": 2,
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, tt := range tests {
 | 
						|
		t.Run(tt.name, func(t *testing.T) {
 | 
						|
			MergeAnnotations(tt.dst, tt.src)
 | 
						|
			if !reflect.DeepEqual(tt.dst, tt.expected) {
 | 
						|
				t.Errorf("MergeAnnotations() = %v, want %v", tt.dst, tt.expected)
 | 
						|
			}
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestGetAnnotationValue(t *testing.T) {
 | 
						|
	tests := []struct {
 | 
						|
		name          string
 | 
						|
		annotations   map[string]string
 | 
						|
		annotationKey string
 | 
						|
		expected      string
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			name:          "nil annotations",
 | 
						|
			annotationKey: "foo",
 | 
						|
			expected:      "",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:          "annotationKey is not exist",
 | 
						|
			annotations:   map[string]string{"foo": "bar"},
 | 
						|
			annotationKey: "foo1",
 | 
						|
			expected:      "",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:          "existed annotationKey",
 | 
						|
			annotations:   map[string]string{"foo": "bar"},
 | 
						|
			annotationKey: "foo",
 | 
						|
			expected:      "bar",
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, tt := range tests {
 | 
						|
		t.Run(tt.name, func(t *testing.T) {
 | 
						|
			res := GetAnnotationValue(tt.annotations, tt.annotationKey)
 | 
						|
			if res != tt.expected {
 | 
						|
				t.Errorf("MergeAnnotations() = %v, want %v", res, tt.expected)
 | 
						|
			}
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 |