gitlabhq/gitlab-shell

View on GitHub
internal/command/authorizedprincipals/authorized_principals_test.go

Summary

Maintainability
A
0 mins
Test Coverage
package authorizedprincipals

import (
    "bytes"
    "context"
    "testing"

    "github.com/stretchr/testify/require"

    "gitlab.com/gitlab-org/gitlab-shell/v14/internal/command/commandargs"
    "gitlab.com/gitlab-org/gitlab-shell/v14/internal/command/readwriter"
    "gitlab.com/gitlab-org/gitlab-shell/v14/internal/config"
)

func TestExecute(t *testing.T) {
    defaultConfig := &config.Config{RootDir: "/tmp"}

    testCases := []struct {
        desc           string
        arguments      *commandargs.AuthorizedPrincipals
        expectedOutput string
    }{
        {
            desc:           "With single principal",
            arguments:      &commandargs.AuthorizedPrincipals{KeyId: "key", Principals: []string{"principal"}},
            expectedOutput: "command=\"/tmp/bin/gitlab-shell username-key\",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty principal\n",
        },
        {
            desc:           "With multiple principals",
            arguments:      &commandargs.AuthorizedPrincipals{KeyId: "key", Principals: []string{"principal-1", "principal-2"}},
            expectedOutput: "command=\"/tmp/bin/gitlab-shell username-key\",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty principal-1\ncommand=\"/tmp/bin/gitlab-shell username-key\",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty principal-2\n",
        },
    }

    for _, tc := range testCases {
        t.Run(tc.desc, func(t *testing.T) {
            buffer := &bytes.Buffer{}

            cmd := &Command{
                Config:     defaultConfig,
                Args:       tc.arguments,
                ReadWriter: &readwriter.ReadWriter{Out: buffer},
            }

            _, err := cmd.Execute(context.Background())

            require.NoError(t, err)
            require.Equal(t, tc.expectedOutput, buffer.String())
        })
    }
}