internal/gitd/gitd_test.go
62 lines · 1678 bytes
2 symbols in this file
1package gitd
2
3import (
4 "fmt"
5 "net"
6 "path/filepath"
7 "strings"
8 "testing"
9 "time"
10
11 "gitbay.org/gitbay/internal/config"
12 "gitbay.org/gitbay/internal/packlimit"
13 "gitbay.org/gitbay/internal/store"
14)
15
16func TestBusyAnswersERR(t *testing.T) {
17 st, err := store.Open(filepath.Join(t.TempDir(), "gitbay.db"))
18 if err != nil {
19 t.Fatal(err)
20 }
21 defer st.Close()
22 if err := st.MigrateUp(); err != nil {
23 t.Fatal(err)
24 }
25 uid, err := st.CreateUser("alice", false)
26 if err != nil {
27 t.Fatal(err)
28 }
29 repoID, err := st.CreateRepo("user", uid, "app", "public")
30 if err != nil {
31 t.Fatal(err)
32 }
33 if _, err := st.UpdateRepoSettings(repoID, func(rs *store.RepoSettings) { rs.GitDaemon = true }); err != nil {
34 t.Fatal(err)
35 }
36 packs := packlimit.New(1, 0, 0, time.Second)
37 hold, _ := packs.Acquire(nil, "ip:elsewhere")
38 defer hold()
39
40 s := New(config.Config{Server: config.Server{Root: t.TempDir()}}, st, packs)
41 client, server := net.Pipe()
42 defer client.Close()
43 go s.handle(server)
44 req := "git-upload-pack /alice/app.git\x00host=x\x00"
45 fmt.Fprintf(client, "%04x%s", len(req)+4, req)
46 client.SetReadDeadline(time.Now().Add(5 * time.Second))
47 line, err := readPktLine(client)
48 if err != nil || !strings.HasPrefix(line, "ERR ") || !strings.Contains(line, "busy") {
49 t.Fatalf("got %q, %v", line, err)
50 }
51}
52
53func TestPrincipal(t *testing.T) {
54 for addr, want := range map[net.Addr]string{
55 &net.TCPAddr{IP: net.ParseIP("192.0.2.7"), Port: 9418}: "ip:192.0.2.7",
56 &net.TCPAddr{IP: net.ParseIP("2001:db8:1:2:3:4:5:6"), Port: 9418}: "ip:2001:db8:1:2::/64",
57 } {
58 if got := principal(addr); got != want {
59 t.Errorf("principal(%v) = %q, want %q", addr, got, want)
60 }
61 }
62}