diff --git a/staging/src/k8s.io/metrics/BUILD b/staging/src/k8s.io/metrics/BUILD index 6e32ef7e84a..a5e9dcdda81 100644 --- a/staging/src/k8s.io/metrics/BUILD +++ b/staging/src/k8s.io/metrics/BUILD @@ -10,9 +10,7 @@ filegroup( srcs = [ ":package-srcs", "//staging/src/k8s.io/metrics/hack:all-srcs", - "//staging/src/k8s.io/metrics/pkg/apis/custom_metrics:all-srcs", - "//staging/src/k8s.io/metrics/pkg/apis/external_metrics:all-srcs", - "//staging/src/k8s.io/metrics/pkg/apis/metrics:all-srcs", + "//staging/src/k8s.io/metrics/pkg/apis:all-srcs", "//staging/src/k8s.io/metrics/pkg/client/clientset/deprecated:all-srcs", "//staging/src/k8s.io/metrics/pkg/client/clientset/versioned:all-srcs", "//staging/src/k8s.io/metrics/pkg/client/clientset_test:all-srcs", diff --git a/staging/src/k8s.io/metrics/pkg/apis/BUILD b/staging/src/k8s.io/metrics/pkg/apis/BUILD new file mode 100644 index 00000000000..68f80499b0b --- /dev/null +++ b/staging/src/k8s.io/metrics/pkg/apis/BUILD @@ -0,0 +1,41 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_test") + +go_test( + name = "go_default_test", + srcs = ["roundtrip_test.go"], + deps = [ + "//staging/src/k8s.io/apimachinery/pkg/api/apitesting/fuzzer:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/apitesting/roundtrip:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/fuzzer:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", + "//staging/src/k8s.io/metrics/pkg/apis/custom_metrics:go_default_library", + "//staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1:go_default_library", + "//staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta2:go_default_library", + "//staging/src/k8s.io/metrics/pkg/apis/external_metrics:go_default_library", + "//staging/src/k8s.io/metrics/pkg/apis/external_metrics/v1beta1:go_default_library", + "//staging/src/k8s.io/metrics/pkg/apis/metrics:go_default_library", + "//staging/src/k8s.io/metrics/pkg/apis/metrics/v1alpha1:go_default_library", + "//staging/src/k8s.io/metrics/pkg/apis/metrics/v1beta1:go_default_library", + "//vendor/github.com/stretchr/testify/require:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/metrics/pkg/apis/custom_metrics:all-srcs", + "//staging/src/k8s.io/metrics/pkg/apis/external_metrics:all-srcs", + "//staging/src/k8s.io/metrics/pkg/apis/metrics:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/staging/src/k8s.io/metrics/pkg/apis/roundtrip_test.go b/staging/src/k8s.io/metrics/pkg/apis/roundtrip_test.go new file mode 100644 index 00000000000..3fb2c8a6e25 --- /dev/null +++ b/staging/src/k8s.io/metrics/pkg/apis/roundtrip_test.go @@ -0,0 +1,64 @@ +/* +Copyright 2020 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 testing + +import ( + "math/rand" + "testing" + + custommetrics "k8s.io/metrics/pkg/apis/custom_metrics" + custommetricsv1beta1 "k8s.io/metrics/pkg/apis/custom_metrics/v1beta1" + custommetricsv1beta2 "k8s.io/metrics/pkg/apis/custom_metrics/v1beta2" + externalmetrics "k8s.io/metrics/pkg/apis/external_metrics" + externalmetricsv1beta1 "k8s.io/metrics/pkg/apis/external_metrics/v1beta1" + metrics "k8s.io/metrics/pkg/apis/metrics" + metricsv1alpha1 "k8s.io/metrics/pkg/apis/metrics/v1alpha1" + metricsv1beta1 "k8s.io/metrics/pkg/apis/metrics/v1beta1" + + "github.com/stretchr/testify/require" + "k8s.io/apimachinery/pkg/api/apitesting/fuzzer" + "k8s.io/apimachinery/pkg/api/apitesting/roundtrip" + genericfuzzer "k8s.io/apimachinery/pkg/apis/meta/fuzzer" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer" +) + +var groups = []runtime.SchemeBuilder{ + custommetrics.SchemeBuilder, + custommetricsv1beta1.SchemeBuilder, + custommetricsv1beta2.SchemeBuilder, + externalmetrics.SchemeBuilder, + externalmetricsv1beta1.SchemeBuilder, + metrics.SchemeBuilder, + metricsv1alpha1.SchemeBuilder, + metricsv1beta1.SchemeBuilder, +} + +func TestRoundTripTypes(t *testing.T) { + scheme := runtime.NewScheme() + codecs := serializer.NewCodecFactory(scheme) + for _, builder := range groups { + require.NoError(t, builder.AddToScheme(scheme)) + } + seed := rand.Int63() + // I'm only using the generic fuzzer funcs, but at some point in time we might need to + // switch to specialized. For now we're happy with the current serialization test. + fuzzer := fuzzer.FuzzerFor(genericfuzzer.Funcs, rand.NewSource(seed), codecs) + + roundtrip.RoundTripExternalTypes(t, scheme, codecs, fuzzer, nil) + roundtrip.RoundTripTypes(t, scheme, codecs, fuzzer, nil) +}