From 44aef6567ebdb371492487d9a0e709e4331c30f1 Mon Sep 17 00:00:00 2001 From: Preetha Appan Date: Wed, 30 May 2018 17:14:53 -0500 Subject: [PATCH] Add unit test to verify compatibility code for node drains --- command/agent/node_endpoint_test.go | 55 +++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/command/agent/node_endpoint_test.go b/command/agent/node_endpoint_test.go index 6c94af9ef..35c24f8d3 100644 --- a/command/agent/node_endpoint_test.go +++ b/command/agent/node_endpoint_test.go @@ -302,6 +302,61 @@ func TestHTTP_NodeDrain(t *testing.T) { }) } +// Tests backwards compatibility code to support pre 0.8 clients +func TestHTTP_NodeDrain_Compat(t *testing.T) { + t.Parallel() + require := require.New(t) + httpTest(t, nil, func(s *TestAgent) { + // Create the node + node := mock.Node() + args := structs.NodeRegisterRequest{ + Node: node, + WriteRequest: structs.WriteRequest{Region: "global"}, + } + var resp structs.NodeUpdateResponse + require.Nil(s.Agent.RPC("Node.Register", &args, &resp)) + + // Make the HTTP request + req, err := http.NewRequest("POST", "/v1/node/"+node.ID+"/drain?enable=true", nil) + require.Nil(err) + respW := httptest.NewRecorder() + + // Make the request + obj, err := s.Server.NodeSpecificRequest(respW, req) + require.Nil(err) + + // Check for the index + require.NotZero(respW.HeaderMap.Get("X-Nomad-Index")) + + // Check the response + _, ok := obj.(structs.NodeDrainUpdateResponse) + require.True(ok) + + // Check that the node has been updated + state := s.Agent.server.State() + out, err := state.NodeByID(nil, node.ID) + require.Nil(err) + require.True(out.Drain) + require.NotNil(out.DrainStrategy) + require.Equal(-1*time.Second, out.DrainStrategy.Deadline) + + // Make the HTTP request to unset drain + req, err = http.NewRequest("POST", "/v1/node/"+node.ID+"/drain?enable=false", nil) + require.Nil(err) + respW = httptest.NewRecorder() + + // Make the request + _, err = s.Server.NodeSpecificRequest(respW, req) + require.Nil(err) + + out, err = state.NodeByID(nil, node.ID) + require.Nil(err) + require.False(out.Drain) + require.Nil(out.DrainStrategy) + require.Equal("eligible", out.SchedulingEligibility) + }) +} + func TestHTTP_NodeEligible(t *testing.T) { t.Parallel() require := require.New(t)