Files
narratio/internal/adapters/subprocess/credentials_test.go

52 lines
2.0 KiB
Go

package subprocess
import (
"reflect"
"testing"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
)
func TestCredentialEnvironmentUsesCapturedReferences(t *testing.T) {
t.Setenv("CUSTOM_ALPHA_KEY", "alpha-value")
t.Setenv("SECOND_PROVIDER_TOKEN", "second-value")
t.Setenv("UNSELECTED_SECRET", "unselected-value")
type configuration struct {
Credentials []configkit.Secret `yaml:"credentials"`
}
loaded, err := configkit.Load[configuration](configkit.Bytes("credentials.yml", []byte("credentials: [CUSTOM_ALPHA_KEY, SECOND_PROVIDER_TOKEN, CUSTOM_ALPHA_KEY]\n")))
if err != nil {
t.Fatal(err)
}
t.Setenv("CUSTOM_ALPHA_KEY", "later-value")
overrides, names, err := CredentialEnvironment(loaded.Config.Credentials)
if err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(overrides, map[string]string{"CUSTOM_ALPHA_KEY": "alpha-value", "SECOND_PROVIDER_TOKEN": "second-value"}) ||
!reflect.DeepEqual(names, []string{"CUSTOM_ALPHA_KEY", "SECOND_PROVIDER_TOKEN"}) {
t.Fatalf("credential selection = %#v, %#v", overrides, names)
}
overrides["CUSTOM_ALPHA_KEY"] = "modified"
names[0] = "modified"
again, againNames, err := CredentialEnvironment(loaded.Config.Credentials)
if err != nil || again["CUSTOM_ALPHA_KEY"] != "alpha-value" || againNames[0] != "CUSTOM_ALPHA_KEY" {
t.Fatalf("credential conversion retained mutable result: %#v, %#v, %v", again, againNames, err)
}
}
func TestCredentialEnvironmentHandlesEmptyAndUnresolvedReferences(t *testing.T) {
for _, credentials := range [][]configkit.Secret{nil, {}} {
overrides, names, err := CredentialEnvironment(credentials)
if err != nil || len(overrides) != 0 || len(names) != 0 {
t.Fatalf("empty credentials = %#v, %#v, %v", overrides, names, err)
}
}
for _, credentials := range [][]configkit.Secret{{configkit.SecretEnv("UNRESOLVED_KEY")}, {{}}} {
overrides, names, err := CredentialEnvironment(credentials)
if err == nil || overrides != nil || names != nil {
t.Fatalf("unresolved credentials = %#v, %#v, %v", overrides, names, err)
}
}
}