// go:build unit package config import ( "strings" "testing" "github.com/google/go-cmp/cmp" ) func TestFileParsing(t *testing.T) { testCases := []struct { name string config string expectedConfig *configuration }{ { name: "minimal scan", config: `scan "/srv/git"`, expectedConfig: &configuration{ Scan: &scan{ Public: false, Path: "/srv/git", }, ListenAddr: defaultAddr(), Repositories: []*GitRepositoryConfiguration{}, }, }, { name: "complete scan", config: ` scan "/srv/git" { public true }`, expectedConfig: &configuration{ Scan: &scan{ Public: true, Path: "/srv/git", }, ListenAddr: defaultAddr(), Repositories: []*GitRepositoryConfiguration{}, }, }, { name: "minimal repository", config: `repository /srv/git/cerrado.git`, expectedConfig: &configuration{ Scan: defaultScan(), ListenAddr: defaultAddr(), Repositories: []*GitRepositoryConfiguration{ { Name: "cerrado.git", Path: "/srv/git/cerrado.git", Description: "", Public: false, }, }, }, }, { name: "complete repository", config: ` repository /srv/git/cerrado.git { name cerrado description "Single person forge" public true }`, expectedConfig: &configuration{ Scan: defaultScan(), ListenAddr: defaultAddr(), Repositories: []*GitRepositoryConfiguration{ { Name: "cerrado", Path: "/srv/git/cerrado.git", Description: "Single person forge", Public: true, }, }, }, }, { name: "minimal listen", config: ``, expectedConfig: &configuration{ Scan: defaultScan(), ListenAddr: defaultAddr(), Repositories: []*GitRepositoryConfiguration{}, }, }, { name: "complete listen", config: `listen-addr unix://var/run/cerrado/cerrado.sock`, expectedConfig: &configuration{ Scan: defaultScan(), ListenAddr: "unix://var/run/cerrado/cerrado.sock", Repositories: []*GitRepositoryConfiguration{}, }, }, { name: "complete", config: ` listen-addr unix://var/run/cerrado/cerrado.sock scan "/srv/git" { public true } repository /srv/git/linux.git repository /srv/git/cerrado.git { name cerrado description "Single person forge" public true }`, expectedConfig: &configuration{ Scan: &scan{ Public: true, Path: "/srv/git", }, ListenAddr: "unix://var/run/cerrado/cerrado.sock", Repositories: []*GitRepositoryConfiguration{ { Name: "linux.git", Path: "/srv/git/linux.git", Description: "", Public: false, }, { Name: "cerrado", Path: "/srv/git/cerrado.git", Description: "Single person forge", Public: true, }, }, }, }, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { r := strings.NewReader(tc.config) config, err := parse(r) if err != nil { t.Fatalf("Error parsing config %s", err.Error()) } if diff := cmp.Diff(tc.expectedConfig, config); diff != "" { t.Errorf("Wrong result given - wanted + got\n %s", diff) } }) } }