mirror of https://github.com/rancher/cli.git
100 lines
2.4 KiB
Go
100 lines
2.4 KiB
Go
package cmd
|
|
|
|
import (
|
|
"bytes"
|
|
"flag"
|
|
"fmt"
|
|
"net/url"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/rancher/norman/types"
|
|
managementClient "github.com/rancher/rancher/pkg/client/generated/management/v3"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/urfave/cli"
|
|
)
|
|
|
|
func TestListClusterMembers(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
now := time.Now()
|
|
|
|
userConfig := &fakeUserConfig{
|
|
FocusedClusterFunc: func() string {
|
|
return "c-fn7lc"
|
|
},
|
|
}
|
|
|
|
created := now.Format(time.RFC3339)
|
|
crtbs := &fakeCRTBLister{
|
|
ListFunc: func(opts *types.ListOpts) (*managementClient.ClusterRoleTemplateBindingCollection, error) {
|
|
return &managementClient.ClusterRoleTemplateBindingCollection{
|
|
Data: []managementClient.ClusterRoleTemplateBinding{
|
|
{
|
|
Resource: types.Resource{
|
|
ID: "c-fn7lc:creator-cluster-owner",
|
|
},
|
|
Created: created,
|
|
RoleTemplateID: "cluster-owner",
|
|
UserPrincipalID: "local://user-2p7w6",
|
|
},
|
|
{
|
|
Resource: types.Resource{
|
|
ID: "c-fn7lc:crtb-qd49d",
|
|
},
|
|
Created: created,
|
|
RoleTemplateID: "cluster-member",
|
|
GroupPrincipalID: "okta_group://b4qkhsnliz",
|
|
},
|
|
},
|
|
}, nil
|
|
},
|
|
}
|
|
|
|
principals := &fakePrincipalGetter{
|
|
ByIDFunc: func(id string) (*managementClient.Principal, error) {
|
|
id, err := url.PathUnescape(id)
|
|
require.NoError(t, err)
|
|
|
|
switch id {
|
|
case "local://user-2p7w6":
|
|
return &managementClient.Principal{
|
|
Name: "Default Admin",
|
|
LoginName: "admin",
|
|
Provider: "local",
|
|
PrincipalType: "user",
|
|
}, nil
|
|
case "okta_group://b4qkhsnliz":
|
|
return &managementClient.Principal{
|
|
Name: "DevOps",
|
|
LoginName: "devops",
|
|
Provider: "okta",
|
|
PrincipalType: "group",
|
|
}, nil
|
|
default:
|
|
return nil, fmt.Errorf("not found")
|
|
}
|
|
},
|
|
}
|
|
|
|
flagSet := flag.NewFlagSet("test", flag.ContinueOnError)
|
|
cctx := cli.NewContext(nil, flagSet, nil)
|
|
|
|
var out bytes.Buffer
|
|
|
|
err := listClusterMembers(cctx, &out, userConfig, crtbs, principals)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, out)
|
|
|
|
humanCreated := now.Format(humanTimeFormat)
|
|
want := [][]string{
|
|
{"BINDING-ID", "MEMBER", "ROLE", "CREATED"},
|
|
{"c-fn7lc:creator-cluster-owner", "Default Admin (Local User)", "cluster-owner", humanCreated},
|
|
{"c-fn7lc:crtb-qd49d", "DevOps (Okta Group)", "cluster-member", humanCreated},
|
|
}
|
|
|
|
got := parseTabWriterOutput(&out)
|
|
assert.Equal(t, want, got)
|
|
}
|