From 0ce287c1a1ef47b42051a3aab16654ba77088db1 Mon Sep 17 00:00:00 2001 From: minchao Date: Mon, 9 Dec 2024 18:59:46 +0800 Subject: [PATCH] feat: add bool support for convertTemplate func --- pkg/sinks/tmpl.go | 4 ++- pkg/sinks/tmpl_test.go | 77 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 78 insertions(+), 3 deletions(-) diff --git a/pkg/sinks/tmpl.go b/pkg/sinks/tmpl.go index 36f1f353..c4080cf3 100644 --- a/pkg/sinks/tmpl.go +++ b/pkg/sinks/tmpl.go @@ -5,8 +5,8 @@ import ( "encoding/json" "text/template" - "github.com/resmoio/kubernetes-event-exporter/pkg/kube" "github.com/Masterminds/sprig/v3" + "github.com/resmoio/kubernetes-event-exporter/pkg/kube" ) func GetString(event *kube.EnhancedEvent, text string) (string, error) { @@ -40,6 +40,8 @@ func convertLayoutTemplate(layout map[string]interface{}, ev *kube.EnhancedEvent func convertTemplate(value interface{}, ev *kube.EnhancedEvent) (interface{}, error) { switch v := value.(type) { + case bool: + return v, nil case string: rendered, err := GetString(ev, v) if err != nil { diff --git a/pkg/sinks/tmpl_test.go b/pkg/sinks/tmpl_test.go index cd1bc5e3..a044a69a 100644 --- a/pkg/sinks/tmpl_test.go +++ b/pkg/sinks/tmpl_test.go @@ -1,11 +1,14 @@ package sinks import ( + "testing" + "time" + "github.com/resmoio/kubernetes-event-exporter/pkg/kube" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + corev1 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "testing" - "time" ) func TestLayoutConvert(t *testing.T) { @@ -50,3 +53,73 @@ func TestLayoutConvert(t *testing.T) { require.Equal(t, val2, ev.Message) } + +func Test_convertTemplate(t *testing.T) { + event := &kube.EnhancedEvent{ + Event: corev1.Event{Message: "foovar"}, + } + + tests := []struct { + name string + value interface{} + ev *kube.EnhancedEvent + expected interface{} + }{ + { + name: "nil", + value: nil, + ev: event, + expected: nil, + }, + { + name: "bool", + value: true, + ev: event, + expected: true, + }, + { + name: "string", + value: "{{ .Message }}", + ev: event, + expected: "foovar", + }, + { + name: "map with interface{} keys", + value: map[interface{}]interface{}{ + "message": "{{ .Message }}", + }, + ev: event, + expected: map[string]interface{}{ + "message": "foovar", + }, + }, + { + name: "map", + value: map[string]interface{}{ + "message": "{{ .Message }}", + }, + ev: event, + expected: map[string]interface{}{ + "message": "foovar", + }, + }, + { + name: "slice", + value: []interface{}{ + "{{ .Message }}", + }, + ev: event, + expected: []interface{}{ + "foovar", + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + actual, err := convertTemplate(tt.value, tt.ev) + require.NoError(t, err) + + assert.Equal(t, tt.expected, actual) + }) + } +}