github.com/vmware/govmomi@v0.43.0/object/search_index_test.go (about)

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