internal/gitd/gitd_test.go

e6cd75b5f28bacf51620bb531320c30fd4e66bfd
gitbay/internal/gitd/gitd_test.go history · blame · raw

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}