github.com/quite/nomad@v0.8.6/command/agent/metrics_endpoint_test.go (about)

     1  package agent
     2  
     3  import (
     4  	"net/http"
     5  	"net/http/httptest"
     6  	"testing"
     7  
     8  	metrics "github.com/armon/go-metrics"
     9  	"github.com/hashicorp/nomad/testutil"
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  func TestHTTP_MetricsWithIllegalMethod(t *testing.T) {
    14  	assert := assert.New(t)
    15  
    16  	t.Parallel()
    17  	httpTest(t, nil, func(s *TestAgent) {
    18  		req, err := http.NewRequest("DELETE", "/v1/metrics", nil)
    19  		assert.Nil(err)
    20  		respW := httptest.NewRecorder()
    21  
    22  		_, err = s.Server.MetricsRequest(respW, req)
    23  		assert.NotNil(err, "HTTP DELETE should not be accepted for this endpoint")
    24  	})
    25  }
    26  
    27  func TestHTTP_Metrics(t *testing.T) {
    28  	assert := assert.New(t)
    29  
    30  	t.Parallel()
    31  	httpTest(t, nil, func(s *TestAgent) {
    32  		// make a separate HTTP request first, to ensure Nomad has written metrics
    33  		// and prevent a race condition
    34  		req, err := http.NewRequest("GET", "/v1/agent/self", nil)
    35  		assert.Nil(err)
    36  		respW := httptest.NewRecorder()
    37  		s.Server.AgentSelfRequest(respW, req)
    38  
    39  		// now make a metrics endpoint request, which should be already initialized
    40  		// and written to
    41  		req, err = http.NewRequest("GET", "/v1/metrics", nil)
    42  		assert.Nil(err)
    43  		respW = httptest.NewRecorder()
    44  
    45  		testutil.WaitForResult(func() (bool, error) {
    46  			resp, err := s.Server.MetricsRequest(respW, req)
    47  			if err != nil {
    48  				return false, err
    49  			}
    50  			respW.Flush()
    51  
    52  			res := resp.(metrics.MetricsSummary)
    53  			return len(res.Gauges) != 0, nil
    54  		}, func(err error) {
    55  			t.Fatalf("should have metrics: %v", err)
    56  		})
    57  	})
    58  }