Merge pull request #523 from ChrisHines/windows-api-tests
api: fix tests on Windows.
This commit is contained in:
commit
44788e8694
|
@ -1,7 +1,9 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
@ -46,6 +48,54 @@ func makeClient(t *testing.T, cb1 configCallback,
|
|||
return client, server
|
||||
}
|
||||
|
||||
func TestRequestTime(t *testing.T) {
|
||||
t.Parallel()
|
||||
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
d, err := json.Marshal(struct{ Done bool }{true})
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
w.Write(d)
|
||||
}))
|
||||
defer srv.Close()
|
||||
|
||||
conf := DefaultConfig()
|
||||
conf.Address = srv.URL
|
||||
|
||||
client, err := NewClient(conf)
|
||||
if err != nil {
|
||||
t.Fatalf("err: %v", err)
|
||||
}
|
||||
|
||||
var out interface{}
|
||||
|
||||
qm, err := client.query("/", &out, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("query err: %v", err)
|
||||
}
|
||||
if qm.RequestTime == 0 {
|
||||
t.Errorf("bad request time: %d", qm.RequestTime)
|
||||
}
|
||||
|
||||
wm, err := client.write("/", struct{ S string }{"input"}, &out, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("write err: %v", err)
|
||||
}
|
||||
if wm.RequestTime == 0 {
|
||||
t.Errorf("bad request time: %d", wm.RequestTime)
|
||||
}
|
||||
|
||||
wm, err = client.delete("/", &out, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("delete err: %v", err)
|
||||
}
|
||||
if wm.RequestTime == 0 {
|
||||
t.Errorf("bad request time: %d", wm.RequestTime)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDefaultConfig_env(t *testing.T) {
|
||||
t.Parallel()
|
||||
url := "http://1.2.3.4:5678"
|
||||
|
|
|
@ -8,9 +8,6 @@ func assertQueryMeta(t *testing.T, qm *QueryMeta) {
|
|||
if qm.LastIndex == 0 {
|
||||
t.Fatalf("bad index: %d", qm.LastIndex)
|
||||
}
|
||||
if qm.RequestTime == 0 {
|
||||
t.Fatalf("bad request time: %d", qm.RequestTime)
|
||||
}
|
||||
if !qm.KnownLeader {
|
||||
t.Fatalf("expected known leader, got none")
|
||||
}
|
||||
|
|
|
@ -43,7 +43,7 @@ type TestServerConfig struct {
|
|||
Stdout, Stderr io.Writer `json:"-"`
|
||||
}
|
||||
|
||||
// Ports is used to configure the network ports we use.
|
||||
// PortsConfig is used to configure the network ports we use.
|
||||
type PortsConfig struct {
|
||||
HTTP int `json:"http,omitempty"`
|
||||
RPC int `json:"rpc,omitempty"`
|
||||
|
@ -91,16 +91,16 @@ func defaultServerConfig() *TestServerConfig {
|
|||
|
||||
// TestServer is the main server wrapper struct.
|
||||
type TestServer struct {
|
||||
PID int
|
||||
cmd *exec.Cmd
|
||||
Config *TestServerConfig
|
||||
t *testing.T
|
||||
|
||||
HTTPAddr string
|
||||
SerfAddr string
|
||||
HttpClient *http.Client
|
||||
HTTPClient *http.Client
|
||||
}
|
||||
|
||||
// NewTestServerConfig creates a new TestServer, and makes a call to
|
||||
// NewTestServer creates a new TestServer, and makes a call to
|
||||
// an optional callback function to modify the configuration.
|
||||
func NewTestServer(t *testing.T, cb ServerConfigCallback) *TestServer {
|
||||
if path, err := exec.LookPath("nomad"); err != nil || path == "" {
|
||||
|
@ -117,6 +117,7 @@ func NewTestServer(t *testing.T, cb ServerConfigCallback) *TestServer {
|
|||
defer os.RemoveAll(dataDir)
|
||||
t.Fatalf("err: %s", err)
|
||||
}
|
||||
defer configFile.Close()
|
||||
|
||||
nomadConfig := defaultServerConfig()
|
||||
nomadConfig.DataDir = dataDir
|
||||
|
@ -162,12 +163,12 @@ func NewTestServer(t *testing.T, cb ServerConfigCallback) *TestServer {
|
|||
|
||||
server := &TestServer{
|
||||
Config: nomadConfig,
|
||||
PID: cmd.Process.Pid,
|
||||
cmd: cmd,
|
||||
t: t,
|
||||
|
||||
HTTPAddr: fmt.Sprintf("127.0.0.1:%d", nomadConfig.Ports.HTTP),
|
||||
SerfAddr: fmt.Sprintf("127.0.0.1:%d", nomadConfig.Ports.Serf),
|
||||
HttpClient: client,
|
||||
HTTPClient: client,
|
||||
}
|
||||
|
||||
// Wait for the server to be ready
|
||||
|
@ -184,10 +185,13 @@ func NewTestServer(t *testing.T, cb ServerConfigCallback) *TestServer {
|
|||
func (s *TestServer) Stop() {
|
||||
defer os.RemoveAll(s.Config.DataDir)
|
||||
|
||||
cmd := exec.Command("kill", "-9", fmt.Sprintf("%d", s.PID))
|
||||
if err := cmd.Run(); err != nil {
|
||||
if err := s.cmd.Process.Kill(); err != nil {
|
||||
s.t.Errorf("err: %s", err)
|
||||
}
|
||||
|
||||
// wait for the process to exit to be sure that the data dir can be
|
||||
// deleted on all platforms.
|
||||
s.cmd.Wait()
|
||||
}
|
||||
|
||||
// waitForAPI waits for only the agent HTTP endpoint to start
|
||||
|
@ -195,7 +199,7 @@ func (s *TestServer) Stop() {
|
|||
// but will likely return before a leader is elected.
|
||||
func (s *TestServer) waitForAPI() {
|
||||
WaitForResult(func() (bool, error) {
|
||||
resp, err := s.HttpClient.Get(s.url("/v1/agent/self"))
|
||||
resp, err := s.HTTPClient.Get(s.url("/v1/agent/self"))
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
@ -216,7 +220,7 @@ func (s *TestServer) waitForAPI() {
|
|||
func (s *TestServer) waitForLeader() {
|
||||
WaitForResult(func() (bool, error) {
|
||||
// Query the API and check the status code
|
||||
resp, err := s.HttpClient.Get(s.url("/v1/jobs"))
|
||||
resp, err := s.HTTPClient.Get(s.url("/v1/jobs"))
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
@ -256,7 +260,7 @@ func (s *TestServer) put(path string, body io.Reader) *http.Response {
|
|||
if err != nil {
|
||||
s.t.Fatalf("err: %s", err)
|
||||
}
|
||||
resp, err := s.HttpClient.Do(req)
|
||||
resp, err := s.HTTPClient.Do(req)
|
||||
if err != nil {
|
||||
s.t.Fatalf("err: %s", err)
|
||||
}
|
||||
|
@ -269,7 +273,7 @@ func (s *TestServer) put(path string, body io.Reader) *http.Response {
|
|||
|
||||
// get performs a new HTTP GET request.
|
||||
func (s *TestServer) get(path string) *http.Response {
|
||||
resp, err := s.HttpClient.Get(s.url(path))
|
||||
resp, err := s.HTTPClient.Get(s.url(path))
|
||||
if err != nil {
|
||||
s.t.Fatalf("err: %s", err)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue