github.com/observiq/carbon@v0.9.11-0.20200820160507-1b872e368a5e/operator/helper/expr_string_test.go (about)

     1  package helper
     2  
     3  import (
     4  	"os"
     5  	"strconv"
     6  	"testing"
     7  
     8  	"github.com/observiq/carbon/entry"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func TestExprString(t *testing.T) {
    13  	os.Setenv("TEST_EXPR_STRING_ENV", "foo")
    14  	defer os.Unsetenv("TEST_EXPR_STRING_ENV")
    15  
    16  	exampleEntry := func() *entry.Entry {
    17  		e := entry.New()
    18  		e.Record = map[string]interface{}{
    19  			"test": "value",
    20  		}
    21  		e.Resource = map[string]string{
    22  			"id": "value",
    23  		}
    24  		return e
    25  	}
    26  
    27  	cases := []struct {
    28  		config   ExprStringConfig
    29  		expected string
    30  	}{
    31  		{
    32  			"test",
    33  			"test",
    34  		},
    35  		{
    36  			"EXPR( 'test' )",
    37  			"test",
    38  		},
    39  		{
    40  			"prefix-EXPR( 'test' )",
    41  			"prefix-test",
    42  		},
    43  		{
    44  			"prefix-EXPR('test')-suffix",
    45  			"prefix-test-suffix",
    46  		},
    47  		{
    48  			"prefix-EXPR('test')-suffix-EXPR('test2' + 'test3')",
    49  			"prefix-test-suffix-test2test3",
    50  		},
    51  		{
    52  			"EXPR('test' )EXPR('asdf')",
    53  			"testasdf",
    54  		},
    55  		{
    56  			"EXPR",
    57  			"EXPR",
    58  		},
    59  		{
    60  			"EXPR(",
    61  			"EXPR(",
    62  		},
    63  		{
    64  			")EXPR(",
    65  			")EXPR(",
    66  		},
    67  		{
    68  			"my EXPR( $.test )",
    69  			"my value",
    70  		},
    71  		{
    72  			"my EXPR($.test )",
    73  			"my value",
    74  		},
    75  		{
    76  			"my EXPR($.test)",
    77  			"my value",
    78  		},
    79  		{
    80  			"my EXPR(env('TEST_EXPR_STRING_ENV'))",
    81  			"my foo",
    82  		},
    83  		{
    84  			"EXPR( $resource.id )",
    85  			"value",
    86  		},
    87  	}
    88  
    89  	for i, tc := range cases {
    90  		t.Run(strconv.Itoa(i), func(t *testing.T) {
    91  			exprString, err := tc.config.Build()
    92  			require.NoError(t, err)
    93  
    94  			env := GetExprEnv(exampleEntry())
    95  			defer PutExprEnv(env)
    96  
    97  			result, err := exprString.Render(env)
    98  			require.NoError(t, err)
    99  			require.Equal(t, tc.expected, result)
   100  		})
   101  	}
   102  }