github.com/GuanceCloud/cliutils@v1.1.21/pipeline/ptinput/funcs/fn_kv_test.go (about) 1 // Unless explicitly stated otherwise all files in this repository are licensed 2 // under the MIT License. 3 // This product includes software developed at Guance Cloud (https://www.guance.com/). 4 // Copyright 2021-present Guance, Inc. 5 6 package funcs 7 8 import ( 9 "testing" 10 "time" 11 12 "github.com/GuanceCloud/cliutils/pipeline/ptinput" 13 "github.com/GuanceCloud/cliutils/point" 14 tu "github.com/GuanceCloud/cliutils/testutil" 15 ) 16 17 func TestKV(t *testing.T) { 18 cases := []struct { 19 name, pl, in string 20 expected []interface{} 21 fail bool 22 outkey []string 23 }{ 24 { 25 name: "normal", 26 pl: `kv_split(_)`, 27 in: `a=1 b=2 c=3`, 28 expected: []any{nil, nil, nil}, 29 outkey: []string{"a", "b", "c"}, 30 }, 31 { 32 name: "normal1", 33 pl: `kv_split(_, 34 include_keys=["a", "b","c"])`, 35 in: `a=1, b=2 c=3`, 36 expected: []any{"1,", "2", "3"}, 37 outkey: []string{"a", "b", "c"}, 38 }, 39 { 40 name: "trim_value", 41 pl: `kv_split(_, trim_value=",", 42 include_keys=["a", "b","c"])`, 43 in: `a=1, b=2 c=3`, 44 expected: []any{"1", "2", "3"}, 45 outkey: []string{"a", "b", "c"}, 46 }, 47 { 48 name: "trim_key_skip_empty_str_key", 49 pl: `kv_split(_, trim_value=",", trim_key="a", 50 include_keys=["a", "b","c"])`, 51 in: `a=1, b=2 c=3`, 52 expected: []any{nil, nil, "2", "3"}, 53 outkey: []string{"", "a", "b", "c"}, 54 }, 55 { 56 name: "prefix", 57 pl: `kv_split(_, prefix="prefix_",trim_value=",", trim_key="a", 58 include_keys=["a", "b","c"])`, 59 in: `a=1, b=2 c=3`, 60 expected: []any{nil, nil, "2", "3"}, 61 outkey: []string{"", "prefix_", "prefix_b", "prefix_c"}, 62 }, 63 { 64 name: "prefix", 65 pl: `kv_split(_, include_keys= ["b", ],prefix="prefix_",trim_value=",", trim_key="a")`, 66 in: `a=1, b=2 c=3`, 67 expected: []any{nil, nil, "2", nil}, 68 outkey: []string{"", "prefix_", "prefix_b", "prefix_c"}, 69 }, 70 { 71 name: "value_split_pattern", 72 pl: `kv_split(_, include_keys= ["b", ], field_split_pattern="\\+", value_split_pattern="::", 73 prefix="prefix_",trim_value=",", trim_key="a")`, 74 in: `a::1,+b::2+c::3`, 75 expected: []any{nil, nil, "2", nil}, 76 outkey: []string{"", "prefix_", "prefix_b", "prefix_c"}, 77 }, 78 } 79 80 for idx, tc := range cases { 81 t.Run(tc.name, func(t *testing.T) { 82 runner, err := NewTestingRunner(tc.pl) 83 if err != nil { 84 if tc.fail { 85 t.Logf("[%d]expect error: %s", idx, err) 86 } else { 87 t.Errorf("[%d] failed: %s", idx, err) 88 } 89 return 90 } 91 pt := ptinput.NewPlPoint( 92 point.Logging, "test", nil, map[string]any{"message": tc.in}, time.Now()) 93 errR := runScript(runner, pt) 94 95 if errR != nil { 96 t.Fatal(errR.Error()) 97 } 98 99 for i := range tc.outkey { 100 // tu.Equals(t, nil, err) 101 t.Log(tc.outkey[i]) 102 v, _, _ := pt.Get(tc.outkey[i]) 103 tu.Equals(t, tc.expected[i], v) 104 t.Logf("[%d] PASS", idx) 105 } 106 }) 107 } 108 }