github.com/vmware/govmomi@v0.51.0/simulator/host_system_test.go (about) 1 // © Broadcom. All Rights Reserved. 2 // The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. 3 // SPDX-License-Identifier: Apache-2.0 4 5 package simulator 6 7 import ( 8 "context" 9 "testing" 10 11 "github.com/stretchr/testify/assert" 12 13 "github.com/vmware/govmomi" 14 "github.com/vmware/govmomi/find" 15 "github.com/vmware/govmomi/object" 16 "github.com/vmware/govmomi/simulator/esx" 17 "github.com/vmware/govmomi/vim25" 18 "github.com/vmware/govmomi/vim25/types" 19 ) 20 21 func TestDefaultESX(t *testing.T) { 22 s := New(NewServiceInstance(NewContext(), esx.ServiceContent, esx.RootFolder)) 23 24 ts := s.NewServer() 25 defer ts.Close() 26 27 ctx := context.Background() 28 29 client, err := govmomi.NewClient(ctx, ts.URL, true) 30 if err != nil { 31 t.Fatal(err) 32 } 33 34 finder := find.NewFinder(client.Client, false) 35 36 dc, err := finder.DatacenterOrDefault(ctx, "") 37 if err != nil { 38 t.Fatal(err) 39 } 40 41 finder.SetDatacenter(dc) 42 43 host, err := finder.HostSystemOrDefault(ctx, "*") 44 if err != nil { 45 t.Fatal(err) 46 } 47 48 if host.Name() != esx.HostSystem.Summary.Config.Name { 49 t.Fail() 50 } 51 52 pool, err := finder.ResourcePoolOrDefault(ctx, "*") 53 if err != nil { 54 t.Fatal(err) 55 } 56 57 if pool.Name() != "Resources" { 58 t.Fail() 59 } 60 } 61 62 func TestDefaultVPX(t *testing.T) { 63 Test(func(ctx context.Context, c *vim25.Client) { 64 for _, e := range Map(ctx).All("HostSystem") { 65 host := e.(*HostSystem) 66 // issue #3221 67 if host.Config.Host != host.Self { 68 t.Errorf("config.host=%s", host.Config.Host) 69 } 70 } 71 }) 72 } 73 74 func TestMaintenanceMode(t *testing.T) { 75 ctx := context.Background() 76 m := ESX() 77 78 defer m.Remove() 79 80 err := m.Create() 81 if err != nil { 82 t.Fatal(err) 83 } 84 85 s := m.Service.NewServer() 86 defer s.Close() 87 88 c := m.Service.client() 89 90 hs := m.Map().Get(esx.HostSystem.Reference()).(*HostSystem) 91 host := object.NewHostSystem(c, hs.Self) 92 93 task, err := host.EnterMaintenanceMode(ctx, 1, false, nil) 94 if err != nil { 95 t.Fatal(err) 96 } 97 98 err = task.Wait(ctx) 99 if err != nil { 100 t.Fatal(err) 101 } 102 103 if hs.Runtime.InMaintenanceMode != true { 104 t.Fatal("expect InMaintenanceMode is true; got false") 105 } 106 107 task, err = host.ExitMaintenanceMode(ctx, 1) 108 if err != nil { 109 t.Fatal(err) 110 } 111 112 err = task.Wait(ctx) 113 if err != nil { 114 t.Fatal(err) 115 } 116 117 if hs.Runtime.InMaintenanceMode != false { 118 t.Fatal("expect InMaintenanceMode is false; got true") 119 } 120 } 121 122 func TestNewHostSystem(t *testing.T) { 123 m := ESX() 124 125 defer m.Remove() 126 127 err := m.Create() 128 if err != nil { 129 t.Fatal(err) 130 } 131 132 hs := NewHostSystem(m.Service.Context, esx.HostSystem) 133 134 assert.Equal(t, &hs.Runtime, hs.Summary.Runtime, "expected pointer to runtime in summary") 135 assert.False(t, esx.AdvancedOptions[0] == hs.Config.Option[0], "expected each host to have it's own advanced options") 136 } 137 138 func TestDestroyHostSystem(t *testing.T) { 139 ctx := context.Background() 140 m := VPX() 141 142 defer m.Remove() 143 144 err := m.Create() 145 if err != nil { 146 t.Fatal(err) 147 } 148 149 s := m.Service.NewServer() 150 defer s.Close() 151 152 c := m.Service.client() 153 154 vm := m.Map().Any("VirtualMachine").(*VirtualMachine) 155 hs := m.Map().Get(*vm.Runtime.Host).(*HostSystem) 156 host := object.NewHostSystem(c, hs.Self) 157 158 vms := []*VirtualMachine{} 159 for _, vmref := range hs.Vm { 160 vms = append(vms, m.Map().Get(vmref).(*VirtualMachine)) 161 } 162 163 task, err := host.Destroy(ctx) 164 if err != nil { 165 t.Fatal(err) 166 } 167 168 err = task.Wait(ctx) 169 if err == nil { 170 t.Fatal("expect err because host with vms cannot be destroyed") 171 } 172 173 for _, vmref := range hs.Vm { 174 vm := m.Map().Get(vmref).(*VirtualMachine) 175 vmo := object.NewVirtualMachine(c, vm.Self) 176 177 task, err := vmo.PowerOff(ctx) 178 if err != nil { 179 t.Fatal(err) 180 } 181 182 err = task.Wait(ctx) 183 if err != nil { 184 t.Fatal(err) 185 } 186 187 task, err = vmo.Destroy(ctx) 188 if err != nil { 189 t.Fatal(err) 190 } 191 192 err = task.Wait(ctx) 193 if err != nil { 194 t.Fatal(err) 195 } 196 } 197 198 task, err = host.Destroy(ctx) 199 if err != nil { 200 t.Fatal(err) 201 } 202 203 err = task.Wait(ctx) 204 if err != nil { 205 t.Fatal(err) 206 } 207 208 hs2 := m.Map().Get(esx.HostSystem.Reference()) 209 if hs2 != nil { 210 t.Fatal("host should have been destroyed") 211 } 212 } 213 214 func TestDisconnect(t *testing.T) { 215 ctx := context.Background() 216 m := ESX() 217 218 defer m.Remove() 219 220 err := m.Create() 221 if err != nil { 222 t.Fatal(err) 223 } 224 225 s := m.Service.NewServer() 226 defer s.Close() 227 228 c := m.Service.client() 229 230 hs := m.Map().Get(esx.HostSystem.Reference()).(*HostSystem) 231 host := object.NewHostSystem(c, hs.Self) 232 233 task, err := host.Disconnect(ctx) 234 if err != nil { 235 t.Fatal(err) 236 } 237 238 err = task.Wait(ctx) 239 if err != nil { 240 t.Fatal(err) 241 } 242 243 if hs.Runtime.ConnectionState != types.HostSystemConnectionStateDisconnected { 244 t.Fatalf("expect ConnectionState to be %s; got %s", 245 types.HostSystemConnectionStateDisconnected, hs.Runtime.ConnectionState) 246 } 247 248 task, err = host.Reconnect(ctx, nil, nil) 249 if err != nil { 250 t.Fatal(err) 251 } 252 253 err = task.Wait(ctx) 254 if err != nil { 255 t.Fatal(err) 256 } 257 258 if hs.Runtime.ConnectionState != types.HostSystemConnectionStateConnected { 259 t.Fatalf("expect ConnectionState to be %s; got %s", 260 types.HostSystemConnectionStateConnected, hs.Runtime.ConnectionState) 261 } 262 }