Skip to content

Commit 40c63cd

Browse files
committed
added unit test
1 parent 5ebfbea commit 40c63cd

File tree

2 files changed

+97
-1
lines changed

2 files changed

+97
-1
lines changed

internal/config/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func checkDeprecatedEnvVars() {
9090
viperKey = strings.ToLower(viperKey)
9191

9292
if _, exists := allViperKeys[viperKey]; !exists {
93-
slog.Warn("Detected deprecated environment variables. "+
93+
slog.Warn("Detected deprecated or unknown environment variables. "+
9494
"Please update to use the latest environment variables. For more information, visit "+
9595
"https://docs.nginx.com/nginx-one/agent/configure-instances/configuration-overview/.",
9696
"deprecated_env_var", envKey,

internal/config/config_test.go

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
package config
66

77
import (
8+
"bytes"
89
_ "embed"
910
"errors"
11+
"log/slog"
1012
"os"
1113
"path"
1214
"sort"
@@ -163,6 +165,100 @@ func TestNormalizeFunc(t *testing.T) {
163165
assert.Equal(t, expected, result)
164166
}
165167

168+
type deprecatedEnvVarsTest struct {
169+
name string
170+
expectedLogContent string
171+
unexpectedLogContent string
172+
envVars map[string]string
173+
viperKeys []string
174+
expectWarning bool
175+
}
176+
177+
func TestCheckDeprecatedEnvVars(t *testing.T) {
178+
tests := []deprecatedEnvVarsTest{
179+
{
180+
name: "Test 1: should log warning for deprecated env var",
181+
envVars: map[string]string{
182+
"NGINX_AGENT_SERVER_HOST": "value",
183+
},
184+
viperKeys: []string{"some_other_key"},
185+
expectedLogContent: "NGINX_AGENT_SERVER_HOST",
186+
expectWarning: true,
187+
},
188+
{
189+
name: "Test 2: should not log warning for valid env var",
190+
envVars: map[string]string{
191+
"NGINX_AGENT_LOG_LEVEL": "info",
192+
},
193+
viperKeys: []string{"log_level"},
194+
unexpectedLogContent: "NGINX_AGENT_LOG_LEVEL",
195+
expectWarning: false,
196+
},
197+
{
198+
name: "Test 3: should handle mixed valid and deprecated env vars",
199+
envVars: map[string]string{
200+
"NGINX_AGENT_LOG_LEVEL": "info",
201+
"NGINX_AGENT_DEPRECATED_VAR": "value",
202+
},
203+
viperKeys: []string{"log_level"},
204+
expectedLogContent: "NGINX_AGENT_DEPRECATED_VAR",
205+
unexpectedLogContent: "NGINX_AGENT_LOG_LEVEL",
206+
expectWarning: true,
207+
},
208+
{
209+
name: "Test 4: should ignore non-agent env vars",
210+
envVars: map[string]string{
211+
"NGINX_LICENSE": "value",
212+
},
213+
viperKeys: []string{},
214+
expectWarning: false,
215+
},
216+
}
217+
218+
for _, tc := range tests {
219+
t.Run(tc.name, func(t *testing.T) {
220+
runDeprecatedEnvVarsTest(t, tc)
221+
})
222+
}
223+
}
224+
225+
func runDeprecatedEnvVarsTest(t *testing.T, tc deprecatedEnvVarsTest) {
226+
t.Helper()
227+
228+
originalViper := viperInstance
229+
viperInstance = viper.NewWithOptions(viper.KeyDelimiter(KeyDelimiter))
230+
defer func() { viperInstance = originalViper }()
231+
232+
for key, value := range tc.envVars {
233+
t.Setenv(key, value)
234+
}
235+
236+
for _, key := range tc.viperKeys {
237+
viperInstance.Set(key, "any-value")
238+
}
239+
240+
var logBuffer bytes.Buffer
241+
handler := slog.NewTextHandler(&logBuffer, nil)
242+
slog.SetDefault(slog.New(handler))
243+
244+
checkDeprecatedEnvVars()
245+
246+
logOutput := logBuffer.String()
247+
248+
if tc.expectWarning {
249+
require.NotEmpty(t, logOutput, "Expected a warning log, but got none")
250+
assert.Contains(t, logOutput, "Detected deprecated or unknown environment variables")
251+
if tc.expectedLogContent != "" {
252+
assert.Contains(t, logOutput, tc.expectedLogContent)
253+
}
254+
if tc.unexpectedLogContent != "" {
255+
assert.NotContains(t, logOutput, tc.unexpectedLogContent)
256+
}
257+
} else {
258+
assert.Empty(t, logOutput, "Expected no warning logs")
259+
}
260+
}
261+
166262
func TestResolveAllowedDirectories(t *testing.T) {
167263
tests := []struct {
168264
name string

0 commit comments

Comments
 (0)