From 5672c074a6de2e3d6c868fc1abd9a87744ff66e3 Mon Sep 17 00:00:00 2001 From: Florian Bacher Date: Thu, 5 May 2022 09:02:34 +0200 Subject: [PATCH] fix: Avoid nil pointer exception in AddTemporaryData (#460) * fix: Avoid nil pointer exception in AddTemporaryData Signed-off-by: Florian Bacher * added unit test Signed-off-by: Florian Bacher --- pkg/api/models/keptn_context_extended_c_e.go | 8 ++++--- .../models/keptn_context_extended_c_e_test.go | 21 +++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/pkg/api/models/keptn_context_extended_c_e.go b/pkg/api/models/keptn_context_extended_c_e.go index 3aad08d0..ccb98fb5 100644 --- a/pkg/api/models/keptn_context_extended_c_e.go +++ b/pkg/api/models/keptn_context_extended_c_e.go @@ -95,9 +95,11 @@ const temporaryDataRootKey = "temporaryData" // AddTemporaryData adds further (temporary) properties to the data section of the keptn event func (ce *KeptnContextExtendedCE) AddTemporaryData(key string, tmpData TemporaryData, opts AddTemporaryDataOptions) error { eventData := map[string]interface{}{} - err := ce.DataAs(&eventData) - if err != nil { - return err + if ce.Data != nil { + err := ce.DataAs(&eventData) + if err != nil { + return err + } } if temporaryData, found := eventData[temporaryDataRootKey]; found { if _, kfound := temporaryData.(map[string]interface{})[key]; kfound { diff --git a/pkg/api/models/keptn_context_extended_c_e_test.go b/pkg/api/models/keptn_context_extended_c_e_test.go index 159e7e5e..8ab73ef0 100644 --- a/pkg/api/models/keptn_context_extended_c_e_test.go +++ b/pkg/api/models/keptn_context_extended_c_e_test.go @@ -138,6 +138,27 @@ func TestAddTemporaryData(t *testing.T) { require.Nil(t, err) } +func TestAddTemporaryData_EventDataNil(t *testing.T) { + event := models.KeptnContextExtendedCE{} + + type AdditionalData struct { + SomeString string `json:"someString"` + SomeInt int `json:"someInt"` + } + temporaryDataToAdd := models.TemporaryData(AdditionalData{ + SomeString: "Bernd", + SomeInt: 34, + }) + err := event.AddTemporaryData("distributor", temporaryDataToAdd, models.AddTemporaryDataOptions{}) + require.Nil(t, err) + + addi := AdditionalData{} + err = event.GetTemporaryData("distributor", &addi) + fmt.Println(addi.SomeInt) + + require.Nil(t, err) +} + func TestKeptnContextExtendedCE_TemporaryData(t *testing.T) { type TestData struct { v0_2_0.EventData