Skip to content
File

Blob: cmd/server/cli_test.go

go52 lines
1package server
2 
3import (
4 "context"
5 "testing"
6 
7 "github.com/stretchr/testify/require"
8 "github.com/urfave/cli/v3"
9)
10 
11func TestServerCLIFlagSources(t *testing.T) {
12 for _, tc := range []struct {
13 name string
14 args []string
15 want []string
16 }{
17 {
18 name: "environment list",
19 want: []string{"127.0.0.1:1113", "[::1]:1113"},
20 },
21 {
22 name: "repeated flags override environment",
23 args: []string{"--listen", "127.0.0.1:2113", "--listen-addr", "[::1]:2113"},
24 want: []string{"127.0.0.1:2113", "[::1]:2113"},
25 },
26 } {
27 t.Run(tc.name, func(t *testing.T) {
28 t.Setenv("LISTEN_ADDR", "127.0.0.1:1113,[::1]:1113")
29 t.Setenv("KV_PROVIDER", "sqlite")
30 dataDir, certDir := t.TempDir(), t.TempDir()
31 cmd := Generate()
32 called := false
33 cmd.Action = func(_ context.Context, cmd *cli.Command) error {
34 called = true
35 require.Equal(t, tc.want, cmd.StringSlice("listen-addr"))
36 require.Equal(t, "aof", cmd.String("kv-provider"))
37 require.Equal(t, dataDir, cmd.String("data-dir"))
38 require.Equal(t, certDir, cmd.String("cert-dir"))
39 require.Equal(t, "admin@example.com", cmd.String("acme_email"))
40 require.Equal(t, "hostedacme.com", cmd.String("acme_zone"))
41 return nil
42 }
43 app := &cli.Command{Name: "specter", Commands: []*cli.Command{cmd}}
44 args := []string{"specter", "server", "--data", dataDir, "--cert", certDir,
45 "--advertise", "127.0.0.1:1113", "--apex", "example.com", "--kv-provider", "aof",
46 "--acme", "acme://admin@example.com@hostedacme.com"}
47 require.NoError(t, app.Run(t.Context(), append(args, tc.args...)))
48 require.True(t, called)
49 })
50 }
51}