github.com/vmware/govmomi@v0.51.0/simulator/user_directory_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  	"testing"
    10  
    11  	"github.com/vmware/govmomi"
    12  	"github.com/vmware/govmomi/simulator/esx"
    13  	"github.com/vmware/govmomi/vim25/methods"
    14  	"github.com/vmware/govmomi/vim25/types"
    15  )
    16  
    17  func TestUserDirectory(t *testing.T) {
    18  	s := New(NewServiceInstance(NewContext(), esx.ServiceContent, esx.RootFolder))
    19  
    20  	ts := s.NewServer()
    21  	defer ts.Close()
    22  
    23  	ctx := context.Background()
    24  
    25  	c, err := govmomi.NewClient(ctx, ts.URL, true)
    26  	if err != nil {
    27  		t.Fatal(err)
    28  	}
    29  
    30  	var tests = []struct {
    31  		findUsers  bool
    32  		findGroups bool
    33  	}{
    34  		{true, true},
    35  		{true, false},
    36  		{false, true},
    37  		{false, false},
    38  	}
    39  
    40  	ref := *c.ServiceContent.UserDirectory
    41  
    42  	for _, test := range tests {
    43  		req := types.RetrieveUserGroups{
    44  			This:       ref,
    45  			SearchStr:  "root",
    46  			ExactMatch: true,
    47  			FindUsers:  test.findUsers,
    48  			FindGroups: test.findGroups,
    49  		}
    50  
    51  		result, err := methods.RetrieveUserGroups(ctx, c.Client, &req)
    52  		if err != nil {
    53  			t.Fatal(err)
    54  		}
    55  
    56  		expectedSize := 0
    57  		if test.findGroups {
    58  			expectedSize++
    59  		}
    60  		if test.findUsers {
    61  			expectedSize++
    62  		}
    63  
    64  		if len(result.Returnval) != expectedSize {
    65  			t.Fatalf("expect search result for root is %d; got %d", expectedSize, len(result.Returnval))
    66  		}
    67  
    68  		for _, u := range result.Returnval {
    69  			if u.GetUserSearchResult().Principal != "root" {
    70  				t.Fatalf("expect principal to be root; got %s", u.GetUserSearchResult().Principal)
    71  			}
    72  			if !test.findGroups && u.GetUserSearchResult().Group {
    73  				t.Fatal("expect search result is non-group; got group")
    74  			}
    75  			if !test.findUsers && !u.GetUserSearchResult().Group {
    76  				t.Fatal("expect search result is non-user; got user")
    77  			}
    78  		}
    79  	}
    80  }
    81  
    82  func TestUserDirectoryExactlyMatch(t *testing.T) {
    83  	s := New(NewServiceInstance(NewContext(), esx.ServiceContent, esx.RootFolder))
    84  
    85  	ts := s.NewServer()
    86  	defer ts.Close()
    87  
    88  	ctx := context.Background()
    89  
    90  	c, err := govmomi.NewClient(ctx, ts.URL, true)
    91  	if err != nil {
    92  		t.Fatal(err)
    93  	}
    94  
    95  	var tests = []struct {
    96  		exactly      bool
    97  		search       string
    98  		expectedSize int
    99  	}{
   100  		{true, "root", 2},
   101  		{false, "ROO", 2},
   102  	}
   103  
   104  	ref := *c.ServiceContent.UserDirectory
   105  
   106  	for _, test := range tests {
   107  		req := types.RetrieveUserGroups{
   108  			This:       ref,
   109  			SearchStr:  test.search,
   110  			ExactMatch: test.exactly,
   111  			FindUsers:  true,
   112  			FindGroups: true,
   113  		}
   114  
   115  		result, err := methods.RetrieveUserGroups(ctx, c.Client, &req)
   116  		if err != nil {
   117  			t.Fatal(err)
   118  		}
   119  
   120  		if err != nil {
   121  			t.Fatal(err)
   122  		}
   123  
   124  		if len(result.Returnval) != test.expectedSize {
   125  			t.Fatalf("expect result contains %d results; got %d", test.expectedSize, len(result.Returnval))
   126  		}
   127  	}
   128  }