diff --git a/logpolicy/logpolicy.go b/logpolicy/logpolicy.go index e418fb146..b8bd888e0 100644 --- a/logpolicy/logpolicy.go +++ b/logpolicy/logpolicy.go @@ -74,7 +74,9 @@ func getLogTarget() string { // logtail server, or the default. func LogHost() string { if v := getLogTarget(); v != "" { - return v + if u, err := url.Parse(v); err == nil { + return u.Hostname() + } } return logtail.DefaultHost } diff --git a/logpolicy/logpolicy_test.go b/logpolicy/logpolicy_test.go new file mode 100644 index 000000000..cdb035317 --- /dev/null +++ b/logpolicy/logpolicy_test.go @@ -0,0 +1,37 @@ +// Copyright (c) 2022 Tailscale Inc & AUTHORS All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package logpolicy + +import ( + "os" + "reflect" + "testing" +) + +func TestLogHost(t *testing.T) { + v := reflect.ValueOf(&getLogTargetOnce).Elem() + reset := func() { + v.Set(reflect.Zero(v.Type())) + } + defer reset() + + tests := []struct { + env string + want string + }{ + {"", "log.tailscale.io"}, + {"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 { + reset() + 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) + } + } +}