211 lines
4.6 KiB
Go
211 lines
4.6 KiB
Go
|
// Copyright (c) HashiCorp, Inc.
|
||
|
// SPDX-License-Identifier: MPL-2.0
|
||
|
|
||
|
package api
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/hashicorp/nomad/api/internal/testutil"
|
||
|
"github.com/shoenig/test/must"
|
||
|
)
|
||
|
|
||
|
func TestNodePools_List(t *testing.T) {
|
||
|
testutil.Parallel(t)
|
||
|
|
||
|
c, s := makeClient(t, nil, nil)
|
||
|
defer s.Stop()
|
||
|
nodePools := c.NodePools()
|
||
|
|
||
|
testCases := []struct {
|
||
|
name string
|
||
|
q *QueryOptions
|
||
|
expected []string
|
||
|
}{
|
||
|
{
|
||
|
name: "list all",
|
||
|
q: nil,
|
||
|
expected: []string{
|
||
|
NodePoolAll,
|
||
|
NodePoolDefault,
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "with query param",
|
||
|
q: &QueryOptions{
|
||
|
PerPage: 1,
|
||
|
},
|
||
|
expected: []string{NodePoolAll},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for _, tc := range testCases {
|
||
|
t.Run(tc.name, func(t *testing.T) {
|
||
|
resp, _, err := nodePools.List(tc.q)
|
||
|
must.NoError(t, err)
|
||
|
|
||
|
got := make([]string, len(resp))
|
||
|
for i, pool := range resp {
|
||
|
got[i] = pool.Name
|
||
|
}
|
||
|
must.SliceContainsAll(t, got, tc.expected)
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestNodePools_PrefixList(t *testing.T) {
|
||
|
testutil.Parallel(t)
|
||
|
|
||
|
c, s := makeClient(t, nil, nil)
|
||
|
defer s.Stop()
|
||
|
nodePools := c.NodePools()
|
||
|
|
||
|
// Create test node pool.
|
||
|
dev1 := &NodePool{Name: "dev-1"}
|
||
|
_, err := nodePools.Register(dev1, nil)
|
||
|
must.NoError(t, err)
|
||
|
|
||
|
testCases := []struct {
|
||
|
name string
|
||
|
prefix string
|
||
|
q *QueryOptions
|
||
|
expected []string
|
||
|
}{
|
||
|
{
|
||
|
name: "prefix",
|
||
|
prefix: "d",
|
||
|
q: nil,
|
||
|
expected: []string{
|
||
|
NodePoolDefault,
|
||
|
dev1.Name,
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "with query param",
|
||
|
prefix: "d",
|
||
|
q: &QueryOptions{
|
||
|
PerPage: 1,
|
||
|
},
|
||
|
expected: []string{NodePoolDefault},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for _, tc := range testCases {
|
||
|
t.Run(tc.name, func(t *testing.T) {
|
||
|
resp, _, err := nodePools.PrefixList(tc.prefix, tc.q)
|
||
|
must.NoError(t, err)
|
||
|
|
||
|
got := make([]string, len(resp))
|
||
|
for i, pool := range resp {
|
||
|
got[i] = pool.Name
|
||
|
}
|
||
|
must.SliceContainsAll(t, got, tc.expected)
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestNodePools_Info(t *testing.T) {
|
||
|
testutil.Parallel(t)
|
||
|
|
||
|
c, s := makeClient(t, nil, nil)
|
||
|
defer s.Stop()
|
||
|
nodePools := c.NodePools()
|
||
|
|
||
|
t.Run("default node pool", func(t *testing.T) {
|
||
|
pool, _, err := nodePools.Info(NodePoolDefault, nil)
|
||
|
must.NoError(t, err)
|
||
|
must.Eq(t, NodePoolDefault, pool.Name)
|
||
|
})
|
||
|
|
||
|
t.Run("missing node pool name", func(t *testing.T) {
|
||
|
pool, _, err := nodePools.Info("", nil)
|
||
|
must.ErrorContains(t, err, "missing node pool name")
|
||
|
must.Nil(t, pool)
|
||
|
})
|
||
|
|
||
|
t.Run("node pool name with special charaters", func(t *testing.T) {
|
||
|
pool, _, err := nodePools.Info("node/pool", nil)
|
||
|
must.ErrorContains(t, err, "not found")
|
||
|
must.Nil(t, pool)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func TestNodePools_Register(t *testing.T) {
|
||
|
testutil.Parallel(t)
|
||
|
|
||
|
c, s := makeClient(t, nil, nil)
|
||
|
defer s.Stop()
|
||
|
nodePools := c.NodePools()
|
||
|
|
||
|
// Create test node pool.
|
||
|
t.Run("create and update node pool", func(t *testing.T) {
|
||
|
dev1 := &NodePool{Name: "dev-1"}
|
||
|
_, err := nodePools.Register(dev1, nil)
|
||
|
must.NoError(t, err)
|
||
|
|
||
|
// Verify node pool was persisted.
|
||
|
got, _, err := nodePools.Info(dev1.Name, nil)
|
||
|
must.NoError(t, err)
|
||
|
must.Eq(t, dev1.Name, got.Name)
|
||
|
|
||
|
// Update test node pool.
|
||
|
dev1.Description = "test"
|
||
|
_, err = nodePools.Register(dev1, nil)
|
||
|
must.NoError(t, err)
|
||
|
|
||
|
// Verify node pool was updated.
|
||
|
got, _, err = nodePools.Info(dev1.Name, nil)
|
||
|
must.NoError(t, err)
|
||
|
must.Eq(t, dev1.Name, got.Name)
|
||
|
must.Eq(t, dev1.Description, got.Description)
|
||
|
})
|
||
|
|
||
|
t.Run("missing node pool", func(t *testing.T) {
|
||
|
_, err := nodePools.Register(nil, nil)
|
||
|
must.ErrorContains(t, err, "missing node pool")
|
||
|
})
|
||
|
|
||
|
t.Run("missing node pool name", func(t *testing.T) {
|
||
|
_, err := nodePools.Register(&NodePool{}, nil)
|
||
|
must.ErrorContains(t, err, "missing node pool name")
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func TestNodePools_Delete(t *testing.T) {
|
||
|
testutil.Parallel(t)
|
||
|
|
||
|
c, s := makeClient(t, nil, nil)
|
||
|
defer s.Stop()
|
||
|
nodePools := c.NodePools()
|
||
|
|
||
|
// Create test node pool.
|
||
|
t.Run("delete node pool", func(t *testing.T) {
|
||
|
dev1 := &NodePool{Name: "dev-1"}
|
||
|
_, err := nodePools.Register(dev1, nil)
|
||
|
must.NoError(t, err)
|
||
|
|
||
|
// Verify node pool was persisted.
|
||
|
got, _, err := nodePools.Info(dev1.Name, nil)
|
||
|
must.NoError(t, err)
|
||
|
must.Eq(t, dev1.Name, got.Name)
|
||
|
|
||
|
// Delete test node pool.
|
||
|
_, err = nodePools.Delete(dev1.Name, nil)
|
||
|
must.NoError(t, err)
|
||
|
|
||
|
// Verify node pool is gone.
|
||
|
got, _, err = nodePools.Info(dev1.Name, nil)
|
||
|
must.ErrorContains(t, err, "not found")
|
||
|
})
|
||
|
|
||
|
t.Run("missing node pool name", func(t *testing.T) {
|
||
|
_, err := nodePools.Delete("", nil)
|
||
|
must.ErrorContains(t, err, "missing node pool name")
|
||
|
})
|
||
|
|
||
|
t.Run("node pool name with special charaters", func(t *testing.T) {
|
||
|
_, err := nodePools.Delete("node/pool", nil)
|
||
|
must.ErrorContains(t, err, "not found")
|
||
|
})
|
||
|
}
|