github.com/vmware/govmomi@v0.37.2/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  }