From 3bd34f5cc406bec3d885b4cbe76121e7f48a6775 Mon Sep 17 00:00:00 2001 From: Alexander Apalikov Date: Wed, 15 May 2019 14:08:11 +0300 Subject: [PATCH] Add validation of the fleet underlying gameserver Now we perform additional validation on the Gameserver specification. For #765. --- pkg/apis/stable/v1alpha1/fleet.go | 8 +++++ pkg/apis/stable/v1alpha1/fleet_test.go | 41 +++++++++++++++++++++++++- test/e2e/fleetautoscaler_test.go | 4 +-- 3 files changed, 50 insertions(+), 3 deletions(-) diff --git a/pkg/apis/stable/v1alpha1/fleet.go b/pkg/apis/stable/v1alpha1/fleet.go index c5feac8e5a..ecd6e78026 100644 --- a/pkg/apis/stable/v1alpha1/fleet.go +++ b/pkg/apis/stable/v1alpha1/fleet.go @@ -153,6 +153,14 @@ func (f *Fleet) Validate() ([]metav1.StatusCause, bool) { }) } + // check gameserver specification in a fleet + gs := f.GameServerSet().GameServer() + gs.ApplyDefaults() + gsCauses, ok := gs.Validate() + if !ok { + causes = append(causes, gsCauses...) + } + return causes, len(causes) == 0 } diff --git a/pkg/apis/stable/v1alpha1/fleet_test.go b/pkg/apis/stable/v1alpha1/fleet_test.go index 107a9ddb92..36c2ce25c8 100644 --- a/pkg/apis/stable/v1alpha1/fleet_test.go +++ b/pkg/apis/stable/v1alpha1/fleet_test.go @@ -100,8 +100,30 @@ func TestSumStatusAllocatedReplicas(t *testing.T) { assert.Equal(t, int32(5), SumStatusAllocatedReplicas([]*GameServerSet{gsSet1, gsSet2})) } +func TestFleetGameserverSpec(t *testing.T) { + f := defaultFleet() + f.Spec.Template.Spec.Template = + corev1.PodTemplateSpec{ + Spec: corev1.PodSpec{ + Containers: []corev1.Container{{Name: "container", Image: "myimage"}, {Name: "container2", Image: "myimage"}}, + }, + } + causes, ok := f.Validate() + + assert.False(t, ok) + assert.Len(t, causes, 2) + assert.Equal(t, "container", causes[0].Field) + + f.Spec.Template.Spec.Container = "testing" + causes, ok = f.Validate() + + assert.False(t, ok) + assert.Len(t, causes, 1) + assert.Equal(t, "Could not find a container named testing", causes[0].Message) +} + func TestFleetName(t *testing.T) { - f := Fleet{} + f := defaultFleet() nameLen := validation.LabelValueMaxLength + 1 bytes := make([]byte, nameLen) @@ -130,3 +152,20 @@ func TestSumStatusReplicas(t *testing.T) { assert.Equal(t, int32(30), SumStatusReplicas(fixture)) } + +func defaultFleet() *Fleet { + gs := GameServer{ + Spec: GameServerSpec{ + Template: corev1.PodTemplateSpec{ + Spec: corev1.PodSpec{Containers: []corev1.Container{{Name: "testing", Image: "testing/image"}}}}}, + } + return &Fleet{ + ObjectMeta: metav1.ObjectMeta{GenerateName: "simple-fleet-", Namespace: "defaultNs"}, + Spec: FleetSpec{ + Replicas: 2, + Template: GameServerTemplateSpec{ + Spec: gs.Spec, + }, + }, + } +} diff --git a/test/e2e/fleetautoscaler_test.go b/test/e2e/fleetautoscaler_test.go index 32fd114224..9d98831dc4 100644 --- a/test/e2e/fleetautoscaler_test.go +++ b/test/e2e/fleetautoscaler_test.go @@ -104,7 +104,7 @@ func TestAutoscalerBasicFunctions(t *testing.T) { // check that we are able to scale framework.WaitForFleetAutoScalerCondition(t, fas, func(fas *v1alpha1.FleetAutoscaler) bool { - return fas.Status.ScalingLimited == false + return !fas.Status.ScalingLimited }) // patch autoscaler to a maxReplicas count equal to current replicas count @@ -113,7 +113,7 @@ func TestAutoscalerBasicFunctions(t *testing.T) { // check that we are not able to scale framework.WaitForFleetAutoScalerCondition(t, fas, func(fas *v1alpha1.FleetAutoscaler) bool { - return fas.Status.ScalingLimited == true + return fas.Status.ScalingLimited }) // delete the allocated GameServer and watch the fleet scale down