1// go:build unit
2package config
3
4import (
5 "strings"
6 "testing"
7
8 "github.com/google/go-cmp/cmp"
9)
10
11func TestFileParsing(t *testing.T) {
12 testCases := []struct {
13 name string
14 config string
15 expectedConfig *configuration
16 }{
17 {
18 name: "minimal scan",
19 config: `scan "/srv/git"`,
20 expectedConfig: &configuration{
21 Scans: []*scan{
22 {
23 Public: false,
24 Path: "/srv/git",
25 },
26 },
27 ListenAddr: defaultAddr(),
28 Repositories: []*GitRepositoryConfiguration{},
29 },
30 },
31 {
32 name: "complete scan",
33 config: `
34scan "/srv/git" {
35 public true
36}`,
37 expectedConfig: &configuration{
38 Scans: []*scan{
39 {
40 Public: true,
41 Path: "/srv/git",
42 },
43 },
44 ListenAddr: defaultAddr(),
45 Repositories: []*GitRepositoryConfiguration{},
46 },
47 },
48 {
49 name: "minimal repository",
50 config: `repository /srv/git/cerrado.git`,
51 expectedConfig: &configuration{
52 Scans: defaultScans(),
53 ListenAddr: defaultAddr(),
54 Repositories: []*GitRepositoryConfiguration{
55 {
56 Name: "cerrado.git",
57 Path: "/srv/git/cerrado.git",
58 Description: "",
59 Public: false,
60 About: "README.md",
61 },
62 },
63 },
64 },
65 {
66 name: "complete repository",
67 config: `
68repository /srv/git/cerrado.git {
69 name cerrado
70 description "Single person forge"
71 public true
72 about readme.txt
73}`,
74 expectedConfig: &configuration{
75 Scans: defaultScans(),
76 ListenAddr: defaultAddr(),
77 Repositories: []*GitRepositoryConfiguration{
78 {
79 Name: "cerrado",
80 Path: "/srv/git/cerrado.git",
81 Description: "Single person forge",
82 Public: true,
83 About: "readme.txt",
84 },
85 },
86 },
87 },
88 {
89 name: "minimal listen",
90 config: ``,
91 expectedConfig: &configuration{
92 Scans: defaultScans(),
93 ListenAddr: defaultAddr(),
94 Repositories: []*GitRepositoryConfiguration{},
95 },
96 },
97 {
98 name: "complete listen",
99 config: `listen-addr unix://var/run/cerrado/cerrado.sock`,
100 expectedConfig: &configuration{
101 Scans: defaultScans(),
102 ListenAddr: "unix://var/run/cerrado/cerrado.sock",
103 Repositories: []*GitRepositoryConfiguration{},
104 },
105 },
106 {
107 name: "complete",
108 config: `
109listen-addr unix://var/run/cerrado/cerrado.sock
110passphrase $2a$14$VnB/ZcB1DUDkMnosRA6Y7.dj8h5eroslDxTeXlLwfQX/x86mh6WAq
111aes-key 8XHptZxSWCGs1m7QzztX5zNQ7D9NiQevVX0DaUTNMbDpRwFzoJiB0U7K6O/kqIt01jJVgzBUfiR8ES46ZLLb4w==
112syntax-highlight monokailight
113order-by lastcommit-desc
114remove-suffix true
115
116scan "/srv/git" {
117 public true
118}
119
120repository /srv/git/linux.git
121
122repository /srv/git/cerrado.git {
123 name cerrado
124 description "Single person forge"
125 public true
126 about readme.txt
127}`,
128 expectedConfig: &configuration{
129 Scans: []*scan{
130 {
131 Public: true,
132 Path: "/srv/git",
133 },
134 },
135 ListenAddr: "unix://var/run/cerrado/cerrado.sock",
136 Passphrase: "$2a$14$VnB/ZcB1DUDkMnosRA6Y7.dj8h5eroslDxTeXlLwfQX/x86mh6WAq",
137 AESKey: "8XHptZxSWCGs1m7QzztX5zNQ7D9NiQevVX0DaUTNMbDpRwFzoJiB0U7K6O/kqIt01jJVgzBUfiR8ES46ZLLb4w==",
138 SyntaxHighlight: "monokailight",
139 OrderBy: "lastcommit-desc",
140 RemoveSuffix: true,
141 Repositories: []*GitRepositoryConfiguration{
142 {
143 Name: "linux.git",
144 Path: "/srv/git/linux.git",
145 Description: "",
146 Public: false,
147 About: "README.md",
148 },
149 {
150 Name: "cerrado",
151 Path: "/srv/git/cerrado.git",
152 Description: "Single person forge",
153 Public: true,
154 About: "readme.txt",
155 },
156 },
157 },
158 },
159 }
160
161 for _, tc := range testCases {
162 t.Run(tc.name, func(t *testing.T) {
163 r := strings.NewReader(tc.config)
164 config, err := parse(r)
165 if err != nil {
166 t.Fatalf("Error parsing config %s", err.Error())
167 }
168
169 if diff := cmp.Diff(tc.expectedConfig, config); diff != "" {
170 t.Errorf("Wrong result given - wanted + got\n %s", diff)
171 }
172 })
173 }
174}