File
Blob: cmd/server/cli_test.go
| 1 | package server |
| 2 | |
| 3 | import ( |
| 4 | "context" |
| 5 | "testing" |
| 6 | |
| 7 | "github.com/stretchr/testify/require" |
| 8 | "github.com/urfave/cli/v3" |
| 9 | ) |
| 10 | |
| 11 | func 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 | } |