dex/functional/dexctl_test.go

93 lines
2 KiB
Go

package functional
import (
"bytes"
"io"
"io/ioutil"
"os"
"os/exec"
"strings"
"testing"
)
var connConfigExample = []byte(`[
{
"type": "local",
"id": "local",
"passwordInfos": [
{
"userId":"elroy-id",
"passwordPlaintext": "bones"
},
{
"userId":"penny",
"passwordPlaintext": "kibble"
}
]
}
]`)
func TestDexctlCommands(t *testing.T) {
dsn := os.Getenv("DEX_TEST_DSN")
if dsn == "" {
t.Fatal("Unable to proceed with empty env var DEX_TEST_DSN")
}
if strings.HasPrefix(dsn, "sqlite3://") {
t.Skip("only test dexctl conmand with postgres")
}
tempFile, err := ioutil.TempFile("", "dexctl_functional_tests_")
if err != nil {
t.Fatal(err)
}
connConfig := tempFile.Name()
defer os.Remove(connConfig)
if _, err := tempFile.Write(connConfigExample); err != nil {
t.Fatal(err)
}
tempFile.Close()
tests := []struct {
args []string
env []string
expErr bool
stdin io.Reader
}{
{
args: []string{"new-client", "https://example.com/callback"},
env: []string{"DEXCTL_DB_URL=" + dsn},
},
{
args: []string{"new-client", "--db-url", dsn, "https://example.com/callback"},
},
{
args: []string{"set-connector-configs", connConfig},
env: []string{"DEXCTL_DB_URL=" + dsn},
},
{
args: []string{"set-connector-configs", "--db-url", dsn, connConfig},
},
{
args: []string{"set-connector-configs", "--db-url", dsn, "-"},
stdin: bytes.NewReader(connConfigExample),
},
{
args: []string{"set-connector-configs", "-"},
env: []string{"DEXCTL_DB_URL=" + dsn},
stdin: bytes.NewReader(connConfigExample),
},
}
for _, tt := range tests {
cmd := exec.Command("../bin/dexctl", tt.args...)
cmd.Stdin = tt.stdin
cmd.Env = tt.env
out, err := cmd.CombinedOutput()
if !tt.expErr && err != nil {
t.Errorf("cmd 'dexctl %s' failed: %v %s", strings.Join(tt.args, " "), err, out)
} else if tt.expErr && err == nil {
t.Errorf("expected cmd 'dexctl %s' to fail", strings.Join(tt.args, " "))
}
}
}