cerrado @ 239e2cc806be7f0aa24624bf91891223ff469f5f

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