github.com/vmware/govmomi@v0.51.0/test/functional/helper.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 functional
     6  
     7  import (
     8  	"context"
     9  	"testing"
    10  
    11  	"github.com/vmware/govmomi/find"
    12  	"github.com/vmware/govmomi/object"
    13  	"github.com/vmware/govmomi/property"
    14  	"github.com/vmware/govmomi/test"
    15  	"github.com/vmware/govmomi/vim25"
    16  	"github.com/vmware/govmomi/vim25/mo"
    17  	"github.com/vmware/govmomi/vim25/types"
    18  )
    19  
    20  type Helper struct {
    21  	*testing.T
    22  
    23  	c   *vim25.Client
    24  	f   *find.Finder
    25  	fns []func()
    26  }
    27  
    28  func NewHelper(t *testing.T) *Helper {
    29  	h := &Helper{
    30  		T: t,
    31  
    32  		c:   test.NewAuthenticatedClient(t),
    33  		fns: make([]func(), 0),
    34  	}
    35  
    36  	h.f = find.NewFinder(h.c, true)
    37  
    38  	return h
    39  }
    40  
    41  func (h *Helper) Defer(fn func()) {
    42  	h.fns = append(h.fns, fn)
    43  }
    44  
    45  func (h *Helper) Teardown() {
    46  	for _, fn := range h.fns {
    47  		fn()
    48  	}
    49  }
    50  
    51  func (h *Helper) RequireVirtualCenter() {
    52  	var expect = "VirtualCenter"
    53  	var actual = h.c.ServiceContent.About.ApiType
    54  	if actual != expect {
    55  		h.Skipf("Requires %s, running against %s", expect, actual)
    56  	}
    57  }
    58  
    59  func (h *Helper) Datacenter() *object.Datacenter {
    60  	dc, err := h.f.DefaultDatacenter(context.Background())
    61  	if err != nil {
    62  		h.Fatal(err)
    63  	}
    64  
    65  	h.f.SetDatacenter(dc)
    66  
    67  	return dc
    68  }
    69  
    70  func (h *Helper) DatacenterFolders() *object.DatacenterFolders {
    71  	df, err := h.Datacenter().Folders(context.Background())
    72  	if err != nil {
    73  		h.Fatal(err)
    74  	}
    75  
    76  	return df
    77  }
    78  
    79  func (h *Helper) ComputeResource() *object.ComputeResource {
    80  	cr, err := h.f.DefaultComputeResource(context.Background())
    81  	if err != nil {
    82  		h.Fatal(err)
    83  	}
    84  
    85  	return cr
    86  }
    87  
    88  func (h *Helper) LocalDatastores(ctx context.Context, cr *object.ComputeResource) ([]*object.Datastore, error) {
    89  	// List datastores for compute resource
    90  	dss, err := cr.Datastores(ctx)
    91  	if err != nil {
    92  		return nil, err
    93  	}
    94  
    95  	// Filter local datastores
    96  	var ldss []*object.Datastore
    97  	for _, ds := range dss {
    98  		var mds mo.Datastore
    99  		err = property.DefaultCollector(h.c).RetrieveOne(ctx, ds.Reference(), nil, &mds)
   100  		if err != nil {
   101  			return nil, err
   102  		}
   103  
   104  		switch i := mds.Info.(type) {
   105  		case *types.VmfsDatastoreInfo:
   106  			if i.Vmfs.Local != nil && *i.Vmfs.Local {
   107  				break
   108  			}
   109  		default:
   110  			continue
   111  		}
   112  
   113  		ds.InventoryPath = mds.Name
   114  		ldss = append(ldss, ds)
   115  	}
   116  
   117  	return ldss, nil
   118  }