github.com/Ilhicas/nomad@v1.0.4-0.20210304152020-e86851182bc3/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, cleanup := TestClient(t, nil)
    18  	defer cleanup()
    19  
    20  	req := &nstructs.NodeSpecificRequest{}
    21  	var resp structs.ClientStatsResponse
    22  	require.Nil(client.ClientRPC("ClientStats.Stats", &req, &resp))
    23  	require.NotNil(resp.HostStats)
    24  	require.NotNil(resp.HostStats.AllocDirStats)
    25  	require.NotZero(resp.HostStats.Uptime)
    26  }
    27  
    28  func TestClientStats_Stats_ACL(t *testing.T) {
    29  	t.Parallel()
    30  	require := require.New(t)
    31  
    32  	server, addr, root, cleanupS := testACLServer(t, nil)
    33  	defer cleanupS()
    34  
    35  	client, cleanupC := TestClient(t, func(c *config.Config) {
    36  		c.Servers = []string{addr}
    37  		c.ACLEnabled = true
    38  	})
    39  	defer cleanupC()
    40  
    41  	// Try request without a token and expect failure
    42  	{
    43  		req := &nstructs.NodeSpecificRequest{}
    44  		var resp structs.ClientStatsResponse
    45  		err := client.ClientRPC("ClientStats.Stats", &req, &resp)
    46  		require.NotNil(err)
    47  		require.EqualError(err, nstructs.ErrPermissionDenied.Error())
    48  	}
    49  
    50  	// Try request with an invalid token and expect failure
    51  	{
    52  		token := mock.CreatePolicyAndToken(t, server.State(), 1005, "invalid", mock.NodePolicy(acl.PolicyDeny))
    53  		req := &nstructs.NodeSpecificRequest{}
    54  		req.AuthToken = token.SecretID
    55  
    56  		var resp structs.ClientStatsResponse
    57  		err := client.ClientRPC("ClientStats.Stats", &req, &resp)
    58  
    59  		require.NotNil(err)
    60  		require.EqualError(err, nstructs.ErrPermissionDenied.Error())
    61  	}
    62  
    63  	// Try request with a valid token
    64  	{
    65  		token := mock.CreatePolicyAndToken(t, server.State(), 1007, "valid", mock.NodePolicy(acl.PolicyRead))
    66  		req := &nstructs.NodeSpecificRequest{}
    67  		req.AuthToken = token.SecretID
    68  
    69  		var resp structs.ClientStatsResponse
    70  		err := client.ClientRPC("ClientStats.Stats", &req, &resp)
    71  
    72  		require.Nil(err)
    73  		require.NotNil(resp.HostStats)
    74  	}
    75  
    76  	// Try request with a management token
    77  	{
    78  		req := &nstructs.NodeSpecificRequest{}
    79  		req.AuthToken = root.SecretID
    80  
    81  		var resp structs.ClientStatsResponse
    82  		err := client.ClientRPC("ClientStats.Stats", &req, &resp)
    83  
    84  		require.Nil(err)
    85  		require.NotNil(resp.HostStats)
    86  	}
    87  }