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 }