зеркало из https://github.com/golang/build.git
144 строки
4.0 KiB
Go
144 строки
4.0 KiB
Go
// 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")
|
|
}
|
|
}
|