github.com/Jeffail/benthos/v3@v3.65.0/lib/util/text/env_vars_test.go (about)

     1  package text
     2  
     3  import (
     4  	"os"
     5  	"testing"
     6  )
     7  
     8  func TestEnvVarDetection(t *testing.T) {
     9  	tests := map[string]bool{
    10  		"foo ${BENTHOS_TEST_FOO:bar} baz":           true,
    11  		"foo ${BENTHOS_TEST_FOO:} baz":              false,
    12  		"foo ${BENTHOS_TEST_FOO} baz":               true,
    13  		"foo ${BENTHOS_TEST_FOO} baz ${and_this}":   true,
    14  		"foo $BENTHOS_TEST_FOO} baz $but_not_this}": false,
    15  		"foo ${BENTHOS_TEST_FOO baz ${or_this":      false,
    16  		"nothing $ here boss {}":                    false,
    17  		"foo ${BENTHOS_TEST_FOO:barthisdoesntend":   false,
    18  		"foo ${{BENTHOS_TEST_FOO:bar}} baz":         true,
    19  		"foo ${{BENTHOS_TEST_FOO:bar} baz":          false,
    20  		"foo ${foo.bar} baz":                        true,
    21  		"foo ${foo.bar^} baz":                       false,
    22  		"foo ${foo.bar:} baz":                       false,
    23  		"foo ${foo.bar:bar} baz":                    true,
    24  		"foo ${foo*bar} baz":                        false,
    25  	}
    26  
    27  	for in, exp := range tests {
    28  		act := ContainsEnvVariables([]byte(in))
    29  		if act != exp {
    30  			t.Errorf("Wrong result for '%v': %v != %v", in, act, exp)
    31  		}
    32  	}
    33  }
    34  
    35  func TestEnvSwapping(t *testing.T) {
    36  	if os.Getenv("BENTHOS_TEST_FOO") != "" {
    37  		os.Setenv("BENTHOS_TEST_FOO", "")
    38  	}
    39  
    40  	os.Setenv("BENTHOS.TEST.FOO", "testfoo")
    41  	os.Setenv("BENTHOS.TEST.BAR", "test\nbar")
    42  
    43  	tests := map[string]string{
    44  		"foo ${BENTHOS_TEST_FOO:bar} baz":                    "foo bar baz",
    45  		"foo ${BENTHOS.TEST.FOO:bar} baz":                    "foo testfoo baz",
    46  		"foo ${BENTHOS.TEST.FOO} baz":                        "foo testfoo baz",
    47  		"foo ${BENTHOS_TEST_FOO:http://bar.com} baz":         "foo http://bar.com baz",
    48  		"foo ${BENTHOS_TEST_FOO:http://bar.com?wat=nuh} baz": "foo http://bar.com?wat=nuh baz",
    49  		"foo ${BENTHOS_TEST_FOO:http://bar.com#wat} baz":     "foo http://bar.com#wat baz",
    50  		"foo ${BENTHOS_TEST_FOO:tcp://*:2020} baz":           "foo tcp://*:2020 baz",
    51  		"foo ${BENTHOS_TEST_FOO:bar} http://bar.com baz":     "foo bar http://bar.com baz",
    52  		"foo ${BENTHOS_TEST_FOO} http://bar.com baz":         "foo  http://bar.com baz",
    53  		"foo ${BENTHOS_TEST_FOO:wat@nuh.com} baz":            "foo wat@nuh.com baz",
    54  		"foo ${} baz":                                                              "foo ${} baz",
    55  		"foo ${BENTHOS_TEST_FOO:foo,bar} baz":                                      "foo foo,bar baz",
    56  		"foo ${BENTHOS_TEST_FOO} baz":                                              "foo  baz",
    57  		"foo ${BENTHOS_TEST_FOO:${!metadata:foo}} baz":                             "foo ${!metadata:foo} baz",
    58  		"foo ${BENTHOS_TEST_FOO:${!metadata:foo}${!metadata:bar}} baz":             "foo ${!metadata:foo}${!metadata:bar} baz",
    59  		"foo ${BENTHOS_TEST_FOO:${!count:foo}-${!timestamp_unix_nano}.tar.gz} baz": "foo ${!count:foo}-${!timestamp_unix_nano}.tar.gz baz",
    60  		"foo ${{BENTHOS_TEST_FOO:bar}} baz":                                        "foo ${BENTHOS_TEST_FOO:bar} baz",
    61  		"foo ${{BENTHOS_TEST_FOO}} baz":                                            "foo ${BENTHOS_TEST_FOO} baz",
    62  		"foo ${BENTHOS.TEST.BAR} baz":                                              "foo test\\nbar baz",
    63  	}
    64  
    65  	for in, exp := range tests {
    66  		out := ReplaceEnvVariables([]byte(in))
    67  		if act := string(out); act != exp {
    68  			t.Errorf("Wrong result: %v != %v", act, exp)
    69  		}
    70  	}
    71  }