go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/common/tsmon/iface_test.go (about) 1 // Copyright 2016 The LUCI Authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package tsmon 16 17 import ( 18 "context" 19 "io/ioutil" 20 "os" 21 "testing" 22 23 "go.chromium.org/luci/common/tsmon/target" 24 25 . "github.com/smartystreets/goconvey/convey" 26 ) 27 28 // newTestingFlags returns new Flags that are appropriate for testing. These 29 // stub out relevant system-local information so that system specifics don't 30 // affect things. 31 func newTestingFlags() Flags { 32 fl := NewFlags() 33 fl.ConfigFile = "" // Stub out so we don't load local system config. 34 fl.Endpoint = "file://fake/path" 35 fl.Target.SysInfo = &target.SysInfo{ 36 Hostname: "host-sys", 37 Region: "region-sys", 38 } 39 return fl 40 } 41 42 func TestInitializeFromFlags(t *testing.T) { 43 t.Parallel() 44 45 Convey("Initialize tsmon", t, func() { 46 c := WithState(context.Background(), NewState()) 47 48 tsmonFlags := newTestingFlags() 49 tsmonFlags.Target.TargetType = target.DeviceType 50 tsmonFlags.Flush = FlushManual 51 52 Convey("with autogenerated hostnames", func() { 53 tsmonFlags.Target.AutoGenHostname = true 54 err := InitializeFromFlags(c, &tsmonFlags) 55 So(err, ShouldBeNil) 56 defer Shutdown(c) 57 58 s := GetState(c).Store() 59 So(s.DefaultTarget(), ShouldHaveSameTypeAs, (*target.NetworkDevice)(nil)) 60 target := s.DefaultTarget().(*target.NetworkDevice) 61 So(target.Hostname, ShouldEqual, "autogen:host-sys") 62 So(target.Metro, ShouldEqual, "region-sys") 63 }) 64 65 Convey("with predefined autogenerated hostnames (Device)", func() { 66 tsmonFlags.Target.AutoGenHostname = true 67 tsmonFlags.Target.DeviceHostname = "test-m5" 68 err := InitializeFromFlags(c, &tsmonFlags) 69 So(err, ShouldBeNil) 70 defer Shutdown(c) 71 72 s := GetState(c).Store() 73 So(s.DefaultTarget(), ShouldHaveSameTypeAs, (*target.NetworkDevice)(nil)) 74 target := s.DefaultTarget().(*target.NetworkDevice) 75 So(target.Hostname, ShouldEqual, "autogen:test-m5") 76 So(target.Metro, ShouldEqual, "region-sys") 77 }) 78 79 Convey("with predefined autogenerated hostnames (Task)", func() { 80 tsmonFlags.Target.AutoGenHostname = true 81 tsmonFlags.Target.TaskHostname = "test-m5" 82 tsmonFlags.Target.TargetType = target.TaskType 83 tsmonFlags.Target.TaskServiceName = "test-service" 84 tsmonFlags.Target.TaskJobName = "test-job" 85 err := InitializeFromFlags(c, &tsmonFlags) 86 So(err, ShouldBeNil) 87 defer Shutdown(c) 88 89 s := GetState(c).Store() 90 So(s.DefaultTarget(), ShouldHaveSameTypeAs, (*target.Task)(nil)) 91 target := s.DefaultTarget().(*target.Task) 92 So(target.HostName, ShouldEqual, "autogen:test-m5") 93 So(target.DataCenter, ShouldEqual, "region-sys") 94 }) 95 96 Convey("with static hostnames", func() { 97 err := InitializeFromFlags(c, &tsmonFlags) 98 So(err, ShouldBeNil) 99 defer Shutdown(c) 100 101 s := GetState(c).Store() 102 So(s.DefaultTarget(), ShouldHaveSameTypeAs, (*target.NetworkDevice)(nil)) 103 target := s.DefaultTarget().(*target.NetworkDevice) 104 So(target.Hostname, ShouldEqual, "host-sys") 105 So(target.Metro, ShouldEqual, "region-sys") 106 }) 107 108 Convey("with predefined static hostnames (Device)", func() { 109 tsmonFlags.Target.DeviceHostname = "host-flag" 110 tsmonFlags.Target.DeviceRegion = "region-flag" 111 err := InitializeFromFlags(c, &tsmonFlags) 112 So(err, ShouldBeNil) 113 defer Shutdown(c) 114 115 s := GetState(c).Store() 116 So(s.DefaultTarget(), ShouldHaveSameTypeAs, (*target.NetworkDevice)(nil)) 117 target := s.DefaultTarget().(*target.NetworkDevice) 118 So(target.Hostname, ShouldEqual, "host-flag") 119 So(target.Metro, ShouldEqual, "region-flag") 120 }) 121 122 Convey("with predefined static hostnames (Task)", func() { 123 tsmonFlags.Target.TaskHostname = "host-flag" 124 tsmonFlags.Target.TaskRegion = "region-flag" 125 tsmonFlags.Target.TargetType = target.TaskType 126 tsmonFlags.Target.TaskServiceName = "test-service" 127 tsmonFlags.Target.TaskJobName = "test-job" 128 err := InitializeFromFlags(c, &tsmonFlags) 129 So(err, ShouldBeNil) 130 defer Shutdown(c) 131 132 s := GetState(c).Store() 133 So(s.DefaultTarget(), ShouldHaveSameTypeAs, (*target.Task)(nil)) 134 target := s.DefaultTarget().(*target.Task) 135 So(target.HostName, ShouldEqual, "host-flag") 136 So(target.DataCenter, ShouldEqual, "region-flag") 137 }) 138 139 Convey("with region in config and hostname in a flag", func() { 140 tf, err := ioutil.TempFile("", "config_test") 141 if err != nil { 142 t.Fail() 143 } 144 defer tf.Close() 145 defer os.Remove(tf.Name()) 146 147 tf.WriteString(` 148 {"endpoint": "foo", 149 "credentials": "bar", 150 "autogen_hostname": true, 151 "hostname": "host-config", 152 "region": "region-config" 153 }`) 154 tf.Sync() 155 tsmonFlags.ConfigFile = tf.Name() 156 tsmonFlags.Target.DeviceHostname = "host-flag" 157 err = InitializeFromFlags(c, &tsmonFlags) 158 So(err, ShouldBeNil) 159 defer Shutdown(c) 160 161 s := GetState(c).Store() 162 So(s.DefaultTarget(), ShouldHaveSameTypeAs, (*target.NetworkDevice)(nil)) 163 target := s.DefaultTarget().(*target.NetworkDevice) 164 So(target.Hostname, ShouldEqual, "autogen:host-flag") 165 So(target.Metro, ShouldEqual, "region-config") 166 }) 167 168 }) 169 }