1 package main
2
3 import (
4 "encoding/json"
5 "fmt"
6 "io/ioutil"
7 "net/url"
8 "os"
9 "os/exec"
10 "path/filepath"
11 "strings"
12 "testing"
13
14 "net/http"
15 "net/http/httptest"
16 )
17
18 func fakeServer() *httptest.Server {
19 return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
20 w.WriteHeader(http.StatusOK)
21 fmt.Fprintln(w, `{"error":false,"message":"Fake message","URL":"http://fake.url"}`)
22 }))
23 }
24
25 func fakeServerWithPayloadChannel(payload chan Job) *httptest.Server {
26 return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
27
28 fmt.Fprintln(w, `{"error":false,"message":"Fake message","URL":"http://fake.url"}`)
29
30 body, err := ioutil.ReadAll(r.Body)
31
32 vals, err := url.ParseQuery(string(body))
33 if err != nil {
34 w.WriteHeader(http.StatusInternalServerError)
35 return
36 }
37
38 var job Job
39 err = json.Unmarshal([]byte(vals["json"][0]), &job)
40 if err != nil {
41 w.WriteHeader(http.StatusInternalServerError)
42 return
43 }
44 payload <- job
45
46 w.WriteHeader(http.StatusOK)
47 }))
48 }
49
50 func TestUsage(t *testing.T) {
51 tmp := prepareTest(t)
52 defer os.RemoveAll(tmp)
53 cmd := exec.Command("goveralls", "-h")
54 b, err := cmd.CombinedOutput()
55 if err == nil {
56 t.Fatal("Expected exit code 1 bot 0")
57 }
58 s := strings.Split(string(b), "\n")[0]
59 if !strings.HasPrefix(s, "Usage: goveralls ") {
60 t.Fatalf("Expected %v, but %v", "Usage: ", s)
61 }
62 }
63
64 func TestCustomJobId(t *testing.T) {
65 tmp := prepareTest(t)
66 defer os.RemoveAll(tmp)
67 jobBodyChannel := make(chan Job, 8096)
68 fs := fakeServerWithPayloadChannel(jobBodyChannel)
69
70 cmd := exec.Command("goveralls", "-jobid=123abc", "-package=github.com/mattn/goveralls/tester", "-endpoint")
71 cmd.Args = append(cmd.Args, "-v", "-endpoint", fs.URL)
72 b, err := cmd.CombinedOutput()
73 if err != nil {
74 t.Fatal("Expected exit code 0 got 1", err, string(b))
75 }
76
77 jobBody := <-jobBodyChannel
78
79 if jobBody.ServiceJobID != "123abc" {
80 t.Fatalf("Expected job id of 123abc, but was %s", jobBody.ServiceJobID)
81 }
82 }
83
84 func TestInvalidArg(t *testing.T) {
85 tmp := prepareTest(t)
86 defer os.RemoveAll(tmp)
87 cmd := exec.Command("goveralls", "pkg")
88 b, err := cmd.CombinedOutput()
89 if err == nil {
90 t.Fatal("Expected exit code 1 got 0")
91 }
92 s := strings.Split(string(b), "\n")[0]
93 if !strings.HasPrefix(s, "Usage: goveralls ") {
94 t.Fatalf("Expected %v, but %v", "Usage: ", s)
95 }
96 }
97
98 func TestVerboseArg(t *testing.T) {
99 tmp := prepareTest(t)
100 defer os.RemoveAll(tmp)
101 fs := fakeServer()
102
103 t.Run("with verbose", func(t *testing.T) {
104 cmd := exec.Command("goveralls", "-package=github.com/mattn/goveralls/tester", "-v", "-endpoint")
105 cmd.Args = append(cmd.Args, "-v", "-endpoint", fs.URL)
106 b, err := cmd.CombinedOutput()
107 if err != nil {
108 t.Fatal("Expected exit code 0 got 1", err, string(b))
109 }
110
111 if !strings.Contains(string(b), "--- PASS") {
112 t.Error("Expected to have verbose go test output in stdout", string(b))
113 }
114 })
115
116 t.Run("without verbose", func(t *testing.T) {
117 cmd := exec.Command("goveralls", "-package=github.com/mattn/goveralls/tester", "-endpoint")
118 cmd.Args = append(cmd.Args, "-v", "-endpoint", fs.URL)
119 b, err := cmd.CombinedOutput()
120 if err != nil {
121 t.Fatal("Expected exit code 0 got 1", err, string(b))
122 }
123
124 if strings.Contains(string(b), "--- PASS") {
125 t.Error("Expected to haven't verbose go test output in stdout", string(b))
126 }
127 })
128 }
129
130 func TestShowArg(t *testing.T) {
131 tmp := prepareTest(t)
132 defer os.RemoveAll(tmp)
133 fs := fakeServer()
134
135 t.Run("with show", func(t *testing.T) {
136 cmd := exec.Command("goveralls", "-package=github.com/mattn/goveralls/tester/...", "-show", "-endpoint")
137 cmd.Args = append(cmd.Args, "-show", "-endpoint", fs.URL)
138 b, err := cmd.CombinedOutput()
139 if err != nil {
140 t.Fatal("Expected exit code 0 got 1", err, string(b))
141 }
142
143 expected := `goveralls: github.com/mattn/goveralls/tester
144 Fake message
145 http://fake.url
146 `
147 if string(b) != expected {
148 t.Error("Unexpected output for -show:", string(b))
149 }
150 })
151 }
152
153 func TestRaceArg(t *testing.T) {
154 tmp := prepareTest(t)
155 defer os.RemoveAll(tmp)
156 fs := fakeServer()
157
158 t.Run("it should pass the test", func(t *testing.T) {
159 cmd := exec.Command("goveralls", "-package=github.com/mattn/goveralls/tester", "-race")
160 cmd.Args = append(cmd.Args, "-endpoint", fs.URL)
161 b, err := cmd.CombinedOutput()
162 if err != nil {
163 t.Fatal("Expected exit code 0 got 1", err, string(b))
164 }
165 })
166 }
167
168
187
188 func prepareTest(t *testing.T) (tmpPath string) {
189 tmp, err := ioutil.TempDir("", "goveralls")
190 if err != nil {
191 t.Fatal("prepareTest:", err)
192 }
193 runCmd(t, "go", "build", "-o", filepath.Join(tmp, "bin", "goveralls"), "github.com/mattn/goveralls")
194 os.Setenv("PATH", filepath.Join(tmp, "bin")+string(filepath.ListSeparator)+os.Getenv("PATH"))
195 os.MkdirAll(filepath.Join(tmp, "src"), 0755)
196 return tmp
197 }
198
199 func runCmd(t *testing.T, cmd string, args ...string) []byte {
200 b, err := exec.Command(cmd, args...).CombinedOutput()
201 if err != nil {
202 t.Fatalf("Expected %v, but %v: %v", nil, err, string(b))
203 }
204 return b
205 }
206
View as plain text