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 }