github.com/hashicorp/nomad/api@v0.0.0-20240306165712-3193ac204f65/node_pools_test.go (about)

     1  // Copyright (c) HashiCorp, Inc.
     2  // SPDX-License-Identifier: MPL-2.0
     3  
     4  package api
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/hashicorp/nomad/api/internal/testutil"
    10  	"github.com/shoenig/test/must"
    11  )
    12  
    13  func TestNodePools_List(t *testing.T) {
    14  	testutil.Parallel(t)
    15  
    16  	c, s := makeClient(t, nil, nil)
    17  	defer s.Stop()
    18  	nodePools := c.NodePools()
    19  
    20  	testCases := []struct {
    21  		name     string
    22  		q        *QueryOptions
    23  		expected []string
    24  	}{
    25  		{
    26  			name: "list all",
    27  			q:    nil,
    28  			expected: []string{
    29  				NodePoolAll,
    30  				NodePoolDefault,
    31  			},
    32  		},
    33  		{
    34  			name: "with query param",
    35  			q: &QueryOptions{
    36  				PerPage: 1,
    37  			},
    38  			expected: []string{NodePoolAll},
    39  		},
    40  	}
    41  
    42  	for _, tc := range testCases {
    43  		t.Run(tc.name, func(t *testing.T) {
    44  			resp, _, err := nodePools.List(tc.q)
    45  			must.NoError(t, err)
    46  
    47  			got := make([]string, len(resp))
    48  			for i, pool := range resp {
    49  				got[i] = pool.Name
    50  			}
    51  			must.SliceContainsAll(t, got, tc.expected)
    52  		})
    53  	}
    54  }
    55  
    56  func TestNodePools_PrefixList(t *testing.T) {
    57  	testutil.Parallel(t)
    58  
    59  	c, s := makeClient(t, nil, nil)
    60  	defer s.Stop()
    61  	nodePools := c.NodePools()
    62  
    63  	// Create test node pool.
    64  	dev1 := &NodePool{Name: "dev-1"}
    65  	_, err := nodePools.Register(dev1, nil)
    66  	must.NoError(t, err)
    67  
    68  	testCases := []struct {
    69  		name     string
    70  		prefix   string
    71  		q        *QueryOptions
    72  		expected []string
    73  	}{
    74  		{
    75  			name:   "prefix",
    76  			prefix: "d",
    77  			q:      nil,
    78  			expected: []string{
    79  				NodePoolDefault,
    80  				dev1.Name,
    81  			},
    82  		},
    83  		{
    84  			name:   "with query param",
    85  			prefix: "d",
    86  			q: &QueryOptions{
    87  				PerPage: 1,
    88  			},
    89  			expected: []string{NodePoolDefault},
    90  		},
    91  	}
    92  
    93  	for _, tc := range testCases {
    94  		t.Run(tc.name, func(t *testing.T) {
    95  			resp, _, err := nodePools.PrefixList(tc.prefix, tc.q)
    96  			must.NoError(t, err)
    97  
    98  			got := make([]string, len(resp))
    99  			for i, pool := range resp {
   100  				got[i] = pool.Name
   101  			}
   102  			must.SliceContainsAll(t, got, tc.expected)
   103  		})
   104  	}
   105  }
   106  
   107  func TestNodePools_Info(t *testing.T) {
   108  	testutil.Parallel(t)
   109  
   110  	c, s := makeClient(t, nil, nil)
   111  	defer s.Stop()
   112  	nodePools := c.NodePools()
   113  
   114  	t.Run("default node pool", func(t *testing.T) {
   115  		pool, _, err := nodePools.Info(NodePoolDefault, nil)
   116  		must.NoError(t, err)
   117  		must.Eq(t, NodePoolDefault, pool.Name)
   118  	})
   119  
   120  	t.Run("missing node pool name", func(t *testing.T) {
   121  		pool, _, err := nodePools.Info("", nil)
   122  		must.ErrorContains(t, err, "missing node pool name")
   123  		must.Nil(t, pool)
   124  	})
   125  
   126  	t.Run("node pool name with special charaters", func(t *testing.T) {
   127  		pool, _, err := nodePools.Info("node/pool", nil)
   128  		must.ErrorContains(t, err, "not found")
   129  		must.Nil(t, pool)
   130  	})
   131  }
   132  
   133  func TestNodePools_Register(t *testing.T) {
   134  	testutil.Parallel(t)
   135  
   136  	c, s := makeClient(t, nil, nil)
   137  	defer s.Stop()
   138  	nodePools := c.NodePools()
   139  
   140  	// Create test node pool.
   141  	t.Run("create and update node pool", func(t *testing.T) {
   142  		dev1 := &NodePool{Name: "dev-1"}
   143  		_, err := nodePools.Register(dev1, nil)
   144  		must.NoError(t, err)
   145  
   146  		// Verify node pool was persisted.
   147  		got, _, err := nodePools.Info(dev1.Name, nil)
   148  		must.NoError(t, err)
   149  		must.Eq(t, dev1.Name, got.Name)
   150  
   151  		// Update test node pool.
   152  		dev1.Description = "test"
   153  		_, err = nodePools.Register(dev1, nil)
   154  		must.NoError(t, err)
   155  
   156  		// Verify node pool was updated.
   157  		got, _, err = nodePools.Info(dev1.Name, nil)
   158  		must.NoError(t, err)
   159  		must.Eq(t, dev1.Name, got.Name)
   160  		must.Eq(t, dev1.Description, got.Description)
   161  	})
   162  
   163  	t.Run("missing node pool", func(t *testing.T) {
   164  		_, err := nodePools.Register(nil, nil)
   165  		must.ErrorContains(t, err, "missing node pool")
   166  	})
   167  
   168  	t.Run("missing node pool name", func(t *testing.T) {
   169  		_, err := nodePools.Register(&NodePool{}, nil)
   170  		must.ErrorContains(t, err, "missing node pool name")
   171  	})
   172  }
   173  
   174  func TestNodePools_Delete(t *testing.T) {
   175  	testutil.Parallel(t)
   176  
   177  	c, s := makeClient(t, nil, nil)
   178  	defer s.Stop()
   179  	nodePools := c.NodePools()
   180  
   181  	// Create test node pool.
   182  	t.Run("delete node pool", func(t *testing.T) {
   183  		dev1 := &NodePool{Name: "dev-1"}
   184  		_, err := nodePools.Register(dev1, nil)
   185  		must.NoError(t, err)
   186  
   187  		// Verify node pool was persisted.
   188  		got, _, err := nodePools.Info(dev1.Name, nil)
   189  		must.NoError(t, err)
   190  		must.Eq(t, dev1.Name, got.Name)
   191  
   192  		// Delete test node pool.
   193  		_, err = nodePools.Delete(dev1.Name, nil)
   194  		must.NoError(t, err)
   195  
   196  		// Verify node pool is gone.
   197  		got, _, err = nodePools.Info(dev1.Name, nil)
   198  		must.ErrorContains(t, err, "not found")
   199  	})
   200  
   201  	t.Run("missing node pool name", func(t *testing.T) {
   202  		_, err := nodePools.Delete("", nil)
   203  		must.ErrorContains(t, err, "missing node pool name")
   204  	})
   205  
   206  	t.Run("node pool name with special charaters", func(t *testing.T) {
   207  		_, err := nodePools.Delete("node/pool", nil)
   208  		must.ErrorContains(t, err, "not found")
   209  	})
   210  }