summaryrefslogtreecommitdiff
path: root/internal/cli/authkeyflags_test.go
blob: 64c76c35b98a04aee8618b132aaa269b59f23840 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package cli

import (
	"flag"
	"testing"

	"github.com/mimecast/dtail/internal/config"
)

func TestApplyAuthKeyPathCompatibilityLegacyOnly(t *testing.T) {
	args := config.Args{}

	if warning := ApplyAuthKeyPathCompatibility(&args, "/tmp/legacy.pem", false); warning != "" {
		t.Fatalf("unexpected warning: %q", warning)
	}

	if got, want := args.SSHPrivateKeyFilePath, "/tmp/legacy.pem"; got != want {
		t.Fatalf("unexpected auth key path: want %q got %q", want, got)
	}
}

func TestApplyAuthKeyPathCompatibilityPrefersExplicitAuthKeyPath(t *testing.T) {
	tests := []struct {
		name string
		args []string
		want string
		warn bool
	}{
		{
			name: "legacy then auth",
			args: []string{"-key", "/tmp/legacy.pem", "-auth-key-path", "/tmp/current.pem"},
			want: "/tmp/current.pem",
			warn: true,
		},
		{
			name: "auth then legacy",
			args: []string{"-auth-key-path", "/tmp/current.pem", "-key", "/tmp/legacy.pem"},
			want: "/tmp/current.pem",
			warn: true,
		},
		{
			name: "explicit blank auth key path keeps blank",
			args: []string{"-key", "/tmp/legacy.pem", "-auth-key-path="},
			want: "",
			warn: true,
		},
	}

	for _, tc := range tests {
		t.Run(tc.name, func(t *testing.T) {
			fs := flag.NewFlagSet(t.Name(), flag.ContinueOnError)
			var args config.Args
			var legacyKey string

			BindAuthKeyFlags(fs, &legacyKey, &args)
			if err := fs.Parse(tc.args); err != nil {
				t.Fatalf("Parse failed: %v", err)
			}

			var authKeyPathSet bool
			fs.Visit(func(f *flag.Flag) {
				if f.Name == "auth-key-path" {
					authKeyPathSet = true
				}
			})

			warning := ApplyAuthKeyPathCompatibility(&args, legacyKey, authKeyPathSet)
			if gotWarn := warning != ""; gotWarn != tc.warn {
				t.Fatalf("unexpected warning presence: want %v got %v (%q)", tc.warn, gotWarn, warning)
			}
			if got, want := args.SSHPrivateKeyFilePath, tc.want; got != want {
				t.Fatalf("unexpected auth key path: want %q got %q", want, got)
			}
		})
	}
}

func TestBindAuthKeyFlagsHelpText(t *testing.T) {
	fs := flag.NewFlagSet(t.Name(), flag.ContinueOnError)
	var args config.Args
	var legacyKey string

	BindAuthKeyFlags(fs, &legacyKey, &args)

	if got, want := fs.Lookup("key").Usage, "Deprecated alias for -auth-key-path"; got != want {
		t.Fatalf("unexpected legacy flag help: want %q got %q", want, got)
	}
	if got, want := fs.Lookup("auth-key-path").Usage, authKeyPathHelpText; got != want {
		t.Fatalf("unexpected auth-key-path help: want %q got %q", want, got)
	}
	if got, want := fs.Lookup("auth-key-path").DefValue, ""; got != want {
		t.Fatalf("unexpected auth-key-path default: want %q got %q", want, got)
	}
}