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