Add integration test for kube-apiextensions-server.
Check if integers are present after decoding. Originally an issue for TPRs: #30213
This commit is contained in:
		| @@ -23,6 +23,7 @@ go_test( | |||||||
|         "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library", |         "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library", | ||||||
|         "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", |         "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", | ||||||
|         "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", |         "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", | ||||||
|  |         "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", | ||||||
|         "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", |         "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", | ||||||
|         "//vendor/k8s.io/client-go/dynamic:go_default_library", |         "//vendor/k8s.io/client-go/dynamic:go_default_library", | ||||||
|         "//vendor/k8s.io/kube-apiextensions-server/pkg/apis/apiextensions/v1alpha1:go_default_library", |         "//vendor/k8s.io/kube-apiextensions-server/pkg/apis/apiextensions/v1alpha1:go_default_library", | ||||||
|   | |||||||
| @@ -25,6 +25,7 @@ import ( | |||||||
| 	"k8s.io/apimachinery/pkg/api/meta" | 	"k8s.io/apimachinery/pkg/api/meta" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" | 	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" | ||||||
|  | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
| 	"k8s.io/apimachinery/pkg/watch" | 	"k8s.io/apimachinery/pkg/watch" | ||||||
| 	"k8s.io/client-go/dynamic" | 	"k8s.io/client-go/dynamic" | ||||||
| 	apiextensionsv1alpha1 "k8s.io/kube-apiextensions-server/pkg/apis/apiextensions/v1alpha1" | 	apiextensionsv1alpha1 "k8s.io/kube-apiextensions-server/pkg/apis/apiextensions/v1alpha1" | ||||||
| @@ -333,3 +334,48 @@ func TestSelfLink(t *testing.T) { | |||||||
| 	// TODO add test for cluster scoped self-link when its available | 	// TODO add test for cluster scoped self-link when its available | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestPreserveInt(t *testing.T) { | ||||||
|  | 	stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServer() | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatal(err) | ||||||
|  | 	} | ||||||
|  | 	defer close(stopCh) | ||||||
|  |  | ||||||
|  | 	noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1alpha1.ClusterScoped) | ||||||
|  | 	noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatal(err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	ns := "not-the-default" | ||||||
|  | 	noxuNamespacedResourceClient := noxuVersionClient.Resource(&metav1.APIResource{ | ||||||
|  | 		Name:       noxuDefinition.Spec.Names.Plural, | ||||||
|  | 		Namespaced: true, | ||||||
|  | 	}, ns) | ||||||
|  |  | ||||||
|  | 	noxuInstanceToCreate := testserver.NewNoxuInstance(ns, "foo") | ||||||
|  | 	createdNoxuInstance, err := noxuNamespacedResourceClient.Create(noxuInstanceToCreate) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatal(err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	originalJSON, err := runtime.Encode(unstructured.UnstructuredJSONScheme, createdNoxuInstance) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatalf("unexpected error: %v", err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	gottenNoxuInstance, err := runtime.Decode(unstructured.UnstructuredJSONScheme, originalJSON) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatalf("unexpected error: %v", err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// Check if int is preserved. | ||||||
|  | 	unstructuredObj := gottenNoxuInstance.(*unstructured.Unstructured).Object | ||||||
|  | 	num := unstructuredObj["num"].(map[string]interface{}) | ||||||
|  | 	num1 := num["num1"].(int64) | ||||||
|  | 	num2 := num["num2"].(int64) | ||||||
|  | 	if num1 != 9223372036854775807 || num2 != 1000000 { | ||||||
|  | 		t.Errorf("Expected %v, got %v, %v", `9223372036854775807, 1000000`, num1, num2) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|   | |||||||
| @@ -59,6 +59,10 @@ func NewNoxuInstance(namespace, name string) *unstructured.Unstructured { | |||||||
| 			"content": map[string]interface{}{ | 			"content": map[string]interface{}{ | ||||||
| 				"key": "value", | 				"key": "value", | ||||||
| 			}, | 			}, | ||||||
|  | 			"num": map[string]interface{}{ | ||||||
|  | 				"num1": 9223372036854775807, | ||||||
|  | 				"num2": 1000000, | ||||||
|  | 			}, | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Nikhita Raghunath
					Nikhita Raghunath