133728e barerepo 1mo
1
package e2e
133728e barerepo 1mo
3
import (
133728e barerepo 1mo
4
"bytes"
133728e barerepo 1mo
5
"encoding/json"
133728e barerepo 1mo
6
"net/http"
133728e barerepo 1mo
7
"os/exec"
133728e barerepo 1mo
8
"strings"
133728e barerepo 1mo
9
"testing"
133728e barerepo 1mo
12
// Chapter 19.1 has run.failed and not run.succeeded, so a red build has to reach the inbox.
133728e barerepo 1mo
13
func TestAFailedBuildReachesTheInbox(t *testing.T) {
133728e barerepo 1mo
14
if _, err := exec.LookPath("git"); err != nil {
133728e barerepo 1mo
15
t.Skip("git is not installed")
133728e barerepo 1mo
17
in := newInstance(t)
133728e barerepo 1mo
18
john := in.account("john")
133728e barerepo 1mo
19
seed(t, in, john, "john", "johnbot")
133728e barerepo 1mo
21
jobID, _, runnerToken := takeJobAs(t, in, "john", "john/johnbot")
133728e barerepo 1mo
22
finish(t, in, runnerToken, jobID, 2)
133728e barerepo 1mo
24
body := inboxOf(t, in, "john")
133728e barerepo 1mo
25
if !strings.Contains(body, "build failed") {
133728e barerepo 1mo
26
t.Errorf("a failed build is not in the inbox:\n%s", body)
133728e barerepo 1mo
28
if !strings.Contains(body, "refs/heads/master") {
133728e barerepo 1mo
29
t.Errorf("the inbox line does not say what was being built:\n%s", body)
133728e barerepo 1mo
33
// A green build is not news, and putting it in the inbox is how a feed becomes noise. 19.1.
133728e barerepo 1mo
34
func TestAPassingBuildIsNotAnEvent(t *testing.T) {
133728e barerepo 1mo
35
if _, err := exec.LookPath("git"); err != nil {
133728e barerepo 1mo
36
t.Skip("git is not installed")
133728e barerepo 1mo
38
in := newInstance(t)
133728e barerepo 1mo
39
john := in.account("john")
133728e barerepo 1mo
40
seed(t, in, john, "john", "johnbot")
133728e barerepo 1mo
42
jobID, _, runnerToken := takeJobAs(t, in, "john", "john/johnbot")
133728e barerepo 1mo
43
finish(t, in, runnerToken, jobID, 0)
133728e barerepo 1mo
45
if body := inboxOf(t, in, "john"); strings.Contains(body, "build failed") {
133728e barerepo 1mo
46
t.Errorf("a build that passed produced an event:\n%s", body)
133728e barerepo 1mo
50
func finish(t *testing.T, in *instance, runnerToken string, jobID int64, exit int) {
133728e barerepo 1mo
51
t.Helper()
133728e barerepo 1mo
52
body, err := json.Marshal(map[string]any{
133728e barerepo 1mo
53
"token": runnerToken, "job_id": jobID, "exit_code": exit, "duration": 3,
133728e barerepo 1mo
54
})
133728e barerepo 1mo
55
if err != nil {
133728e barerepo 1mo
56
t.Fatal(err)
133728e barerepo 1mo
58
resp, err := http.Post(in.http.URL+"/runner/done", "application/json", bytes.NewReader(body))
133728e barerepo 1mo
59
if err != nil {
133728e barerepo 1mo
60
t.Fatal(err)
133728e barerepo 1mo
62
defer resp.Body.Close()
133728e barerepo 1mo
63
if resp.StatusCode != http.StatusNoContent {
133728e barerepo 1mo
64
t.Fatalf("finishing the job answered %d", resp.StatusCode)