github.com/vmware/govmomi@v0.51.0/simulator/tenant_manager_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 simulator
     6  
     7  import (
     8  	"context"
     9  	"reflect"
    10  	"sort"
    11  	"strings"
    12  	"testing"
    13  
    14  	"github.com/vmware/govmomi"
    15  	"github.com/vmware/govmomi/object"
    16  	"github.com/vmware/govmomi/vim25/types"
    17  )
    18  
    19  func sortMoRefSlice(a []types.ManagedObjectReference) {
    20  	sort.SliceStable(a, func(i, j int) bool {
    21  		lhs, rhs := a[i], a[j]
    22  		switch strings.Compare(lhs.Type, rhs.Type) {
    23  		case -1:
    24  			return true
    25  		case 1:
    26  			return false
    27  		}
    28  		return lhs.Value < rhs.Value
    29  	})
    30  }
    31  
    32  func TestTenantManagerVPX(t *testing.T) {
    33  	ctx := context.Background()
    34  	m := VPX()
    35  	defer m.Remove()
    36  
    37  	err := m.Create()
    38  	if err != nil {
    39  		t.Fatal(err)
    40  	}
    41  
    42  	s := m.Service.NewServer()
    43  	defer s.Close()
    44  
    45  	c, err := govmomi.NewClient(ctx, s.URL, true)
    46  	if err != nil {
    47  		t.Fatal(err)
    48  	}
    49  
    50  	tenantManager := object.NewTenantManager(c.Client)
    51  	serviceProviderEntities := []types.ManagedObjectReference{
    52  		{Type: "VirtualMachine", Value: "vm-123"},
    53  		{Type: "HostSystem", Value: "host-1"},
    54  	}
    55  	sortMoRefSlice(serviceProviderEntities)
    56  
    57  	// "Read your writes", mark entities and verify they are marked.
    58  	err = tenantManager.MarkServiceProviderEntities(ctx, serviceProviderEntities)
    59  	if err != nil {
    60  		t.Fatal(err)
    61  	}
    62  	markedEntities, err := tenantManager.RetrieveServiceProviderEntities(ctx)
    63  	if err != nil {
    64  		t.Fatal(err)
    65  	}
    66  	sortMoRefSlice(markedEntities)
    67  	if !reflect.DeepEqual(serviceProviderEntities, markedEntities) {
    68  		t.Errorf("Requested-to-be-marked entities mismatch with acutally marked: %+v, %+v", serviceProviderEntities, markedEntities)
    69  	}
    70  
    71  	// Repeatedely mark same entities and verify they are deduped.
    72  	err = tenantManager.MarkServiceProviderEntities(ctx, serviceProviderEntities)
    73  	if err != nil {
    74  		t.Fatal(err)
    75  	}
    76  	markedEntities, err = tenantManager.RetrieveServiceProviderEntities(ctx)
    77  	if err != nil {
    78  		t.Fatal(err)
    79  	}
    80  	sortMoRefSlice(markedEntities)
    81  	if !reflect.DeepEqual(serviceProviderEntities, markedEntities) {
    82  		t.Errorf("Requested-to-be-marked entities mismatch with acutally marked: %+v, %+v", serviceProviderEntities, markedEntities)
    83  	}
    84  
    85  	// Unmark not-previously-marked entity and verify no-op.
    86  	unknownEntities := []types.ManagedObjectReference{{Type: "Folder", Value: "group-3"}}
    87  	err = tenantManager.UnmarkServiceProviderEntities(ctx, unknownEntities)
    88  	if err != nil {
    89  		t.Fatal(err)
    90  	}
    91  	markedEntities, err = tenantManager.RetrieveServiceProviderEntities(ctx)
    92  	if err != nil {
    93  		t.Fatal(err)
    94  	}
    95  	sortMoRefSlice(markedEntities)
    96  	if !reflect.DeepEqual(serviceProviderEntities, markedEntities) {
    97  		t.Errorf("Requested-to-be-marked entities mismatch with acutally marked: %+v, %+v", serviceProviderEntities, markedEntities)
    98  	}
    99  
   100  	// Unmark marked entities and verify no longer marked.
   101  	err = tenantManager.UnmarkServiceProviderEntities(ctx, serviceProviderEntities)
   102  	if err != nil {
   103  		t.Fatal(err)
   104  	}
   105  	markedEntities, err = tenantManager.RetrieveServiceProviderEntities(ctx)
   106  	if err != nil {
   107  		t.Fatal(err)
   108  	}
   109  	if len(markedEntities) > 0 {
   110  		t.Errorf("Expected all entities to be unmarked but still found marked: %+v", markedEntities)
   111  	}
   112  }