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  }