From 28880ee0eb1e453adc30cf9e4e7c305a7a479f0c Mon Sep 17 00:00:00 2001 From: fisherxu Date: Mon, 21 Aug 2017 21:11:29 +0800 Subject: [PATCH] add UT for pkg/apis/autoscaling/v2alpha1/defaults.go --- hack/.golint_failures | 1 - pkg/apis/autoscaling/v2alpha1/BUILD | 17 +++ .../autoscaling/v2alpha1/defaults_test.go | 131 ++++++++++++++++++ 3 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 pkg/apis/autoscaling/v2alpha1/defaults_test.go diff --git a/hack/.golint_failures b/hack/.golint_failures index 2d59b5d4299..bac4ab3b800 100644 --- a/hack/.golint_failures +++ b/hack/.golint_failures @@ -109,7 +109,6 @@ pkg/apis/authorization/v1 pkg/apis/authorization/v1beta1 pkg/apis/authorization/validation pkg/apis/autoscaling -pkg/apis/autoscaling/v2alpha1 pkg/apis/autoscaling/validation pkg/apis/batch pkg/apis/batch/validation diff --git a/pkg/apis/autoscaling/v2alpha1/BUILD b/pkg/apis/autoscaling/v2alpha1/BUILD index 3cbdae37c32..290a5775720 100644 --- a/pkg/apis/autoscaling/v2alpha1/BUILD +++ b/pkg/apis/autoscaling/v2alpha1/BUILD @@ -3,6 +3,7 @@ package(default_visibility = ["//visibility:public"]) load( "@io_bazel_rules_go//go:def.bzl", "go_library", + "go_test", ) go_library( @@ -39,3 +40,19 @@ filegroup( srcs = [":package-srcs"], tags = ["automanaged"], ) + +go_test( + name = "go_default_xtest", + srcs = ["defaults_test.go"], + deps = [ + ":go_default_library", + "//pkg/api:go_default_library", + "//pkg/api/install:go_default_library", + "//pkg/apis/autoscaling:go_default_library", + "//pkg/apis/autoscaling/install:go_default_library", + "//vendor/k8s.io/api/autoscaling/v2alpha1:go_default_library", + "//vendor/k8s.io/api/core/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + ], +) diff --git a/pkg/apis/autoscaling/v2alpha1/defaults_test.go b/pkg/apis/autoscaling/v2alpha1/defaults_test.go new file mode 100644 index 00000000000..2d91214a535 --- /dev/null +++ b/pkg/apis/autoscaling/v2alpha1/defaults_test.go @@ -0,0 +1,131 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v2alpha1_test + +import ( + "reflect" + "testing" + + autoscalingv2alpha1 "k8s.io/api/autoscaling/v2alpha1" + "k8s.io/api/core/v1" + apiequality "k8s.io/apimachinery/pkg/api/equality" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/kubernetes/pkg/api" + _ "k8s.io/kubernetes/pkg/api/install" + "k8s.io/kubernetes/pkg/apis/autoscaling" + _ "k8s.io/kubernetes/pkg/apis/autoscaling/install" + . "k8s.io/kubernetes/pkg/apis/autoscaling/v2alpha1" +) + +func TestSetDefaultHPA(t *testing.T) { + utilizationDefaultVal := int32(autoscaling.DefaultCPUUtilization) + defaultReplicas := newInt32(1) + defaultTemplate := []autoscalingv2alpha1.MetricSpec{ + { + Type: autoscalingv2alpha1.ResourceMetricSourceType, + Resource: &autoscalingv2alpha1.ResourceMetricSource{ + Name: v1.ResourceCPU, + TargetAverageUtilization: &utilizationDefaultVal, + }, + }, + } + + tests := []struct { + original *autoscalingv2alpha1.HorizontalPodAutoscaler + expected *autoscalingv2alpha1.HorizontalPodAutoscaler + }{ + { // MinReplicas default value + original: &autoscalingv2alpha1.HorizontalPodAutoscaler{ + Spec: autoscalingv2alpha1.HorizontalPodAutoscalerSpec{ + Metrics: defaultTemplate, + }, + }, + expected: &autoscalingv2alpha1.HorizontalPodAutoscaler{ + Spec: autoscalingv2alpha1.HorizontalPodAutoscalerSpec{ + MinReplicas: defaultReplicas, + Metrics: defaultTemplate, + }, + }, + }, + { // MinReplicas update + original: &autoscalingv2alpha1.HorizontalPodAutoscaler{ + Spec: autoscalingv2alpha1.HorizontalPodAutoscalerSpec{ + MinReplicas: newInt32(3), + Metrics: defaultTemplate, + }, + }, + expected: &autoscalingv2alpha1.HorizontalPodAutoscaler{ + Spec: autoscalingv2alpha1.HorizontalPodAutoscalerSpec{ + MinReplicas: newInt32(3), + Metrics: defaultTemplate, + }, + }, + }, + { // Metrics default value + original: &autoscalingv2alpha1.HorizontalPodAutoscaler{ + Spec: autoscalingv2alpha1.HorizontalPodAutoscalerSpec{ + MinReplicas: defaultReplicas, + }, + }, + expected: &autoscalingv2alpha1.HorizontalPodAutoscaler{ + Spec: autoscalingv2alpha1.HorizontalPodAutoscalerSpec{ + MinReplicas: defaultReplicas, + Metrics: defaultTemplate, + }, + }, + }, + } + + for i, test := range tests { + original := test.original + expected := test.expected + obj2 := roundTrip(t, runtime.Object(original)) + got, ok := obj2.(*autoscalingv2alpha1.HorizontalPodAutoscaler) + if !ok { + t.Fatalf("(%d) unexpected object: %v", i, obj2) + } + if !apiequality.Semantic.DeepEqual(got.Spec, expected.Spec) { + t.Errorf("(%d) got different than expected\ngot:\n\t%+v\nexpected:\n\t%+v", i, got.Spec, expected.Spec) + } + } +} + +func roundTrip(t *testing.T, obj runtime.Object) runtime.Object { + data, err := runtime.Encode(api.Codecs.LegacyCodec(SchemeGroupVersion), obj) + if err != nil { + t.Errorf("%v\n %#v", err, obj) + return nil + } + obj2, err := runtime.Decode(api.Codecs.UniversalDecoder(), data) + if err != nil { + t.Errorf("%v\nData: %s\nSource: %#v", err, string(data), obj) + return nil + } + obj3 := reflect.New(reflect.TypeOf(obj).Elem()).Interface().(runtime.Object) + err = api.Scheme.Convert(obj2, obj3, nil) + if err != nil { + t.Errorf("%v\nSource: %#v", err, obj2) + return nil + } + return obj3 +} + +func newInt32(val int32) *int32 { + p := new(int32) + *p = val + return p +}