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  }