mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-28 01:41:48 -06:00
87 lines
2.2 KiB
Go
87 lines
2.2 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package command
|
|
|
|
import (
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/mitchellh/cli"
|
|
|
|
svchost "github.com/hashicorp/terraform-svchost"
|
|
svcauth "github.com/hashicorp/terraform-svchost/auth"
|
|
"github.com/hashicorp/terraform-svchost/disco"
|
|
"github.com/opentofu/opentofu/internal/command/cliconfig"
|
|
)
|
|
|
|
func TestLogout(t *testing.T) {
|
|
workDir := t.TempDir()
|
|
|
|
ui := cli.NewMockUi()
|
|
credsSrc := cliconfig.EmptyCredentialsSourceForTests(filepath.Join(workDir, "credentials.tfrc.json"))
|
|
|
|
c := &LogoutCommand{
|
|
Meta: Meta{
|
|
Ui: ui,
|
|
Services: disco.NewWithCredentialsSource(credsSrc),
|
|
},
|
|
}
|
|
|
|
t.Run("with no hostname", func(t *testing.T) {
|
|
status := c.Run([]string{})
|
|
|
|
if status != 1 {
|
|
t.Fatalf("unexpected error code %d\nstderr:\n%s", status, ui.ErrorWriter.String())
|
|
}
|
|
|
|
if !strings.Contains(ui.ErrorWriter.String(), "The logout command expects exactly one argument") {
|
|
t.Errorf("unexpected error message: %s", ui.ErrorWriter.String())
|
|
}
|
|
})
|
|
|
|
testCases := []struct {
|
|
// Hostname to associate a pre-stored token
|
|
hostname string
|
|
// Command-line arguments
|
|
args []string
|
|
// true iff the token at hostname should be removed by the command
|
|
shouldRemove bool
|
|
}{
|
|
// Can remove token for a hostname
|
|
{"tfe.example.com", []string{"tfe.example.com"}, true},
|
|
|
|
// Logout does not remove tokens for other hostnames
|
|
{"tfe.example.com", []string{"other-tfe.acme.com"}, false},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
host := svchost.Hostname(tc.hostname)
|
|
token := svcauth.HostCredentialsToken("some-token")
|
|
err := credsSrc.StoreForHost(host, token)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error storing credentials: %s", err)
|
|
}
|
|
|
|
status := c.Run(tc.args)
|
|
if status != 0 {
|
|
t.Fatalf("unexpected error code %d\nstderr:\n%s", status, ui.ErrorWriter.String())
|
|
}
|
|
|
|
creds, err := credsSrc.ForHost(host)
|
|
if err != nil {
|
|
t.Errorf("failed to retrieve credentials: %s", err)
|
|
}
|
|
if tc.shouldRemove {
|
|
if creds != nil {
|
|
t.Errorf("wrong token %q; should have no token", creds.Token())
|
|
}
|
|
} else {
|
|
if got, want := creds.Token(), "some-token"; got != want {
|
|
t.Errorf("wrong token %q; want %q", got, want)
|
|
}
|
|
}
|
|
}
|
|
}
|