cli/cmd/cluster_test.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)
}