|
| 1 | +package expandenv_test |
| 2 | + |
| 3 | +import ( |
| 4 | + "fmt" |
| 5 | + "os" |
| 6 | + "testing" |
| 7 | + |
| 8 | + "github.com/stretchr/testify/require" |
| 9 | + . "trpc.group/trpc-go/trpc-go/internal/expandenv" |
| 10 | +) |
| 11 | + |
| 12 | +func TestExpandEnv(t *testing.T) { |
| 13 | + key := "env_key" |
| 14 | + t.Run("no env", func(t *testing.T) { |
| 15 | + require.Equal(t, []byte("abc"), ExpandEnv([]byte("abc"))) |
| 16 | + }) |
| 17 | + t.Run("${..} is expanded", func(t *testing.T) { |
| 18 | + t.Setenv(key, t.Name()) |
| 19 | + require.Equal(t, fmt.Sprintf("head_%s_tail", t.Name()), |
| 20 | + string(ExpandEnv([]byte(fmt.Sprintf("head_${%s}_tail", key))))) |
| 21 | + }) |
| 22 | + t.Run("${ is not expanded", func(t *testing.T) { |
| 23 | + require.Equal(t, "head_${_tail", |
| 24 | + string(ExpandEnv([]byte(fmt.Sprintf("head_${_tail"))))) |
| 25 | + }) |
| 26 | + t.Run("${} is expanded as empty", func(t *testing.T) { |
| 27 | + require.Equal(t, "head__tail", |
| 28 | + string(ExpandEnv([]byte("head_${}_tail")))) |
| 29 | + }) |
| 30 | + t.Run("${..} is not expanded if .. contains any space", func(t *testing.T) { |
| 31 | + t.Setenv("key key", t.Name()) |
| 32 | + require.Equal(t, "head_${key key}_tail", |
| 33 | + string(ExpandEnv([]byte("head_${key key}_tail")))) |
| 34 | + }) |
| 35 | + t.Run("${..} is not expanded if .. contains any new line", func(t *testing.T) { |
| 36 | + t.Setenv("key\nkey", t.Name()) |
| 37 | + require.Equal(t, t.Name(), os.Getenv("key\nkey")) |
| 38 | + require.Equal(t, "head_${key\nkey}_tail", |
| 39 | + string(ExpandEnv([]byte("head_${key\nkey}_tail")))) |
| 40 | + }) |
| 41 | + t.Run(`${..} is not expanded if .. contains any "`, func(t *testing.T) { |
| 42 | + t.Setenv(`key"key`, t.Name()) |
| 43 | + require.Equal(t, t.Name(), os.Getenv(`key"key`)) |
| 44 | + require.Equal(t, `head_${key"key}_tail`, |
| 45 | + string(ExpandEnv([]byte(`head_${key"key}_tail`)))) |
| 46 | + }) |
| 47 | +} |
0 commit comments