diff --git a/client/nginx.go b/client/nginx.go index 8741664a..745fa399 100644 --- a/client/nginx.go +++ b/client/nginx.go @@ -33,6 +33,12 @@ type UpstreamServer struct { MaxFails *int `json:"max_fails,omitempty"` FailTimeout string `json:"fail_timeout,omitempty"` SlowStart string `json:"slow_start,omitempty"` + Route string `json:"route"` + Backup bool `json:"backup"` + Down bool `json:"down"` + Drain bool `json:"drain,omitempty"` + Weight *int `json:"weight,omitempty"` + Service string `json:"service,omitempty"` } // StreamUpstreamServer lets you configure Stream upstreams. @@ -43,6 +49,10 @@ type StreamUpstreamServer struct { MaxFails *int `json:"max_fails,omitempty"` FailTimeout string `json:"fail_timeout,omitempty"` SlowStart string `json:"slow_start,omitempty"` + Backup bool `json:"backup"` + Down bool `json:"down"` + Weight *int `json:"weight,omitempty"` + Service string `json:"service,omitempty"` } type apiErrorResponse struct { diff --git a/docker/test.conf b/docker/test.conf index 1bbb57da..34940788 100644 --- a/docker/test.conf +++ b/docker/test.conf @@ -18,4 +18,11 @@ server { health_check interval=10 fails=3 passes=1; } status_zone test; + +} + +upstream test-drain { + zone test-drain 64k; + + server 127.0.0.1:9001 drain; } diff --git a/tests/client_test.go b/tests/client_test.go index ba81ed5a..f95084b4 100644 --- a/tests/client_test.go +++ b/tests/client_test.go @@ -17,6 +17,7 @@ const ( ) var defaultMaxFails = 1 +var defaultWeight = 1 func TestStreamClient(t *testing.T) { httpClient := &http.Client{} @@ -171,12 +172,17 @@ func TestStreamUpstreamServer(t *testing.T) { } maxFails := 64 + weight := 10 + streamServer := client.StreamUpstreamServer{ Server: "127.0.0.1:2000", MaxConns: 321, MaxFails: &maxFails, FailTimeout: "21s", SlowStart: "12s", + Weight: &weight, + Backup: true, + Down: true, } err = c.AddStreamServer(streamUpstream, streamServer) if err != nil { @@ -363,12 +369,17 @@ func TestUpstreamServer(t *testing.T) { } maxFails := 64 + weight := 10 server := client.UpstreamServer{ Server: "127.0.0.1:2000", MaxConns: 321, MaxFails: &maxFails, FailTimeout: "21s", SlowStart: "12s", + Weight: &weight, + Route: "test", + Backup: true, + Down: true, } err = c.AddHTTPServer(upstream, server) if err != nil { @@ -496,6 +507,7 @@ func TestUpstreamServerDefaultParameters(t *testing.T) { SlowStart: "0s", MaxFails: &defaultMaxFails, FailTimeout: "10s", + Weight: &defaultWeight, } err = c.AddHTTPServer(upstream, server) if err != nil { @@ -608,6 +620,7 @@ func TestStreamUpstreamServerDefaultParameters(t *testing.T) { SlowStart: "0s", MaxFails: &defaultMaxFails, FailTimeout: "10s", + Weight: &defaultWeight, } err = c.AddStreamServer(streamUpstream, streamServer) if err != nil { @@ -955,3 +968,36 @@ func compareStreamUpstreamServers(x []client.StreamUpstreamServer, y []client.St return reflect.DeepEqual(xServers, yServers) } + +func TestUpstreamServerWithDrain(t *testing.T) { + httpClient := &http.Client{} + c, err := client.NewNginxClient(httpClient, "http://127.0.0.1:8080/api") + if err != nil { + t.Fatalf("Error connecting to nginx: %v", err) + } + + server := client.UpstreamServer{ + Server: "127.0.0.1:9001", + MaxFails: &defaultMaxFails, + FailTimeout: "10s", + SlowStart: "0s", + Weight: &defaultWeight, + Drain: true, + } + + // Get existing upstream servers + servers, err := c.GetHTTPServers("test-drain") + if err != nil { + t.Fatalf("Error getting HTTPServers: %v", err) + } + + if len(servers) != 1 { + t.Errorf("Too many servers") + } + + servers[0].ID = 0 + + if !reflect.DeepEqual(server, servers[0]) { + t.Errorf("Expected: %v Got: %v", server, servers[0]) + } +}