blob: 7c044f089cdcdf6a13ece43ebcf3d74851f321ce [file] [log] [blame]
// Copyright 2016 The LUCI Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package tsmon
import (
"context"
"io/ioutil"
"os"
"testing"
"go.chromium.org/luci/common/tsmon/target"
. "github.com/smartystreets/goconvey/convey"
)
// newTestingFlags returns new Flags that are appropriate for testing. These
// stub out relevant system-local information so that system specifics don't
// affect things.
func newTestingFlags() Flags {
fl := NewFlags()
fl.ConfigFile = "" // Stub out so we don't load local system config.
fl.Endpoint = "file://fake/path"
fl.Target.SysInfo = &target.SysInfo{
Hostname: "host-sys",
Region: "region-sys",
}
return fl
}
func TestInitializeFromFlags(t *testing.T) {
t.Parallel()
Convey("Initialize tsmon", t, func() {
c := WithState(context.Background(), NewState())
tsmonFlags := newTestingFlags()
tsmonFlags.Target.TargetType = target.DeviceType
tsmonFlags.Flush = FlushManual
Convey("with autogenerated hostnames", func() {
tsmonFlags.Target.AutoGenHostname = true
err := InitializeFromFlags(c, &tsmonFlags)
So(err, ShouldBeNil)
defer Shutdown(c)
s := GetState(c).Store()
So(s.DefaultTarget(), ShouldHaveSameTypeAs, (*target.NetworkDevice)(nil))
target := s.DefaultTarget().(*target.NetworkDevice)
So(target.Hostname, ShouldEqual, "autogen:host-sys")
So(target.Metro, ShouldEqual, "region-sys")
})
Convey("with predefined autogenerated hostnames (Device)", func() {
tsmonFlags.Target.AutoGenHostname = true
tsmonFlags.Target.DeviceHostname = "test-m5"
err := InitializeFromFlags(c, &tsmonFlags)
So(err, ShouldBeNil)
defer Shutdown(c)
s := GetState(c).Store()
So(s.DefaultTarget(), ShouldHaveSameTypeAs, (*target.NetworkDevice)(nil))
target := s.DefaultTarget().(*target.NetworkDevice)
So(target.Hostname, ShouldEqual, "autogen:test-m5")
So(target.Metro, ShouldEqual, "region-sys")
})
Convey("with predefined autogenerated hostnames (Task)", func() {
tsmonFlags.Target.AutoGenHostname = true
tsmonFlags.Target.TaskHostname = "test-m5"
tsmonFlags.Target.TargetType = target.TaskType
tsmonFlags.Target.TaskServiceName = "test-service"
tsmonFlags.Target.TaskJobName = "test-job"
err := InitializeFromFlags(c, &tsmonFlags)
So(err, ShouldBeNil)
defer Shutdown(c)
s := GetState(c).Store()
So(s.DefaultTarget(), ShouldHaveSameTypeAs, (*target.Task)(nil))
target := s.DefaultTarget().(*target.Task)
So(target.HostName, ShouldEqual, "autogen:test-m5")
So(target.DataCenter, ShouldEqual, "region-sys")
})
Convey("with static hostnames", func() {
err := InitializeFromFlags(c, &tsmonFlags)
So(err, ShouldBeNil)
defer Shutdown(c)
s := GetState(c).Store()
So(s.DefaultTarget(), ShouldHaveSameTypeAs, (*target.NetworkDevice)(nil))
target := s.DefaultTarget().(*target.NetworkDevice)
So(target.Hostname, ShouldEqual, "host-sys")
So(target.Metro, ShouldEqual, "region-sys")
})
Convey("with predefined static hostnames (Device)", func() {
tsmonFlags.Target.DeviceHostname = "host-flag"
tsmonFlags.Target.DeviceRegion = "region-flag"
err := InitializeFromFlags(c, &tsmonFlags)
So(err, ShouldBeNil)
defer Shutdown(c)
s := GetState(c).Store()
So(s.DefaultTarget(), ShouldHaveSameTypeAs, (*target.NetworkDevice)(nil))
target := s.DefaultTarget().(*target.NetworkDevice)
So(target.Hostname, ShouldEqual, "host-flag")
So(target.Metro, ShouldEqual, "region-flag")
})
Convey("with predefined static hostnames (Task)", func() {
tsmonFlags.Target.TaskHostname = "host-flag"
tsmonFlags.Target.TaskRegion = "region-flag"
tsmonFlags.Target.TargetType = target.TaskType
tsmonFlags.Target.TaskServiceName = "test-service"
tsmonFlags.Target.TaskJobName = "test-job"
err := InitializeFromFlags(c, &tsmonFlags)
So(err, ShouldBeNil)
defer Shutdown(c)
s := GetState(c).Store()
So(s.DefaultTarget(), ShouldHaveSameTypeAs, (*target.Task)(nil))
target := s.DefaultTarget().(*target.Task)
So(target.HostName, ShouldEqual, "host-flag")
So(target.DataCenter, ShouldEqual, "region-flag")
})
Convey("with region in config and hostname in a flag", func() {
tf, err := ioutil.TempFile("", "config_test")
if err != nil {
t.Fail()
}
defer tf.Close()
defer os.Remove(tf.Name())
tf.WriteString(`
{"endpoint": "foo",
"credentials": "bar",
"autogen_hostname": true,
"hostname": "host-config",
"region": "region-config"
}`)
tf.Sync()
tsmonFlags.ConfigFile = tf.Name()
tsmonFlags.Target.DeviceHostname = "host-flag"
err = InitializeFromFlags(c, &tsmonFlags)
So(err, ShouldBeNil)
defer Shutdown(c)
s := GetState(c).Store()
So(s.DefaultTarget(), ShouldHaveSameTypeAs, (*target.NetworkDevice)(nil))
target := s.DefaultTarget().(*target.NetworkDevice)
So(target.Hostname, ShouldEqual, "autogen:host-flag")
So(target.Metro, ShouldEqual, "region-config")
})
})
}