summaryrefslogtreecommitdiffstats
path: root/pkg/flatten
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/flatten')
-rw-r--r--pkg/flatten/flatten.go11
-rw-r--r--pkg/flatten/flatten_test.go45
2 files changed, 50 insertions, 6 deletions
diff --git a/pkg/flatten/flatten.go b/pkg/flatten/flatten.go
index 94a6e7e..698eff1 100644
--- a/pkg/flatten/flatten.go
+++ b/pkg/flatten/flatten.go
@@ -1,7 +1,6 @@
package flatten
import (
- "database/sql"
"fmt"
"github.com/icinga/icingadb/pkg/types"
"strconv"
@@ -32,12 +31,12 @@ func Flatten(value interface{}, prefix string) map[string]types.String {
for i, v := range value {
flatten(key+"["+strconv.Itoa(i)+"]", v)
}
+ case nil:
+ flattened[key] = types.MakeString("null")
+ case float64:
+ flattened[key] = types.MakeString(strconv.FormatFloat(value, 'f', -1, 64))
default:
- val := "null"
- if value != nil {
- val = fmt.Sprintf("%v", value)
- }
- flattened[key] = types.String{NullString: sql.NullString{String: val, Valid: true}}
+ flattened[key] = types.MakeString(fmt.Sprintf("%v", value))
}
}
diff --git a/pkg/flatten/flatten_test.go b/pkg/flatten/flatten_test.go
new file mode 100644
index 0000000..f84b8d9
--- /dev/null
+++ b/pkg/flatten/flatten_test.go
@@ -0,0 +1,45 @@
+package flatten
+
+import (
+ "github.com/icinga/icingadb/pkg/types"
+ "github.com/stretchr/testify/assert"
+ "testing"
+)
+
+func TestFlatten(t *testing.T) {
+ for _, st := range []struct {
+ name string
+ prefix string
+ value any
+ output map[string]types.String
+ }{
+ {"nil", "a", nil, map[string]types.String{"a": types.MakeString("null")}},
+ {"bool", "b", true, map[string]types.String{"b": types.MakeString("true")}},
+ {"int", "c", 42, map[string]types.String{"c": types.MakeString("42")}},
+ {"float", "d", 77.7, map[string]types.String{"d": types.MakeString("77.7")}},
+ {"large_float", "e", 1e23, map[string]types.String{"e": types.MakeString("100000000000000000000000")}},
+ {"string", "f", "\x00", map[string]types.String{"f": types.MakeString("\x00")}},
+ {"nil_slice", "g", []any(nil), map[string]types.String{"g": {}}},
+ {"empty_slice", "h", []any{}, map[string]types.String{"h": {}}},
+ {"slice", "i", []any{nil}, map[string]types.String{"i[0]": types.MakeString("null")}},
+ {"nil_map", "j", map[string]any(nil), map[string]types.String{"j": {}}},
+ {"empty_map", "k", map[string]any{}, map[string]types.String{"k": {}}},
+ {"map", "l", map[string]any{" ": nil}, map[string]types.String{"l. ": types.MakeString("null")}},
+ {"map_with_slice", "m", map[string]any{"\t": []any{"ä", "ö", "ü"}, "ß": "s"}, map[string]types.String{
+ "m.\t[0]": types.MakeString("ä"),
+ "m.\t[1]": types.MakeString("ö"),
+ "m.\t[2]": types.MakeString("ü"),
+ "m.ß": types.MakeString("s"),
+ }},
+ {"slice_with_map", "n", []any{map[string]any{"ä": "a", "ö": "o", "ü": "u"}, "ß"}, map[string]types.String{
+ "n[0].ä": types.MakeString("a"),
+ "n[0].ö": types.MakeString("o"),
+ "n[0].ü": types.MakeString("u"),
+ "n[1]": types.MakeString("ß"),
+ }},
+ } {
+ t.Run(st.name, func(t *testing.T) {
+ assert.Equal(t, st.output, Flatten(st.value, st.prefix))
+ })
+ }
+}