mirror of
https://github.com/opentffoundation/opentf.git
synced 2026-03-03 14:00:59 -05:00
This introduces two new verbs to the credentials helper protocol to store and forget credentials, and uses them to implement StoreForHost and ForgetForHost.
84 lines
2.1 KiB
Go
84 lines
2.1 KiB
Go
package auth
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/terraform/svchost"
|
|
)
|
|
|
|
func TestHelperProgramCredentialsSource(t *testing.T) {
|
|
wd, err := os.Getwd()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
program := filepath.Join(wd, "testdata/test-helper")
|
|
t.Logf("testing with helper at %s", program)
|
|
|
|
src := HelperProgramCredentialsSource(program)
|
|
|
|
t.Run("happy path", func(t *testing.T) {
|
|
creds, err := src.ForHost(svchost.Hostname("example.com"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if tokCreds, isTok := creds.(HostCredentialsToken); isTok {
|
|
if got, want := string(tokCreds), "example-token"; got != want {
|
|
t.Errorf("wrong token %q; want %q", got, want)
|
|
}
|
|
} else {
|
|
t.Errorf("wrong type of credentials %T", creds)
|
|
}
|
|
})
|
|
t.Run("no credentials", func(t *testing.T) {
|
|
creds, err := src.ForHost(svchost.Hostname("nothing.example.com"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if creds != nil {
|
|
t.Errorf("got credentials; want nil")
|
|
}
|
|
})
|
|
t.Run("unsupported credentials type", func(t *testing.T) {
|
|
creds, err := src.ForHost(svchost.Hostname("other-cred-type.example.com"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if creds != nil {
|
|
t.Errorf("got credentials; want nil")
|
|
}
|
|
})
|
|
t.Run("lookup error", func(t *testing.T) {
|
|
_, err := src.ForHost(svchost.Hostname("fail.example.com"))
|
|
if err == nil {
|
|
t.Error("completed successfully; want error")
|
|
}
|
|
})
|
|
t.Run("store happy path", func(t *testing.T) {
|
|
err := src.StoreForHost(svchost.Hostname("example.com"), HostCredentialsToken("example-token"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
})
|
|
t.Run("store error", func(t *testing.T) {
|
|
err := src.StoreForHost(svchost.Hostname("fail.example.com"), HostCredentialsToken("example-token"))
|
|
if err == nil {
|
|
t.Error("completed successfully; want error")
|
|
}
|
|
})
|
|
t.Run("forget happy path", func(t *testing.T) {
|
|
err := src.ForgetForHost(svchost.Hostname("example.com"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
})
|
|
t.Run("forget error", func(t *testing.T) {
|
|
err := src.ForgetForHost(svchost.Hostname("fail.example.com"))
|
|
if err == nil {
|
|
t.Error("completed successfully; want error")
|
|
}
|
|
})
|
|
}
|