diff --git a/pkg/apis/autoscaling/v1alpha1/metric_lifecycle.go b/pkg/apis/autoscaling/v1alpha1/metric_lifecycle.go index d7e9e8581f4f..f7fa065bbafc 100644 --- a/pkg/apis/autoscaling/v1alpha1/metric_lifecycle.go +++ b/pkg/apis/autoscaling/v1alpha1/metric_lifecycle.go @@ -31,6 +31,11 @@ var condSet = apis.NewLivingConditionSet( MetricConditionReady, ) +// GetConditionSet retrieves the condition set for this resource. Implements the KRShaped interface. +func (*Metric) GetConditionSet() apis.ConditionSet { + return condSet +} + // GetGroupVersionKind implements OwnerRefable. func (m *Metric) GetGroupVersionKind() schema.GroupVersionKind { return SchemeGroupVersion.WithKind("Metric") diff --git a/pkg/apis/autoscaling/v1alpha1/metric_lifecycle_test.go b/pkg/apis/autoscaling/v1alpha1/metric_lifecycle_test.go index 87d1b66493ce..38bbe6f7cb42 100644 --- a/pkg/apis/autoscaling/v1alpha1/metric_lifecycle_test.go +++ b/pkg/apis/autoscaling/v1alpha1/metric_lifecycle_test.go @@ -48,6 +48,14 @@ func TestMetricDuckTypes(t *testing.T) { } } +func TestMetricGetConditionSet(t *testing.T) { + r := &Metric{} + + if got, want := r.GetConditionSet().GetTopLevelConditionType(), apis.ConditionReady; got != want { + t.Errorf("GetTopLevelConditionType=%v, want=%v", got, want) + } +} + func TestMetricIsReady(t *testing.T) { cases := []struct { name string diff --git a/pkg/apis/autoscaling/v1alpha1/metric_types.go b/pkg/apis/autoscaling/v1alpha1/metric_types.go index 14edaeca74a4..8cb8a125a656 100644 --- a/pkg/apis/autoscaling/v1alpha1/metric_types.go +++ b/pkg/apis/autoscaling/v1alpha1/metric_types.go @@ -52,6 +52,9 @@ var ( // Check that we can create OwnerReferences to a Metric. _ kmeta.OwnerRefable = (*Metric)(nil) + + // Check that the type conforms to the duck Knative Resource shape. + _ duckv1.KRShaped = (*Metric)(nil) ) // MetricSpec contains all values a metric collector needs to operate. @@ -78,3 +81,13 @@ type MetricList struct { Items []Metric `json:"items"` } + +// GetTypeMeta retrieves the ObjectMeta of the Metric. Implements the KRShaped interface. +func (t *Metric) GetTypeMeta() *metav1.TypeMeta { + return &t.TypeMeta +} + +// GetStatus retrieves the status of the Metric. Implements the KRShaped interface. +func (t *Metric) GetStatus() *duckv1.Status { + return &t.Status.Status +} diff --git a/pkg/apis/autoscaling/v1alpha1/metric_types_test.go b/pkg/apis/autoscaling/v1alpha1/metric_types_test.go new file mode 100644 index 000000000000..8c0363982021 --- /dev/null +++ b/pkg/apis/autoscaling/v1alpha1/metric_types_test.go @@ -0,0 +1,42 @@ +/* +Copyright 2020 The Knative 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 v1alpha1 + +import ( + "testing" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +func TestMetricGetStatus(t *testing.T) { + r := &Metric{ + Status: MetricStatus{}, + } + + if got, want := r.GetStatus(), &r.Status.Status; got != want { + t.Errorf("GotStatus=%v, want=%v", got, want) + } +} + +func TestMetricGetObjectMeta(t *testing.T) { + r := &Metric{ + TypeMeta: metav1.TypeMeta{}, + } + + if got, want := r.GetTypeMeta(), &r.TypeMeta; got != want { + t.Errorf("GetTypeMeta=%v, want=%v", got, want) + } +} diff --git a/pkg/apis/autoscaling/v1alpha1/pa_lifecycle.go b/pkg/apis/autoscaling/v1alpha1/pa_lifecycle.go index 26cbdd62637d..db4c044714cb 100644 --- a/pkg/apis/autoscaling/v1alpha1/pa_lifecycle.go +++ b/pkg/apis/autoscaling/v1alpha1/pa_lifecycle.go @@ -32,6 +32,11 @@ var podCondSet = apis.NewLivingConditionSet( PodAutoscalerConditionActive, ) +// GetConditionSet retrieves the condition set for this resource. Implements the KRShaped interface. +func (*PodAutoscaler) GetConditionSet() apis.ConditionSet { + return podCondSet +} + func (pa *PodAutoscaler) GetGroupVersionKind() schema.GroupVersionKind { return SchemeGroupVersion.WithKind("PodAutoscaler") } diff --git a/pkg/apis/autoscaling/v1alpha1/pa_lifecycle_test.go b/pkg/apis/autoscaling/v1alpha1/pa_lifecycle_test.go index dd82f0db7fc9..c459ea77f11b 100644 --- a/pkg/apis/autoscaling/v1alpha1/pa_lifecycle_test.go +++ b/pkg/apis/autoscaling/v1alpha1/pa_lifecycle_test.go @@ -50,6 +50,14 @@ func TestPodAutoscalerDuckTypes(t *testing.T) { } } +func TestPodAutoscalerGetConditionSet(t *testing.T) { + r := &PodAutoscaler{} + + if got, want := r.GetConditionSet().GetTopLevelConditionType(), apis.ConditionReady; got != want { + t.Errorf("GetTopLevelConditionType=%v, want=%v", got, want) + } +} + func TestGeneration(t *testing.T) { r := PodAutoscaler{} if a := r.GetGeneration(); a != 0 { diff --git a/pkg/apis/autoscaling/v1alpha1/pa_types.go b/pkg/apis/autoscaling/v1alpha1/pa_types.go index 085a2df0627b..f4f66bea9b4f 100644 --- a/pkg/apis/autoscaling/v1alpha1/pa_types.go +++ b/pkg/apis/autoscaling/v1alpha1/pa_types.go @@ -55,6 +55,9 @@ var ( // Check that we can create OwnerReferences to a PodAutoscaler. _ kmeta.OwnerRefable = (*PodAutoscaler)(nil) + + // Check that the type conforms to the duck Knative Resource shape. + _ duckv1.KRShaped = (*PodAutoscaler)(nil) ) // ReachabilityType is the enumeration type for the different states of reachability @@ -69,7 +72,7 @@ const ( // ReachabilityReachable means the `ScaleTarget` is reachable, ie. it has an active route. ReachabilityReachable ReachabilityType = "Reachable" - // ReachabilityReachable means the `ScaleTarget` is not reachable, ie. it does not have an active route. + // ReachabilityUnreachable means the `ScaleTarget` is not reachable, ie. it does not have an active route. ReachabilityUnreachable ReachabilityType = "Unreachable" ) @@ -141,3 +144,13 @@ type PodAutoscalerList struct { Items []PodAutoscaler `json:"items"` } + +// GetTypeMeta retrieves the ObjectMeta of the PodAutoscaler. Implements the KRShaped interface. +func (t *PodAutoscaler) GetTypeMeta() *metav1.TypeMeta { + return &t.TypeMeta +} + +// GetStatus retrieves the status of the PodAutoscaler. Implements the KRShaped interface. +func (t *PodAutoscaler) GetStatus() *duckv1.Status { + return &t.Status.Status +} diff --git a/pkg/apis/autoscaling/v1alpha1/pa_types_test.go b/pkg/apis/autoscaling/v1alpha1/pa_types_test.go new file mode 100644 index 000000000000..865fb297bb9d --- /dev/null +++ b/pkg/apis/autoscaling/v1alpha1/pa_types_test.go @@ -0,0 +1,42 @@ +/* +Copyright 2020 The Knative 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 v1alpha1 + +import ( + "testing" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +func TestPodAutoscalerGetStatus(t *testing.T) { + r := &PodAutoscaler{ + Status: PodAutoscalerStatus{}, + } + + if got, want := r.GetStatus(), &r.Status.Status; got != want { + t.Errorf("GotStatus=%v, want=%v", got, want) + } +} + +func TestPodAutoscalerGetObjectMeta(t *testing.T) { + r := &PodAutoscaler{ + TypeMeta: metav1.TypeMeta{}, + } + + if got, want := r.GetTypeMeta(), &r.TypeMeta; got != want { + t.Errorf("GetTypeMeta=%v, want=%v", got, want) + } +}