github.com/djenriquez/nomad-1@v0.8.1/client/client_stats_endpoint_test.go (about)

     1  package client
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/hashicorp/nomad/acl"
     7  	"github.com/hashicorp/nomad/client/config"
     8  	"github.com/hashicorp/nomad/client/structs"
     9  	"github.com/hashicorp/nomad/nomad/mock"
    10  	nstructs "github.com/hashicorp/nomad/nomad/structs"
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  func TestClientStats_Stats(t *testing.T) {
    15  	t.Parallel()
    16  	require := require.New(t)
    17  	client := TestClient(t, nil)
    18  
    19  	req := &nstructs.NodeSpecificRequest{}
    20  	var resp structs.ClientStatsResponse
    21  	require.Nil(client.ClientRPC("ClientStats.Stats", &req, &resp))
    22  	require.NotNil(resp.HostStats)
    23  	require.NotNil(resp.HostStats.AllocDirStats)
    24  	require.NotZero(resp.HostStats.Uptime)
    25  }
    26  
    27  func TestClientStats_Stats_ACL(t *testing.T) {
    28  	t.Parallel()
    29  	require := require.New(t)
    30  	server, addr, root := testACLServer(t, nil)
    31  	defer server.Shutdown()
    32  
    33  	client := TestClient(t, func(c *config.Config) {
    34  		c.Servers = []string{addr}
    35  		c.ACLEnabled = true
    36  	})
    37  	defer client.Shutdown()
    38  
    39  	// Try request without a token and expect failure
    40  	{
    41  		req := &nstructs.NodeSpecificRequest{}
    42  		var resp structs.ClientStatsResponse
    43  		err := client.ClientRPC("ClientStats.Stats", &req, &resp)
    44  		require.NotNil(err)
    45  		require.EqualError(err, nstructs.ErrPermissionDenied.Error())
    46  	}
    47  
    48  	// Try request with an invalid token and expect failure
    49  	{
    50  		token := mock.CreatePolicyAndToken(t, server.State(), 1005, "invalid", mock.NodePolicy(acl.PolicyDeny))
    51  		req := &nstructs.NodeSpecificRequest{}
    52  		req.AuthToken = token.SecretID
    53  
    54  		var resp structs.ClientStatsResponse
    55  		err := client.ClientRPC("ClientStats.Stats", &req, &resp)
    56  
    57  		require.NotNil(err)
    58  		require.EqualError(err, nstructs.ErrPermissionDenied.Error())
    59  	}
    60  
    61  	// Try request with a valid token
    62  	{
    63  		token := mock.CreatePolicyAndToken(t, server.State(), 1007, "valid", mock.NodePolicy(acl.PolicyRead))
    64  		req := &nstructs.NodeSpecificRequest{}
    65  		req.AuthToken = token.SecretID
    66  
    67  		var resp structs.ClientStatsResponse
    68  		err := client.ClientRPC("ClientStats.Stats", &req, &resp)
    69  
    70  		require.Nil(err)
    71  		require.NotNil(resp.HostStats)
    72  	}
    73  
    74  	// Try request with a management token
    75  	{
    76  		req := &nstructs.NodeSpecificRequest{}
    77  		req.AuthToken = root.SecretID
    78  
    79  		var resp structs.ClientStatsResponse
    80  		err := client.ClientRPC("ClientStats.Stats", &req, &resp)
    81  
    82  		require.Nil(err)
    83  		require.NotNil(resp.HostStats)
    84  	}
    85  }