github.com/vmware/govmomi@v0.51.0/object/search_index_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 object
     6  
     7  import (
     8  	"context"
     9  	"fmt"
    10  	"reflect"
    11  	"testing"
    12  
    13  	"github.com/vmware/govmomi/test"
    14  	"github.com/vmware/govmomi/vim25/mo"
    15  )
    16  
    17  func TestSearch(t *testing.T) {
    18  	c := test.NewAuthenticatedClient(t)
    19  	s := NewSearchIndex(c)
    20  
    21  	ref, err := s.FindChild(context.Background(), NewRootFolder(c), "ha-datacenter")
    22  	if err != nil {
    23  		t.Fatal(err)
    24  	}
    25  
    26  	dc, ok := ref.(*Datacenter)
    27  	if !ok {
    28  		t.Errorf("Expected Datacenter: %#v", ref)
    29  	}
    30  
    31  	folders, err := dc.Folders(context.Background())
    32  	if err != nil {
    33  		t.Fatal(err)
    34  	}
    35  
    36  	ref, err = s.FindChild(context.Background(), folders.DatastoreFolder, "datastore1")
    37  	if err != nil {
    38  		t.Fatal(err)
    39  	}
    40  
    41  	_, ok = ref.(*Datastore)
    42  	if !ok {
    43  		t.Errorf("Expected Datastore: %#v", ref)
    44  	}
    45  
    46  	ref, err = s.FindByInventoryPath(context.Background(), "/ha-datacenter/network/VM Network")
    47  	if err != nil {
    48  		t.Fatal(err)
    49  	}
    50  
    51  	network, ok := ref.(*Network)
    52  	if !ok {
    53  		t.Errorf("Expected Network: %#v", ref)
    54  	}
    55  	if network.GetInventoryPath() != "/ha-datacenter/network/VM Network" {
    56  		t.Errorf("%q != %q\n", network.GetInventoryPath(), "/ha-datacenter/network/VM Network")
    57  	}
    58  
    59  	crs, err := folders.HostFolder.Children(context.Background())
    60  	if err != nil {
    61  		t.Fatal(err)
    62  	}
    63  	if len(crs) != 0 {
    64  		var cr mo.ComputeResource
    65  		ref = crs[0]
    66  		err = s.Properties(context.Background(), ref.Reference(), []string{"host"}, &cr)
    67  		if err != nil {
    68  			t.Fatal(err)
    69  		}
    70  
    71  		var host mo.HostSystem
    72  		ref = NewHostSystem(c, cr.Host[0])
    73  		err = s.Properties(context.Background(), ref.Reference(), []string{"name", "hardware", "config"}, &host)
    74  		if err != nil {
    75  			t.Fatal(err)
    76  		}
    77  
    78  		dnsConfig := host.Config.Network.DnsConfig.GetHostDnsConfig()
    79  		dnsName := fmt.Sprintf("%s.%s", dnsConfig.HostName, dnsConfig.DomainName)
    80  		shost, err := s.FindByDnsName(context.Background(), dc, dnsName, false)
    81  		if err != nil {
    82  			t.Fatal(err)
    83  		}
    84  		if !reflect.DeepEqual(ref, shost) {
    85  			t.Errorf("%#v != %#v\n", ref, shost)
    86  		}
    87  
    88  		shost, err = s.FindByUuid(context.Background(), dc, host.Hardware.SystemInfo.Uuid, false, nil)
    89  		if err != nil {
    90  			t.Fatal(err)
    91  		}
    92  		if !reflect.DeepEqual(ref, shost) {
    93  			t.Errorf("%#v != %#v\n", ref, shost)
    94  		}
    95  	}
    96  
    97  	vms, err := folders.VmFolder.Children(context.Background())
    98  	if err != nil {
    99  		t.Fatal(err)
   100  	}
   101  	if len(vms) != 0 {
   102  		var vm mo.VirtualMachine
   103  		ref = vms[0]
   104  		err = s.Properties(context.Background(), ref.Reference(), []string{"config", "guest"}, &vm)
   105  		if err != nil {
   106  			t.Fatal(err)
   107  		}
   108  		svm, err := s.FindByDatastorePath(context.Background(), dc, vm.Config.Files.VmPathName)
   109  		if err != nil {
   110  			t.Fatal(err)
   111  		}
   112  		if !reflect.DeepEqual(ref, svm) {
   113  			t.Errorf("%#v != %#v\n", ref, svm)
   114  		}
   115  
   116  		svm, err = s.FindByUuid(context.Background(), dc, vm.Config.Uuid, true, nil)
   117  		if err != nil {
   118  			t.Fatal(err)
   119  		}
   120  		if !reflect.DeepEqual(ref, svm) {
   121  			t.Errorf("%#v != %#v\n", ref, svm)
   122  		}
   123  
   124  		if vm.Guest.HostName != "" {
   125  			svm, err := s.FindByDnsName(context.Background(), dc, vm.Guest.HostName, true)
   126  			if err != nil {
   127  				t.Fatal(err)
   128  			}
   129  			if !reflect.DeepEqual(ref, svm) {
   130  				t.Errorf("%#v != %#v\n", ref, svm)
   131  			}
   132  		}
   133  
   134  		if vm.Guest.IpAddress != "" {
   135  			svm, err := s.FindByIp(context.Background(), dc, vm.Guest.IpAddress, true)
   136  			if err != nil {
   137  				t.Fatal(err)
   138  			}
   139  			if !reflect.DeepEqual(ref, svm) {
   140  				t.Errorf("%#v != %#v\n", ref, svm)
   141  			}
   142  		}
   143  	}
   144  }