Skip to content

Commit 44ca275

Browse files
committed
PR feedback
1 parent 32a278c commit 44ca275

File tree

4 files changed

+117
-30
lines changed

4 files changed

+117
-30
lines changed

internal/config/config.go

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -918,12 +918,7 @@ func resolveExtensions() Extensions {
918918
}
919919

920920
if headersSetter != nil {
921-
token, err := getToken(headersSetter)
922-
if err != nil {
923-
slog.Error("error getting token from config", "error", err)
924-
} else {
925-
headersSetter.Headers[0].Value = token
926-
}
921+
headersSetter.Headers = values(headersSetter.Headers)
927922
}
928923

929924
return Extensions{
@@ -932,22 +927,26 @@ func resolveExtensions() Extensions {
932927
}
933928
}
934929

935-
func getToken(headersSetter *HeadersSetter) (string, error) {
930+
func values(headers []Header) []Header {
936931
var err error
932+
newHeaders := []Header{}
937933

938-
token := headersSetter.Headers[0].Value
939-
if token == "" {
940-
filePath := headersSetter.Headers[0].FilePath
934+
for _, header := range headers {
935+
value := header.Value
936+
if value == "" {
937+
filePath := header.FilePath
941938

942-
token, err = file.ReadFromFile(filePath)
943-
if err != nil {
944-
return "", err
939+
value, err = file.ReadFromFile(filePath)
940+
if err != nil {
941+
slog.Error("Unable to read value from file path", "error", err, "file_path", filePath)
942+
}
945943
}
946944

947-
return token, nil
945+
header.Value = value
946+
newHeaders = append(newHeaders, header)
948947
}
949948

950-
return token, nil
949+
return newHeaders
951950
}
952951

953952
func isHealthExtensionSet() bool {

internal/config/config_test.go

Lines changed: 77 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -641,33 +641,97 @@ func TestValidateYamlFile(t *testing.T) {
641641
func TestResolveExtensions(t *testing.T) {
642642
tests := []struct {
643643
name string
644-
token string
644+
value string
645+
value2 string
645646
path string
646-
expected string
647+
path2 string
648+
expected []string
647649
}{
648650
{
649-
name: "Test 1: User includes only token value header",
650-
token: "super-secret-token",
651+
name: "Test 1: User includes a single value header only",
652+
value: "super-secret-token",
651653
path: "",
652-
expected: "super-secret-token",
654+
expected: []string{"super-secret-token"},
653655
},
654656
{
655-
name: "Test 2: User includes only filepath header",
656-
token: "",
657+
name: "Test 2: User includes a single filepath header only",
658+
value: "",
657659
path: "testdata/nginx-token.crt",
658-
expected: "super-secret-token",
660+
expected: []string{"super-secret-token"},
659661
},
660662
{
661-
name: "Test 3: User includes both token and filepath header",
662-
token: "very-secret-token",
663+
name: "Test 3: User includes both a single token and a single filepath header",
664+
value: "very-secret-token",
663665
path: "testdata/nginx-token.crt",
664-
expected: "very-secret-token",
666+
expected: []string{"very-secret-token"},
665667
},
666668
{
667669
name: "Test 4: User includes neither token nor filepath header",
668-
token: "",
670+
value: "",
671+
path: "",
672+
expected: []string{""},
673+
},
674+
{
675+
name: "Test 5: User includes multiple headers",
676+
value: "super-secret-token",
677+
value2: "very-secret-token",
678+
path: "",
679+
path2: "",
680+
expected: []string{"super-secret-token", "very-secret-token"},
681+
},
682+
}
683+
684+
viperInstance = viper.NewWithOptions(viper.KeyDelimiter(KeyDelimiter))
685+
tempDir := t.TempDir()
686+
var confContent []byte
687+
688+
for _, tt := range tests {
689+
t.Run(tt.name, func(t *testing.T) {
690+
tempFile := helpers.CreateFileWithErrorCheck(t, tempDir, "nginx-agent.conf")
691+
defer helpers.RemoveFileWithErrorCheck(t, tempFile.Name())
692+
693+
if len(tt.expected) == 1 {
694+
confContent = []byte(conf.GetAgentConfigWithToken(tt.value, tt.path))
695+
} else {
696+
confContent = []byte(conf.AgentConfigWithMultipleHeaders(tt.value, tt.path, tt.value2, tt.path2))
697+
}
698+
699+
_, writeErr := tempFile.Write(confContent)
700+
require.NoError(t, writeErr)
701+
702+
err := loadPropertiesFromFile(tempFile.Name())
703+
require.NoError(t, err)
704+
705+
extension := resolveExtensions()
706+
require.NotNil(t, extension)
707+
708+
var result []string
709+
for _, header := range extension.HeadersSetter.Headers {
710+
result = append(result, header.Value)
711+
}
712+
713+
assert.Equal(t, tt.expected, result)
714+
715+
err = tempFile.Close()
716+
require.NoError(t, err)
717+
})
718+
}
719+
}
720+
721+
func TestResolveExtensions_MultipleHeaders(t *testing.T) {
722+
tests := []struct {
723+
name string
724+
token string
725+
token2 string
726+
path string
727+
path2 string
728+
expected string
729+
}{
730+
{
731+
name: "Test 1: User includes a single value header only",
732+
token: "super-secret-token",
669733
path: "",
670-
expected: "",
734+
expected: "super-secret-token",
671735
},
672736
}
673737

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
log:
2+
level: info
3+
4+
collector:
5+
extensions:
6+
headers_setter:
7+
headers:
8+
- action: insert
9+
key: "authorization"
10+
value: %s
11+
file_path: %s
12+
13+
- action: insert
14+
key: "authorization"
15+
value: %s
16+
file_path: %s
17+

test/config/nginx_config.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ var embedNginxConfWithSSLCertsWithVariables string
2828
//go:embed agent/nginx-agent-with-token.conf
2929
var agentConfigWithToken string
3030

31+
//go:embed agent/nginx-agent-with-multiple-headers.conf
32+
var agentConfigWithMultipleHeaders string
33+
3134
func GetNginxConfigWithMultipleAccessLogs(
3235
errorLogName,
3336
accessLogName,
@@ -59,6 +62,10 @@ func GetNginxConfigWithMultipleSSLCerts(errorLogFile, accessLogFile, certFile1,
5962
return fmt.Sprintf(embedNginxConfWithMultipleSSLCerts, errorLogFile, accessLogFile, certFile1, certFile2)
6063
}
6164

62-
func GetAgentConfigWithToken(token, path string) string {
63-
return fmt.Sprintf(agentConfigWithToken, token, path)
65+
func GetAgentConfigWithToken(value, path string) string {
66+
return fmt.Sprintf(agentConfigWithToken, value, path)
67+
}
68+
69+
func AgentConfigWithMultipleHeaders(value, path, value2, path2 string) string {
70+
return fmt.Sprintf(agentConfigWithMultipleHeaders, value, path, value2, path2)
6471
}

0 commit comments

Comments
 (0)