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 }