forked from golang/build
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuildlet_test.go
143 lines (129 loc) · 3.98 KB
/
buildlet_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package buildlet
import (
"context"
"fmt"
"net/http"
"net/http/httptest"
"net/url"
"testing"
)
func TestBuildletClient(t *testing.T) {
var httpCalled, OnBeginBuildletProbeCalled, OnEndBuildletProbeCalled bool
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
httpCalled = true
fmt.Fprintln(w, "buildlet endpoint reached")
}))
defer ts.Close()
u, err := url.Parse(ts.URL)
if err != nil {
t.Fatalf("unable to parse http server url %s", err)
}
kp, err := NewKeyPair()
if err != nil {
t.Fatalf("unable to create key pair %s", err)
}
opt := &VMOpts{
TLS: kp,
OnBeginBuildletProbe: func(string) { OnBeginBuildletProbeCalled = true },
OnEndBuildletProbe: func(*http.Response, error) { OnEndBuildletProbeCalled = true },
}
gotClient, gotErr := buildletClient(context.Background(), ts.URL, u.Host, opt)
if gotErr != nil {
t.Errorf("buildletClient(ctx, %s, %s, %v) error %s", ts.URL, u.Host, opt, gotErr)
}
if gotClient == nil {
t.Errorf("client should not be nil")
}
if !httpCalled {
t.Error("http endpoint never called")
}
if !OnBeginBuildletProbeCalled {
t.Error("OnBeginBuildletProbe() was not called")
}
if !OnEndBuildletProbeCalled {
t.Error("OnEndBuildletProbe() was not called")
}
}
func TestBuildletClientError(t *testing.T) {
var httpCalled, OnBeginBuildletProbeCalled, OnEndBuildletProbeCalled bool
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
httpCalled = true
fmt.Fprintln(w, "buildlet endpoint reached")
}))
defer ts.Close()
u, err := url.Parse(ts.URL)
if err != nil {
t.Fatalf("unable to parse http server url %s", err)
}
kp, err := NewKeyPair()
if err != nil {
t.Fatalf("unable to create key pair %s", err)
}
opt := &VMOpts{
TLS: kp,
OnBeginBuildletProbe: func(string) { OnBeginBuildletProbeCalled = true },
OnEndBuildletProbe: func(*http.Response, error) { OnEndBuildletProbeCalled = true },
}
ctx, cancel := context.WithCancel(context.Background())
cancel()
gotClient, gotErr := buildletClient(ctx, ts.URL, u.Host, opt)
if gotErr == nil {
t.Errorf("buildletClient(ctx, %s, %s, %v) error %s", ts.URL, u.Host, opt, gotErr)
}
if gotClient != nil {
t.Errorf("client should be nil")
}
if httpCalled {
t.Error("http endpoint called")
}
if OnBeginBuildletProbeCalled {
t.Error("OnBeginBuildletProbe() was called")
}
if OnEndBuildletProbeCalled {
t.Error("OnEndBuildletProbe() was called")
}
}
func TestProbeBuildlet(t *testing.T) {
var httpCalled, OnBeginBuildletProbeCalled, OnEndBuildletProbeCalled bool
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
httpCalled = true
fmt.Fprintln(w, "buildlet endpoint reached")
}))
defer ts.Close()
opt := &VMOpts{
OnBeginBuildletProbe: func(string) { OnBeginBuildletProbeCalled = true },
OnEndBuildletProbe: func(*http.Response, error) { OnEndBuildletProbeCalled = true },
}
gotErr := probeBuildlet(context.Background(), ts.URL, opt)
if gotErr != nil {
t.Errorf("probeBuildlet(ctx, %q, %+v) = %s; want no error", ts.URL, opt, gotErr)
}
if !httpCalled {
t.Error("http endpoint never called")
}
if !OnBeginBuildletProbeCalled {
t.Error("OnBeginBuildletProbe() was not called")
}
if !OnEndBuildletProbeCalled {
t.Error("OnEndBuildletProbe() was not called")
}
}
func TestProbeBuildletError(t *testing.T) {
var httpCalled bool
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
httpCalled = true
http.Error(w, "all types of broken", http.StatusInternalServerError)
}))
defer ts.Close()
opt := &VMOpts{}
gotErr := probeBuildlet(context.Background(), ts.URL, opt)
if gotErr == nil {
t.Errorf("probeBuildlet(ctx, %q, %+v) = nil; want error", ts.URL, opt)
}
if !httpCalled {
t.Error("http endpoint never called")
}
}