github.com/blixtra/nomad@v0.7.2-0.20171221000451-da9a1d7bb050/command/agent/stats_endpoint_test.go (about)

     1  package agent
     2  
     3  import (
     4  	"net/http"
     5  	"net/http/httptest"
     6  	"testing"
     7  
     8  	"github.com/hashicorp/nomad/acl"
     9  	"github.com/hashicorp/nomad/nomad/mock"
    10  	"github.com/hashicorp/nomad/nomad/structs"
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func TestClientStatsRequest(t *testing.T) {
    15  	t.Parallel()
    16  	httpTest(t, nil, func(s *TestAgent) {
    17  		req, err := http.NewRequest("GET", "/v1/client/stats/?since=foo", nil)
    18  		if err != nil {
    19  			t.Fatalf("err: %v", err)
    20  		}
    21  
    22  		respW := httptest.NewRecorder()
    23  		_, err = s.Server.ClientStatsRequest(respW, req)
    24  		if err != nil {
    25  			t.Fatalf("unexpected err: %v", err)
    26  		}
    27  	})
    28  }
    29  
    30  func TestClientStatsRequest_ACL(t *testing.T) {
    31  	t.Parallel()
    32  	assert := assert.New(t)
    33  	httpACLTest(t, nil, func(s *TestAgent) {
    34  		state := s.Agent.server.State()
    35  		req, err := http.NewRequest("GET", "/v1/client/stats/", nil)
    36  		assert.Nil(err)
    37  
    38  		// Try request without a token and expect failure
    39  		{
    40  			respW := httptest.NewRecorder()
    41  			_, err := s.Server.ClientStatsRequest(respW, req)
    42  			assert.NotNil(err)
    43  			assert.Equal(err.Error(), structs.ErrPermissionDenied.Error())
    44  		}
    45  
    46  		// Try request with an invalid token and expect failure
    47  		{
    48  			respW := httptest.NewRecorder()
    49  			token := mock.CreatePolicyAndToken(t, state, 1005, "invalid", mock.NodePolicy(acl.PolicyDeny))
    50  			setToken(req, token)
    51  			_, err := s.Server.ClientStatsRequest(respW, req)
    52  			assert.NotNil(err)
    53  			assert.Equal(err.Error(), structs.ErrPermissionDenied.Error())
    54  		}
    55  
    56  		// Try request with a valid token
    57  		{
    58  			respW := httptest.NewRecorder()
    59  			token := mock.CreatePolicyAndToken(t, state, 1007, "valid", mock.NodePolicy(acl.PolicyRead))
    60  			setToken(req, token)
    61  			_, err := s.Server.ClientStatsRequest(respW, req)
    62  			assert.Nil(err)
    63  			assert.Equal(http.StatusOK, respW.Code)
    64  		}
    65  
    66  		// Try request with a management token
    67  		{
    68  			respW := httptest.NewRecorder()
    69  			setToken(req, s.RootToken)
    70  			_, err := s.Server.ClientStatsRequest(respW, req)
    71  			assert.Nil(err)
    72  			assert.Equal(http.StatusOK, respW.Code)
    73  		}
    74  	})
    75  }