// 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{ Scans: []*scan{ { Public: false, Path: "/srv/git", }, }, ListenAddr: defaultAddr(), Repositories: []*GitRepositoryConfiguration{}, }, }, { name: "complete scan", config: ` scan "/srv/git" { public true }`, expectedConfig: &configuration{ Scans: []*scan{ { Public: true, Path: "/srv/git", }, }, ListenAddr: defaultAddr(), Repositories: []*GitRepositoryConfiguration{}, }, }, { name: "minimal repository", config: `repository /srv/git/cerrado.git`, expectedConfig: &configuration{ Scans: defaultScans(), ListenAddr: defaultAddr(), Repositories: []*GitRepositoryConfiguration{ { Name: "cerrado.git", Path: "/srv/git/cerrado.git", Description: "", Public: false, About: "README.md", }, }, }, }, { name: "complete repository", config: ` repository /srv/git/cerrado.git { name cerrado description "Single person forge" public true about readme.txt }`, expectedConfig: &configuration{ Scans: defaultScans(), ListenAddr: defaultAddr(), Repositories: []*GitRepositoryConfiguration{ { Name: "cerrado", Path: "/srv/git/cerrado.git", Description: "Single person forge", Public: true, About: "readme.txt", }, }, }, }, { name: "minimal listen", config: ``, expectedConfig: &configuration{ Scans: defaultScans(), ListenAddr: defaultAddr(), Repositories: []*GitRepositoryConfiguration{}, }, }, { name: "complete listen", config: `listen-addr unix://var/run/cerrado/cerrado.sock`, expectedConfig: &configuration{ Scans: defaultScans(), ListenAddr: "unix://var/run/cerrado/cerrado.sock", Repositories: []*GitRepositoryConfiguration{}, }, }, { name: "complete", config: ` listen-addr unix://var/run/cerrado/cerrado.sock passphrase $2a$14$VnB/ZcB1DUDkMnosRA6Y7.dj8h5eroslDxTeXlLwfQX/x86mh6WAq aes-key 8XHptZxSWCGs1m7QzztX5zNQ7D9NiQevVX0DaUTNMbDpRwFzoJiB0U7K6O/kqIt01jJVgzBUfiR8ES46ZLLb4w== syntax-highlight monokailight scan "/srv/git" { public true } repository /srv/git/linux.git repository /srv/git/cerrado.git { name cerrado description "Single person forge" public true about readme.txt }`, expectedConfig: &configuration{ Scans: []*scan{ { Public: true, Path: "/srv/git", }, }, ListenAddr: "unix://var/run/cerrado/cerrado.sock", Passphrase: "$2a$14$VnB/ZcB1DUDkMnosRA6Y7.dj8h5eroslDxTeXlLwfQX/x86mh6WAq", AESKey: "8XHptZxSWCGs1m7QzztX5zNQ7D9NiQevVX0DaUTNMbDpRwFzoJiB0U7K6O/kqIt01jJVgzBUfiR8ES46ZLLb4w==", SyntaxHighlight: "monokailight", Repositories: []*GitRepositoryConfiguration{ { Name: "linux.git", Path: "/srv/git/linux.git", Description: "", Public: false, About: "README.md", }, { Name: "cerrado", Path: "/srv/git/cerrado.git", Description: "Single person forge", Public: true, About: "readme.txt", }, }, }, }, } 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) } }) } }