all repos

mugit @ dc62a68

🐮 git server that your cow will love

mugit/internal/config/validate_test.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
config: refactor validation, 3 months ago
1
package config
2
3
import (
4
	"testing"
5
6
	"olexsmir.xyz/x/is"
7
)
8
9
func TestCheckPort(t *testing.T) {
10
	is.Err(t, checkPort(1), nil)
11
	is.Err(t, checkPort(80), nil)
12
	is.Err(t, checkPort(65535), nil)
13
14
	is.Err(t, checkPort(0), "must be between")
15
	is.Err(t, checkPort(-1), "must be between")
16
	is.Err(t, checkPort(65536), "must be between")
17
}
18
19
func TestConfig_Validate(t *testing.T) {
20
	hostKey := "testdata/hostkey"
21
	tests := []struct {
22
		name     string
23
		expected any
24
		c        Config
25
	}{
26
		{
27
			name: "minimal",
28
			c: Config{
29
				Meta: MetaConfig{Host: "example.com"},
30
				Repo: RepoConfig{Dir: t.TempDir()},
31
			},
32
		},
33
		{
34
			name: "minimal with ssh",
35
			c: Config{
36
				Meta: MetaConfig{Host: "example.com"},
37
				Repo: RepoConfig{Dir: t.TempDir()},
38
				SSH: SSHConfig{
39
					Enable:  true,
40
					HostKey: hostKey,
41
				},
42
			},
43
		},
44
		{
45
			name: "invalid meta.host",
46
			expected: "meta.host",
47
			c: Config{
48
				Repo: RepoConfig{Dir: t.TempDir()},
49
			},
50
		},
51
		{
52
			name:     "invalid repo.dir",
53
			expected: "repo.dir",
54
			c: Config{
55
				Meta: MetaConfig{Host: "example.com"},
56
				Repo: RepoConfig{Dir: "nonexistent"},
57
			},
58
		},
59
		{
60
			name:     "invalid server port",
61
			expected: "server.port",
62
			c: Config{
63
				Meta:   MetaConfig{Host: "example.com"},
64
				Repo:   RepoConfig{Dir: t.TempDir()},
65
				Server: ServerConfig{Port: -1},
66
			},
67
		},
68
		{
69
			name:     "invalid ssh port",
70
			expected: "ssh.port",
71
			c: Config{
72
				Meta: MetaConfig{Host: "example.com"},
73
				Repo: RepoConfig{Dir: t.TempDir()},
74
				SSH: SSHConfig{
75
					Enable:  true,
76
					HostKey: hostKey,
77
					Port:    100000,
78
				},
79
			},
80
		},
81
		{
82
			name:     "same ssh and http ports",
83
			expected: "ssh.port must differ",
84
			c: Config{
85
				Meta:   MetaConfig{Host: "example.com"},
86
				Repo:   RepoConfig{Dir: t.TempDir()},
87
				SSH:    SSHConfig{Enable: true, Port: 228},
88
				Server: ServerConfig{Port: 228},
89
			},
90
		},
91
		{
92
			name:     "invalid ssh.host_key path",
93
			expected: "ssh.host_key",
94
			c: Config{
95
				Meta: MetaConfig{Host: "example.com"},
96
				Repo: RepoConfig{Dir: t.TempDir()},
97
				SSH: SSHConfig{
98
					Enable:  true,
99
					HostKey: "/somewhere",
100
				},
101
			},
102
		},
103
		{
104
			name:     "invalid mirror.interval duration format",
105
			expected: "mirror.interval: invalid duration",
106
			c: Config{
107
				Meta: MetaConfig{Host: "example.com"},
108
				Repo: RepoConfig{Dir: t.TempDir()},
109
				Mirror: MirrorConfig{
110
					Enable:   true,
111
					Interval: "asdf",
112
				},
113
			},
114
		},
115
	}
116
117
	for _, tt := range tests {
118
		t.Run(tt.name, func(t *testing.T) {
119
			tt.c.ensureDefaults()
120
			err := tt.c.validate()
121
			is.Err(t, err, tt.expected)
122
		})
123
	}
124
}