cerrado @ 998c1777afeeb44ecf6ba2e735a4d6176a9b339e

  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}