|
| 1 | +package config_test |
| 2 | + |
| 3 | +import ( |
| 4 | + "os" |
| 5 | + "testing" |
| 6 | + |
| 7 | + "github.com/stretchr/testify/assert" |
| 8 | + |
| 9 | + "github.com/netboxlabs/orb-agent/agent/config" |
| 10 | +) |
| 11 | + |
| 12 | +func TestResolveEnv(t *testing.T) { |
| 13 | + err := os.Setenv("TEST_VAR", "test_value") |
| 14 | + assert.NoError(t, err, "failed to set environment variable") |
| 15 | + defer func() { |
| 16 | + err := os.Unsetenv("TEST_VAR") |
| 17 | + assert.NoError(t, err, "failed to unset environment variable") |
| 18 | + }() |
| 19 | + |
| 20 | + tests := []struct { |
| 21 | + input string |
| 22 | + expected string |
| 23 | + hasError bool |
| 24 | + }{ |
| 25 | + {"${TEST_VAR}", "test_value", false}, |
| 26 | + {"${UNSET_VAR}", "", true}, |
| 27 | + {"no_env_var", "no_env_var", false}, |
| 28 | + } |
| 29 | + |
| 30 | + for _, test := range tests { |
| 31 | + result, err := config.ResolveEnv(test.input) |
| 32 | + if test.hasError { |
| 33 | + assert.Error(t, err, "expected error for input %s", test.input) |
| 34 | + } else { |
| 35 | + assert.NoError(t, err, "unexpected error for input %s", test.input) |
| 36 | + } |
| 37 | + assert.Equal(t, test.expected, result, "unexpected result for input %s", test.input) |
| 38 | + } |
| 39 | +} |
| 40 | + |
| 41 | +func TestResolveEnvError(t *testing.T) { |
| 42 | + err := os.Unsetenv("UNSET_VAR") // Ensure the variable is not set |
| 43 | + assert.NoError(t, err, "failed to unset environment variable") |
| 44 | + |
| 45 | + _, err = config.ResolveEnv("${UNSET_VAR}") |
| 46 | + assert.Error(t, err, "expected error for unset environment variable") |
| 47 | +} |
| 48 | + |
| 49 | +func TestResolveEnvInMap(t *testing.T) { |
| 50 | + err := os.Setenv("TEST_VAR", "test_value") |
| 51 | + assert.NoError(t, err, "failed to set environment variable") |
| 52 | + defer func() { |
| 53 | + err := os.Unsetenv("TEST_VAR") |
| 54 | + assert.NoError(t, err, "failed to unset environment variable") |
| 55 | + }() |
| 56 | + |
| 57 | + data := map[string]any{ |
| 58 | + "key1": "${TEST_VAR}", |
| 59 | + "key2": "static_value", |
| 60 | + "nested": map[string]any{ |
| 61 | + "key3": "${TEST_VAR}", |
| 62 | + }, |
| 63 | + "list": []any{ |
| 64 | + "${TEST_VAR}", |
| 65 | + }, |
| 66 | + } |
| 67 | + |
| 68 | + err = config.ResolveEnvInMap(data) |
| 69 | + assert.NoError(t, err, "unexpected error") |
| 70 | + |
| 71 | + assert.Equal(t, "test_value", data["key1"], "unexpected value for key1") |
| 72 | + assert.Equal(t, "static_value", data["key2"], "unexpected value for key2") |
| 73 | + |
| 74 | + nested, ok := data["nested"].(map[string]any) |
| 75 | + assert.True(t, ok, "expected nested to be a map") |
| 76 | + assert.Equal(t, "test_value", nested["key3"], "unexpected value for nested.key3") |
| 77 | +} |
| 78 | + |
| 79 | +func TestResolveEnvInMapError(t *testing.T) { |
| 80 | + err := os.Unsetenv("UNSET_VAR") // Ensure the variable is not set |
| 81 | + assert.NoError(t, err, "failed to unset environment variable") |
| 82 | + |
| 83 | + data := map[string]any{ |
| 84 | + "key1": "${UNSET_VAR}", |
| 85 | + } |
| 86 | + |
| 87 | + err = config.ResolveEnvInMap(data) |
| 88 | + assert.Error(t, err, "expected error for unset environment variable in map") |
| 89 | + |
| 90 | + // Test with a nested map |
| 91 | + data = map[string]any{ |
| 92 | + "key1": map[string]any{ |
| 93 | + "nested_key": "${UNSET_VAR}", |
| 94 | + }, |
| 95 | + } |
| 96 | + err = config.ResolveEnvInMap(data) |
| 97 | + assert.Error(t, err, "expected error for unset environment variable in nested map") |
| 98 | + |
| 99 | + // Test with a nested slice |
| 100 | + data = map[string]any{ |
| 101 | + "key1": []any{"${UNSET_VAR}"}, |
| 102 | + } |
| 103 | + err = config.ResolveEnvInMap(data) |
| 104 | + assert.Error(t, err, "expected error for unset environment variable in nested slice") |
| 105 | +} |
| 106 | + |
| 107 | +func TestResolveEnvInSlice(t *testing.T) { |
| 108 | + err := os.Setenv("TEST_VAR", "test_value") |
| 109 | + assert.NoError(t, err, "failed to set environment variable") |
| 110 | + defer func() { |
| 111 | + err := os.Unsetenv("TEST_VAR") |
| 112 | + assert.NoError(t, err, "failed to unset environment variable") |
| 113 | + }() |
| 114 | + |
| 115 | + data := []any{ |
| 116 | + "${TEST_VAR}", |
| 117 | + "static_value", |
| 118 | + map[string]any{ |
| 119 | + "key1": "${TEST_VAR}", |
| 120 | + }, |
| 121 | + []any{"${TEST_VAR}"}, |
| 122 | + } |
| 123 | + |
| 124 | + err = config.ResolveEnvInSlice(data) |
| 125 | + assert.NoError(t, err, "unexpected error") |
| 126 | + |
| 127 | + assert.Equal(t, "test_value", data[0], "unexpected value at index 0") |
| 128 | + assert.Equal(t, "static_value", data[1], "unexpected value at index 1") |
| 129 | + |
| 130 | + nestedMap, ok := data[2].(map[string]any) |
| 131 | + assert.True(t, ok, "expected index 2 to be a map") |
| 132 | + assert.Equal(t, "test_value", nestedMap["key1"], "unexpected value for nestedMap.key1") |
| 133 | + |
| 134 | + nestedSlice, ok := data[3].([]any) |
| 135 | + assert.True(t, ok, "expected index 3 to be a slice") |
| 136 | + assert.Equal(t, "test_value", nestedSlice[0], "unexpected value for nestedSlice[0]") |
| 137 | +} |
| 138 | + |
| 139 | +func TestResolveEnvInSliceError(t *testing.T) { |
| 140 | + err := os.Unsetenv("UNSET_VAR") // Ensure the variable is not set |
| 141 | + assert.NoError(t, err, "failed to unset environment variable") |
| 142 | + |
| 143 | + data := []any{ |
| 144 | + "${UNSET_VAR}", |
| 145 | + } |
| 146 | + |
| 147 | + err = config.ResolveEnvInSlice(data) |
| 148 | + assert.Error(t, err, "expected error for unset environment variable in slice") |
| 149 | + |
| 150 | + // Test with a nested map |
| 151 | + data = []any{ |
| 152 | + map[string]any{ |
| 153 | + "key1": "${UNSET_VAR}", |
| 154 | + }, |
| 155 | + } |
| 156 | + err = config.ResolveEnvInSlice(data) |
| 157 | + assert.Error(t, err, "expected error for unset environment variable in nested map") |
| 158 | + // Test with a nested slice |
| 159 | + data = []any{ |
| 160 | + []any{"${UNSET_VAR}"}, |
| 161 | + } |
| 162 | + err = config.ResolveEnvInSlice(data) |
| 163 | + assert.Error(t, err, "expected error for unset environment variable in nested slice") |
| 164 | +} |
0 commit comments