github.com/vmware/govmomi@v0.51.0/test/functional/issue_242_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 functional
     6  
     7  import (
     8  	"context"
     9  	"fmt"
    10  	"testing"
    11  	"time"
    12  
    13  	"github.com/vmware/govmomi/object"
    14  	"github.com/vmware/govmomi/property"
    15  	"github.com/vmware/govmomi/vim25/mo"
    16  	"github.com/vmware/govmomi/vim25/types"
    17  )
    18  
    19  func TestIssue242(t *testing.T) {
    20  	ctx, cancel := context.WithCancel(context.Background())
    21  	defer cancel()
    22  
    23  	h := NewHelper(t)
    24  	defer h.Teardown()
    25  
    26  	h.RequireVirtualCenter()
    27  
    28  	df, err := h.Datacenter().Folders(ctx)
    29  	if err != nil {
    30  		t.Fatal(err)
    31  	}
    32  
    33  	cr := h.ComputeResource()
    34  
    35  	// Get local datastores for compute resource
    36  	dss, err := h.LocalDatastores(ctx, cr)
    37  	if err != nil {
    38  		t.Fatal(err)
    39  	}
    40  	if len(dss) == 0 {
    41  		t.Fatalf("No local datastores")
    42  	}
    43  
    44  	// Get root resource pool for compute resource
    45  	rp, err := cr.ResourcePool(ctx)
    46  	if err != nil {
    47  		t.Fatal(err)
    48  	}
    49  
    50  	spec := types.VirtualMachineConfigSpec{
    51  		Name:     fmt.Sprintf("govmomi-test-%s", time.Now().Format(time.RFC3339)),
    52  		Files:    &types.VirtualMachineFileInfo{VmPathName: fmt.Sprintf("[%s]", dss[0].Name())},
    53  		NumCPUs:  1,
    54  		MemoryMB: 32,
    55  	}
    56  
    57  	// Create new VM
    58  	task, err := df.VmFolder.CreateVM(context.Background(), spec, rp, nil)
    59  	if err != nil {
    60  		t.Fatal(err)
    61  	}
    62  
    63  	info, err := task.WaitForResult(context.Background(), nil)
    64  	if err != nil {
    65  		t.Fatal(err)
    66  	}
    67  
    68  	vm := object.NewVirtualMachine(h.c, info.Result.(types.ManagedObjectReference))
    69  	defer func() {
    70  		task, err := vm.Destroy(context.Background())
    71  		if err != nil {
    72  			panic(err)
    73  		}
    74  		err = task.Wait(context.Background())
    75  		if err != nil {
    76  			panic(err)
    77  		}
    78  	}()
    79  
    80  	// Mark VM as template
    81  	err = vm.MarkAsTemplate(context.Background())
    82  	if err != nil {
    83  		t.Fatal(err)
    84  	}
    85  
    86  	// Get "environmentBrowser" property for VM template
    87  	var mvm mo.VirtualMachine
    88  	err = property.DefaultCollector(h.c).RetrieveOne(ctx, vm.Reference(), []string{"environmentBrowser"}, &mvm)
    89  	if err != nil {
    90  		t.Fatal(err)
    91  	}
    92  }