From 3c24acf565408da56ddea7a7bbdeeed0e8e19235 Mon Sep 17 00:00:00 2001 From: immanuwell Date: Mon, 1 Jun 2026 11:11:00 +0400 Subject: [PATCH] fix: rebase file-backed HTTP headers paths Signed-off-by: immanuwell --- config/headers.go | 5 +++-- config/headers_test.go | 20 ++++++++++++++++++++ config/http_config_test.go | 25 +++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/config/headers.go b/config/headers.go index 9beaae26c..a66d5f9ff 100644 --- a/config/headers.go +++ b/config/headers.go @@ -64,8 +64,9 @@ func (h *Headers) SetDirectory(dir string) { if h == nil { return } - for _, h := range h.Headers { - h.SetDirectory(dir) + for name, header := range h.Headers { + header.SetDirectory(dir) + h.Headers[name] = header } } diff --git a/config/headers_test.go b/config/headers_test.go index c807fbc3b..86faf35fa 100644 --- a/config/headers_test.go +++ b/config/headers_test.go @@ -18,7 +18,10 @@ package config import ( "net/http" + "path/filepath" "testing" + + "github.com/stretchr/testify/require" ) func TestReservedHeaders(t *testing.T) { @@ -29,3 +32,20 @@ func TestReservedHeaders(t *testing.T) { } } } + +func TestHeadersSetDirectory(t *testing.T) { + headers := &Headers{ + Headers: map[string]Header{ + "X-Test": { + Files: []string{"headers-file-a", "/tmp/already-absolute"}, + }, + }, + } + + headers.SetDirectory("/etc/prometheus") + + require.Equal(t, + []string{filepath.Join("/etc/prometheus", "headers-file-a"), "/tmp/already-absolute"}, + headers.Headers["X-Test"].Files, + ) +} diff --git a/config/http_config_test.go b/config/http_config_test.go index 26f7d5f54..5fc5308a0 100644 --- a/config/http_config_test.go +++ b/config/http_config_test.go @@ -2361,3 +2361,28 @@ func TestMultipleHeaders(t *testing.T) { _, err = client.Get(ts.URL) require.NoErrorf(t, err, "can't fetch URL: %v", err) } + +func TestHeadersFileRelativeToConfigFile(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, "nested-value", r.Header.Get("X-Test")) + w.WriteHeader(http.StatusNoContent) + })) + t.Cleanup(ts.Close) + + tmpDir := t.TempDir() + configDir := filepath.Join(tmpDir, "configs") + require.NoError(t, os.MkdirAll(configDir, 0o755)) + require.NoError(t, os.WriteFile(filepath.Join(configDir, "header-value"), []byte("nested-value\n"), 0o644)) + require.NoError(t, os.WriteFile(filepath.Join(configDir, "http.yml"), []byte(`http_headers: + X-Test: + files: [configs/header-value] +`), 0o644)) + + cfg, _, err := LoadHTTPConfigFile(filepath.Join(configDir, "http.yml")) + require.NoErrorf(t, err, "Error loading HTTP client config: %v", err) + client, err := NewClientFromConfig(*cfg, "test") + require.NoErrorf(t, err, "Error creating HTTP Client: %v", err) + + _, err = client.Get(ts.URL) + require.NoErrorf(t, err, "can't fetch URL: %v", err) +}