From 65241166e05de1519fb0618c4ba7c4f856a1e0b1 Mon Sep 17 00:00:00 2001 From: Alexander Apalikov Date: Wed, 27 Feb 2019 18:36:38 +0300 Subject: [PATCH] Add input parameters check on CRD loggers Check nil pointer parameter to avoid possible panic. Updated Create Gameserver doc. --- pkg/fleetautoscalers/controller.go | 6 +++++- pkg/fleets/controller.go | 6 +++++- pkg/gameserverallocations/controller.go | 6 +++++- pkg/gameservers/controller.go | 6 +++++- pkg/gameservers/health.go | 6 +++++- pkg/gameserversets/controller.go | 6 +++++- test/e2e/fleet_test.go | 4 +++- 7 files changed, 33 insertions(+), 7 deletions(-) diff --git a/pkg/fleetautoscalers/controller.go b/pkg/fleetautoscalers/controller.go index c4f7b2ab85..f92b916ec3 100644 --- a/pkg/fleetautoscalers/controller.go +++ b/pkg/fleetautoscalers/controller.go @@ -126,7 +126,11 @@ func (c *Controller) loggerForFleetAutoscalerKey(key string) *logrus.Entry { } func (c *Controller) loggerForFleetAutoscaler(fas *v1alpha1.FleetAutoscaler) *logrus.Entry { - return c.loggerForFleetAutoscalerKey(fas.Namespace+"/"+fas.Name).WithField("fas", fas) + fasName := "NilFleetAutoScaler" + if fas != nil { + fasName = fas.Namespace + "/" + fas.Name + } + return c.loggerForFleetAutoscalerKey(fasName).WithField("fas", fas) } // validationHandler will intercept when a FleetAutoscaler is created, and diff --git a/pkg/fleets/controller.go b/pkg/fleets/controller.go index b81d1967ba..d558d17fba 100644 --- a/pkg/fleets/controller.go +++ b/pkg/fleets/controller.go @@ -221,7 +221,11 @@ func (c *Controller) loggerForFleetKey(key string) *logrus.Entry { } func (c *Controller) loggerForFleet(f *v1alpha1.Fleet) *logrus.Entry { - return c.loggerForFleetKey(f.Namespace+"/"+f.Name).WithField("fleet", f) + fleetName := "NilFleet" + if f != nil { + fleetName = f.Namespace + "/" + f.Name + } + return c.loggerForFleetKey(fleetName).WithField("fleet", f) } // gameServerSetEventHandler enqueues the owning Fleet for this GameServerSet, diff --git a/pkg/gameserverallocations/controller.go b/pkg/gameserverallocations/controller.go index f7eeac4a4b..3138a76d99 100644 --- a/pkg/gameserverallocations/controller.go +++ b/pkg/gameserverallocations/controller.go @@ -253,7 +253,11 @@ func (c *Controller) loggerForGameServerAllocationKey(key string) *logrus.Entry } func (c *Controller) loggerForGameServerAllocation(gsa *v1alpha1.GameServerAllocation) *logrus.Entry { - return c.loggerForGameServerAllocationKey(gsa.Namespace+"/"+gsa.Name).WithField("gsa", gsa) + gsaName := "NilGameServerAllocation" + if gsa != nil { + gsaName = gsa.Namespace + "/" + gsa.Name + } + return c.loggerForGameServerAllocationKey(gsaName).WithField("gsa", gsa) } // creationMutationHandler will intercept when a GameServerAllocation is created, and allocate it a GameServer diff --git a/pkg/gameservers/controller.go b/pkg/gameservers/controller.go index 06e3794bcc..d1f4594ee4 100644 --- a/pkg/gameservers/controller.go +++ b/pkg/gameservers/controller.go @@ -245,7 +245,11 @@ func (c *Controller) loggerForGameServerKey(key string) *logrus.Entry { } func (c *Controller) loggerForGameServer(gs *v1alpha1.GameServer) *logrus.Entry { - return c.loggerForGameServerKey(gs.Namespace+"/"+gs.Name).WithField("gs", gs) + gsName := "NilGameServer" + if gs != nil { + gsName = gs.Namespace + "/" + gs.Name + } + return c.loggerForGameServerKey(gsName).WithField("gs", gs) } // creationValidationHandler that validates a GameServer when it is created diff --git a/pkg/gameservers/health.go b/pkg/gameservers/health.go index ea1bb48fe8..fdb82d73cf 100644 --- a/pkg/gameservers/health.go +++ b/pkg/gameservers/health.go @@ -130,7 +130,11 @@ func (hc *HealthController) loggerForGameServerKey(key string) *logrus.Entry { } func (hc *HealthController) loggerForGameServer(gs *v1alpha1.GameServer) *logrus.Entry { - return hc.loggerForGameServerKey(gs.Namespace+"/"+gs.Name).WithField("gs", gs) + gsName := "NilGameServer" + if gs != nil { + gsName = gs.Namespace + "/" + gs.Name + } + return hc.loggerForGameServerKey(gsName).WithField("gs", gs) } // syncGameServer sets the GameSerer to Unhealthy, if its state is Ready diff --git a/pkg/gameserversets/controller.go b/pkg/gameserversets/controller.go index 8614b5ff53..3b74adcd61 100644 --- a/pkg/gameserversets/controller.go +++ b/pkg/gameserversets/controller.go @@ -268,7 +268,11 @@ func (c *Controller) loggerForGameServerSetKey(key string) *logrus.Entry { } func (c *Controller) loggerForGameServerSet(gsSet *v1alpha1.GameServerSet) *logrus.Entry { - return c.loggerForGameServerSetKey(gsSet.Namespace+"/"+gsSet.Name).WithField("gss", gsSet) + gsSetName := "NilGameServerSet" + if gsSet != nil { + gsSetName = gsSet.Namespace + "/" + gsSet.Name + } + return c.loggerForGameServerSetKey(gsSetName).WithField("gss", gsSet) } // syncGameServer synchronises the GameServers for the Set, diff --git a/test/e2e/fleet_test.go b/test/e2e/fleet_test.go index 8499e47dac..b337ac4ebc 100644 --- a/test/e2e/fleet_test.go +++ b/test/e2e/fleet_test.go @@ -505,7 +505,9 @@ func TestFleetNameValidation(t *testing.T) { flt.Name = string(bytes) _, err := alpha1.Fleets(defaultNs).Create(flt) assert.NotNil(t, err) - statusErr := err.(*k8serrors.StatusError) + statusErr, ok := err.(*k8serrors.StatusError) + assert.True(t, ok) + assert.True(t, len(statusErr.Status().Details.Causes) > 0) assert.Equal(t, statusErr.Status().Details.Causes[0].Type, metav1.CauseTypeFieldValueInvalid) goodFlt := defaultFleet() goodFlt.Name = string(bytes[0 : nameLen-1])