File view with blame information shown in the left gutter beside each line.

barerepo / runner / e2e_test.go
75 lines · 1.9kb · 96966ee7d73df970dc5b1b4cbbca677f2973e17c
log files threads runs releases config jump to file t
96966ee barerepo 1mo
1
//go:build crossrepo
96966ee barerepo 1mo
2
96966ee barerepo 1mo
3
package runner_test
96966ee barerepo 1mo
4
96966ee barerepo 1mo
5
import (
96966ee barerepo 1mo
6
"context"
96966ee barerepo 1mo
7
"os"
96966ee barerepo 1mo
8
"os/exec"
96966ee barerepo 1mo
9
"path/filepath"
96966ee barerepo 1mo
10
"strings"
96966ee barerepo 1mo
11
"testing"
96966ee barerepo 1mo
12
"time"
96966ee barerepo 1mo
13
96966ee barerepo 1mo
14
"github.com/barerepo/server/testserver"
96966ee barerepo 1mo
15
)
96966ee barerepo 1mo
16
96966ee barerepo 1mo
17
// The two halves are separate programs now, so only a test that runs both catches them drifting.
96966ee barerepo 1mo
18
func TestTheRunnerAttachesToARealServer(t *testing.T) {
96966ee barerepo 1mo
19
for _, name := range []string{"git", "ssh-keygen", "go"} {
96966ee barerepo 1mo
20
if _, err := exec.LookPath(name); err != nil {
96966ee barerepo 1mo
21
t.Skipf("%s is not installed", name)
96966ee barerepo 1mo
22
}
96966ee barerepo 1mo
23
}
96966ee barerepo 1mo
24
in := testserver.New(t)
96966ee barerepo 1mo
25
john := in.Account(t, "john")
96966ee barerepo 1mo
26
in.Repo(t, john, "john", "johnbot")
96966ee barerepo 1mo
27
tok := in.RunnerToken(t, "john", "john", "johnbot")
96966ee barerepo 1mo
28
96966ee barerepo 1mo
29
bin := filepath.Join(t.TempDir(), "barerepo-runner")
96966ee barerepo 1mo
30
if out, err := exec.Command("go", "build", "-o", bin, "./cmd/barerepo-runner").CombinedOutput(); err != nil {
96966ee barerepo 1mo
31
t.Fatalf("building the runner: %v\n%s", err, out)
96966ee barerepo 1mo
32
}
96966ee barerepo 1mo
33
96966ee barerepo 1mo
34
ctx, stop := context.WithTimeout(context.Background(), 30*time.Second)
96966ee barerepo 1mo
35
defer stop()
96966ee barerepo 1mo
36
cmd := exec.CommandContext(ctx, bin, tok, "--server", in.URL, "--labels", "build,test")
96966ee barerepo 1mo
37
cmd.Env = append(os.Environ(), "HOME="+t.TempDir())
96966ee barerepo 1mo
38
out, err := cmd.StdoutPipe()
96966ee barerepo 1mo
39
if err != nil {
96966ee barerepo 1mo
40
t.Fatal(err)
96966ee barerepo 1mo
41
}
96966ee barerepo 1mo
42
if err := cmd.Start(); err != nil {
96966ee barerepo 1mo
43
t.Fatal(err)
96966ee barerepo 1mo
44
}
96966ee barerepo 1mo
45
t.Cleanup(func() {
96966ee barerepo 1mo
46
cmd.Process.Kill()
96966ee barerepo 1mo
47
cmd.Wait()
96966ee barerepo 1mo
48
})
96966ee barerepo 1mo
49
96966ee barerepo 1mo
50
said := make(chan string, 1)
96966ee barerepo 1mo
51
go func() {
96966ee barerepo 1mo
52
buf := make([]byte, 256)
96966ee barerepo 1mo
53
n, _ := out.Read(buf)
96966ee barerepo 1mo
54
said <- string(buf[:n])
96966ee barerepo 1mo
55
}()
96966ee barerepo 1mo
56
select {
96966ee barerepo 1mo
57
case line := <-said:
96966ee barerepo 1mo
58
if !strings.Contains(line, "attached as") {
96966ee barerepo 1mo
59
t.Fatalf("the runner said %q, want it to report attaching", line)
96966ee barerepo 1mo
60
}
96966ee barerepo 1mo
61
case <-ctx.Done():
96966ee barerepo 1mo
62
t.Fatal("the runner never reported attaching")
96966ee barerepo 1mo
63
}
96966ee barerepo 1mo
64
96966ee barerepo 1mo
65
runners, err := in.DB.RunnersOf(context.Background(), "john/johnbot")
96966ee barerepo 1mo
66
if err != nil {
96966ee barerepo 1mo
67
t.Fatal(err)
96966ee barerepo 1mo
68
}
96966ee barerepo 1mo
69
if len(runners) != 1 {
96966ee barerepo 1mo
70
t.Fatalf("the server holds %d runners, want the one that just attached", len(runners))
96966ee barerepo 1mo
71
}
96966ee barerepo 1mo
72
if got := runners[0].Labels; !strings.Contains(strings.Join(got, ","), "build") {
96966ee barerepo 1mo
73
t.Errorf("the server recorded labels %v, want the ones the runner sent", got)
96966ee barerepo 1mo
74
}
96966ee barerepo 1mo
75
}
history · rawbarerepo 0.1.0