tailscale/logpolicy/logpolicy_test.go
Anton Tolchanov d486ea388d logpolicy: fix log target override with a custom HTTP client
This makes sure that the log target override is respected even if a
custom HTTP client is passed to logpolicy.

Updates tailscale/maple#29

Signed-off-by: Anton Tolchanov <anton@tailscale.com>
2025-04-09 22:04:23 +01:00

87 lines
1.8 KiB
Go

// Copyright (c) Tailscale Inc & AUTHORS
// SPDX-License-Identifier: BSD-3-Clause
package logpolicy
import (
"net/http"
"os"
"reflect"
"testing"
"tailscale.com/logtail"
)
func resetLogTarget() {
os.Unsetenv("TS_LOG_TARGET")
v := reflect.ValueOf(&getLogTargetOnce).Elem()
v.Set(reflect.Zero(v.Type()))
}
func TestLogHost(t *testing.T) {
defer resetLogTarget()
tests := []struct {
env string
want string
}{
{"", logtail.DefaultHost},
{"http://foo.com", "foo.com"},
{"https://foo.com", "foo.com"},
{"https://foo.com/", "foo.com"},
{"https://foo.com:123/", "foo.com"},
}
for _, tt := range tests {
resetLogTarget()
os.Setenv("TS_LOG_TARGET", tt.env)
if got := LogHost(); got != tt.want {
t.Errorf("for env %q, got %q, want %q", tt.env, got, tt.want)
}
}
}
func TestOptions(t *testing.T) {
defer resetLogTarget()
tests := []struct {
name string
opts func() Options
wantBaseURL string
}{
{
name: "default",
opts: func() Options { return Options{} },
wantBaseURL: "",
},
{
name: "custom_baseurl",
opts: func() Options {
os.Setenv("TS_LOG_TARGET", "http://localhost:1234")
return Options{}
},
wantBaseURL: "http://localhost:1234",
},
{
name: "custom_httpc_and_baseurl",
opts: func() Options {
os.Setenv("TS_LOG_TARGET", "http://localhost:12345")
return Options{HTTPC: &http.Client{Transport: noopPretendSuccessTransport{}}}
},
wantBaseURL: "http://localhost:12345",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
resetLogTarget()
config, policy := tt.opts().init(false)
if policy == nil {
t.Fatal("unexpected nil policy")
}
if config.BaseURL != tt.wantBaseURL {
t.Errorf("got %q, want %q", config.BaseURL, tt.wantBaseURL)
}
policy.Close()
})
}
}