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 }