From 06a5580b2cde413785613807ccd7760797ecf0de Mon Sep 17 00:00:00 2001 From: Siva Sathyaseelan <95441117+sivasathyaseeelan@users.noreply.github.com> Date: Sun, 28 Jan 2024 01:57:54 +0530 Subject: [PATCH] test: added test for pkg/utils/admission/metadata.go (#9538) Signed-off-by: sivasathyaseeelan --- pkg/utils/admission/metadata_test.go | 183 +++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100644 pkg/utils/admission/metadata_test.go diff --git a/pkg/utils/admission/metadata_test.go b/pkg/utils/admission/metadata_test.go new file mode 100644 index 0000000000..8b2ee462e2 --- /dev/null +++ b/pkg/utils/admission/metadata_test.go @@ -0,0 +1,183 @@ +package admission + +import ( + "encoding/json" + "reflect" + "testing" + + admissionv1 "k8s.io/api/admission/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" +) + +func TestUnmarshalPartialObjectMetadata(t *testing.T) { + testCases := []struct { + name string + raw []byte + expectErr bool + }{ + { + name: "Valid JSON", + raw: []byte(`{"field": "value"}`), + }, + { + name: "Invalid JSON data", + raw: []byte(`invalid JSON data`), + expectErr: true, + }, + { + name: "Empty JSON", + raw: []byte(`{}`), + }, + { + name: "Missing Field", + raw: []byte(``), + expectErr: true, + }, + { + name: "Nested Array", + raw: []byte(`{"nested": [{"field": "value"}]}`), + }, + { + name: "Invalid Type", + raw: []byte(`123`), + expectErr: true, + }, + } + for _, test := range testCases { + t.Run(test.name, func(t *testing.T) { + result, err := UnmarshalPartialObjectMetadata(test.raw) + if test.expectErr { + if err == nil { + t.Error("Expected an error, but got none") + } + } else { + if err != nil { + t.Errorf("Unexpected error: %v", err) + } + var object *metav1.PartialObjectMetadata + json.Unmarshal(test.raw, &object) + if !reflect.DeepEqual(result, object) { + t.Errorf("Expected %+v, got %+v", object, result) + } + } + }) + } +} + +func TestGetPartialObjectMetadatas(t *testing.T) { + type args struct { + request admissionv1.AdmissionRequest + } + testCases := []struct { + name string + args args + }{{ + name: "Valid JSON", + args: args{ + request: admissionv1.AdmissionRequest{ + Object: runtime.RawExtension{ + Raw: []byte(`{"field":"value"}`), + }, + OldObject: runtime.RawExtension{ + Raw: []byte(`{"field":"value"}`), + }, + Operation: "CREATE", + }, + }, + }, { + name: "Invalid JSON data", + args: args{ + request: admissionv1.AdmissionRequest{ + Object: runtime.RawExtension{ + Raw: []byte(`invalid JSON data`), + }, + OldObject: runtime.RawExtension{ + Raw: []byte(`{"field":"value"}`), + }, + Operation: "UPDATE", + }, + }, + }, { + name: "Empty JSON", + args: args{ + request: admissionv1.AdmissionRequest{ + Object: runtime.RawExtension{ + Raw: []byte(`{}`), + }, + OldObject: runtime.RawExtension{ + Raw: []byte(`{"field":"value"}`), + }, + Operation: "DELETE", + }, + }, + }, { + name: "Missing Field", + args: args{ + request: admissionv1.AdmissionRequest{ + Object: runtime.RawExtension{ + Raw: []byte(``), + }, + OldObject: runtime.RawExtension{ + Raw: []byte(`{"field":"value"}`), + }, + Operation: "CONNECT", + }, + }, + }, { + name: "Nested Array", + args: args{ + request: admissionv1.AdmissionRequest{ + Object: runtime.RawExtension{ + Raw: []byte(`{"nested": [{"field": "value"}]}`), + }, + OldObject: runtime.RawExtension{ + Raw: []byte(`{"field":"value"}`), + }, + Operation: "DELETE", + }, + }, + }, { + name: "Invalid Type", + args: args{ + request: admissionv1.AdmissionRequest{ + Object: runtime.RawExtension{ + Raw: []byte(`123`), + }, + OldObject: runtime.RawExtension{ + Raw: []byte(`{"field":"value"}`), + }, + Operation: "UPDATE", + }, + }, + }} + for _, test := range testCases { + t.Run(test.name, func(t *testing.T) { + p1, p2, _ := GetPartialObjectMetadatas(test.args.request) + object, err := UnmarshalPartialObjectMetadata(test.args.request.Object.Raw) + var nil_object *metav1.PartialObjectMetadata = nil + if err != nil { + if !reflect.DeepEqual(nil_object, p1) || !reflect.DeepEqual(nil_object, p2) { + t.Errorf("Expected policies %+v and %+v , got %+v and %+v ", nil_object, nil_object, p1, p2) + } + } else if test.args.request.Operation != admissionv1.Update { + if err != nil { + t.Errorf("Unexpected error: %v", err) + } + if !reflect.DeepEqual(object, p1) || !reflect.DeepEqual(nil_object, p2) { + t.Errorf("Expected policies %+v and %+v , got %+v and %+v ", object, nil_object, p1, p2) + } + } else { + oldObject, err := UnmarshalPartialObjectMetadata(test.args.request.OldObject.Raw) + if err != nil { + if !reflect.DeepEqual(nil_object, p1) || !reflect.DeepEqual(nil_object, p2) { + t.Errorf("Expected policies %+v and %+v , got %+v and %+v ", nil_object, nil_object, p1, p2) + } + } + if !reflect.DeepEqual(object, p1) || !reflect.DeepEqual(oldObject, p2) { + t.Errorf("Expected policies %+v and %+v , got %+v and %+v ", object, oldObject, p1, p2) + } + } + }) + } +}