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 Scan: &scan{
22 Public: false,
23 Path: "/srv/git",
24 },
25 ListenAddr: defaultAddr(),
26 Repositories: []*GitRepositoryConfiguration{},
27 },
28 },
29 {
30 name: "complete scan",
31 config: `
32scan "/srv/git" {
33 public true
34}`,
35 expectedConfig: &configuration{
36 Scan: &scan{
37 Public: true,
38 Path: "/srv/git",
39 },
40 ListenAddr: defaultAddr(),
41 Repositories: []*GitRepositoryConfiguration{},
42 },
43 },
44 {
45 name: "minimal repository",
46 config: `repository /srv/git/cerrado.git`,
47 expectedConfig: &configuration{
48 Scan: defaultScan(),
49 ListenAddr: defaultAddr(),
50 Repositories: []*GitRepositoryConfiguration{
51 {
52 Name: "cerrado.git",
53 Path: "/srv/git/cerrado.git",
54 Description: "",
55 Public: false,
56 },
57 },
58 },
59 },
60 {
61 name: "complete repository",
62 config: `
63repository /srv/git/cerrado.git {
64 name cerrado
65 description "Single person forge"
66 public true
67}`,
68 expectedConfig: &configuration{
69 Scan: defaultScan(),
70 ListenAddr: defaultAddr(),
71 Repositories: []*GitRepositoryConfiguration{
72 {
73 Name: "cerrado",
74 Path: "/srv/git/cerrado.git",
75 Description: "Single person forge",
76 Public: true,
77 },
78 },
79 },
80 },
81 {
82 name: "minimal listen",
83 config: ``,
84 expectedConfig: &configuration{
85 Scan: defaultScan(),
86 ListenAddr: defaultAddr(),
87 Repositories: []*GitRepositoryConfiguration{},
88 },
89 },
90 {
91 name: "complete listen",
92 config: `listen-addr unix://var/run/cerrado/cerrado.sock`,
93 expectedConfig: &configuration{
94 Scan: defaultScan(),
95 ListenAddr: "unix://var/run/cerrado/cerrado.sock",
96 Repositories: []*GitRepositoryConfiguration{},
97 },
98 },
99 {
100 name: "complete",
101 config: `
102listen-addr unix://var/run/cerrado/cerrado.sock
103
104scan "/srv/git" {
105 public true
106}
107
108repository /srv/git/linux.git
109
110repository /srv/git/cerrado.git {
111 name cerrado
112 description "Single person forge"
113 public true
114}`,
115 expectedConfig: &configuration{
116 Scan: &scan{
117 Public: true,
118 Path: "/srv/git",
119 },
120 ListenAddr: "unix://var/run/cerrado/cerrado.sock",
121 Repositories: []*GitRepositoryConfiguration{
122 {
123 Name: "linux.git",
124 Path: "/srv/git/linux.git",
125 Description: "",
126 Public: false,
127 },
128 {
129 Name: "cerrado",
130 Path: "/srv/git/cerrado.git",
131 Description: "Single person forge",
132 Public: true,
133 },
134 },
135 },
136 },
137 }
138
139 for _, tc := range testCases {
140 t.Run(tc.name, func(t *testing.T) {
141 r := strings.NewReader(tc.config)
142 config, err := parse(r)
143 if err != nil {
144 t.Fatalf("Error parsing config %s", err.Error())
145 }
146
147 if diff := cmp.Diff(tc.expectedConfig, config); diff != "" {
148 t.Errorf("Wrong result given - wanted + got\n %s", diff)
149 }
150 })
151
152 }
153}