eclipse/cmd/gitcached/githttp_test.go

73 lines
1.8 KiB
Go
Raw Normal View History

2024-01-11 17:59:26 +00:00
// Copyright (C) 2024 Umorpha Systems
// SPDX-License-Identifier: AGPL-3.0-or-later
package main
import (
"net/http"
"net/url"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestRouteGitHTTP(t *testing.T) {
t.Parallel()
type testcase struct {
InRequestLine string
ExpRepo string
ExpFile string
ExpService string
ExpErr string
}
testcases := map[string]testcase{
// These first few testcases are taken from the
// gitprotocol-http(5) manpage, as of Git 2.43.0.
"manpage-1": testcase{
InRequestLine: "/git/repo.git/objects/d0/49f6c27a2244e12041955e262a404c7faba355",
ExpRepo: "/git/repo.git",
ExpFile: "/objects/d0/49f6c27a2244e12041955e262a404c7faba355",
ExpService: "",
},
"manpage-2": testcase{
InRequestLine: "/daemon.cgi?svc=git&q=/info/refs&service=git-receive-pack",
ExpRepo: "/daemon.cgi?svc=git&q=",
ExpFile: "/info/refs",
ExpService: "git-receive-pack",
},
"manpage-3": testcase{
InRequestLine: "/git/repo.git/path/submodule.git/info/refs",
ExpRepo: "/git/repo.git/path/submodule.git",
ExpFile: "/info/refs",
ExpService: "",
},
}
for tcName, tc := range testcases {
tc := tc
t.Run(tcName, func(t *testing.T) {
t.Parallel()
uri, err := url.ParseRequestURI(tc.InRequestLine)
require.NoError(t, err)
req := &http.Request{
URL: uri,
RequestURI: tc.InRequestLine,
}
actRepo, actFile, actService, actErr := routeGitHTTP(req)
assert.Equal(t, tc.ExpRepo, actRepo)
assert.Equal(t, tc.ExpFile, actFile)
assert.Equal(t, tc.ExpService, actService)
if tc.ExpErr == "" {
assert.NoError(t, actErr)
} else {
assert.EqualError(t, err, tc.ExpErr)
}
})
}
}