github.com/vmware/govmomi@v0.51.0/ssoadmin/client_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 ssoadmin_test
     6  
     7  import (
     8  	"context"
     9  	"fmt"
    10  	"os"
    11  	"testing"
    12  
    13  	"github.com/stretchr/testify/require"
    14  
    15  	lsim "github.com/vmware/govmomi/lookup/simulator"
    16  	"github.com/vmware/govmomi/simulator"
    17  	"github.com/vmware/govmomi/ssoadmin"
    18  	_ "github.com/vmware/govmomi/ssoadmin/simulator"
    19  	"github.com/vmware/govmomi/ssoadmin/types"
    20  	_ "github.com/vmware/govmomi/sts/simulator"
    21  	"github.com/vmware/govmomi/vim25"
    22  )
    23  
    24  func TestClient(t *testing.T) {
    25  	t.Run("Happy path using lookup service", func(t *testing.T) {
    26  		simulator.Test(func(ctx context.Context, client *vim25.Client) {
    27  			c, err := ssoadmin.NewClient(ctx, client)
    28  			require.NoError(t, err)
    29  
    30  			verifyClient(t, ctx, c)
    31  		})
    32  	})
    33  	t.Run("With DNS errors, lookup client should rewrite URLs to VC's Host", func(t *testing.T) {
    34  		simulator.Test(func(ctx context.Context, client *vim25.Client) {
    35  			lsim.UnresolveLookupServiceURLs(ctx)
    36  
    37  			c, err := ssoadmin.NewClient(ctx, client)
    38  			require.NoError(t, err)
    39  
    40  			verifyClient(t, ctx, c)
    41  		})
    42  	})
    43  	t.Run("With Envoy sidecar and a malfunctioning lookup service, ssoadmin client creation should still succeed", func(t *testing.T) {
    44  		model := simulator.VPX()
    45  		model.Create()
    46  		simulator.Test(func(ctx context.Context, client *vim25.Client) {
    47  			// Map Envoy sidecar on the same port as the vcsim client.
    48  			os.Setenv("GOVMOMI_ENVOY_SIDECAR_PORT", client.Client.URL().Port())
    49  			os.Setenv("GOVMOMI_ENVOY_SIDECAR_HOST", client.Client.URL().Hostname())
    50  
    51  			lsim.BreakLookupServiceURLs(ctx)
    52  
    53  			c, err := ssoadmin.NewClient(ctx, client)
    54  			require.NoError(t, err)
    55  
    56  			verifyClient(t, ctx, c)
    57  		}, model)
    58  	})
    59  	t.Run("System.Anonymous methods", func(t *testing.T) {
    60  		simulator.Test(func(ctx context.Context, client *vim25.Client) {
    61  			c, err := ssoadmin.NewClient(ctx, client)
    62  			require.NoError(t, err)
    63  
    64  			c.Jar = nil // session cookie will not be sent
    65  
    66  			_, err = c.FindUser(ctx, "testuser")
    67  			require.Error(t, err) // NotAuthenticated
    68  
    69  			certs, err := c.GetTrustedCertificates(ctx)
    70  			require.NoError(t, err)
    71  			fmt.Println(certs[0])
    72  			require.NotEmpty(t, certs)
    73  		})
    74  	})
    75  }
    76  
    77  func verifyClient(t *testing.T, ctx context.Context, c *ssoadmin.Client) {
    78  	err := c.CreatePersonUser(ctx, "testuser", types.AdminPersonDetails{FirstName: "test", LastName: "user"}, "password")
    79  	require.NoError(t, err)
    80  
    81  	user, err := c.FindUser(ctx, "testuser")
    82  	require.NoError(t, err)
    83  	require.Equal(t, &types.AdminUser{Id: types.PrincipalId{Name: "testuser", Domain: "vsphere.local"}, Kind: "person"}, user)
    84  }