mirror of
https://github.com/kemko/nomad.git
synced 2026-01-05 18:05:42 +03:00
No functional changes, just cleaning up deprecated usages that are removed in v2 and replace one call of .Slice with .ForEach to avoid making the intermediate copy.
103 lines
2.9 KiB
Go
103 lines
2.9 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package acl
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/hashicorp/go-set/v2"
|
|
"github.com/hashicorp/nomad/api"
|
|
"github.com/shoenig/test"
|
|
"github.com/shoenig/test/must"
|
|
)
|
|
|
|
// TestResourceType indicates what the resource is so the Cleanup process can
|
|
// use the correct API.
|
|
type TestResourceType int
|
|
|
|
const (
|
|
NamespaceTestResourceType TestResourceType = iota
|
|
ACLPolicyTestResourceType
|
|
ACLRoleTestResourceType
|
|
ACLTokenTestResourceType
|
|
)
|
|
|
|
// Cleanup stores Nomad resources that have been created by a test which will
|
|
// need to be deleted once the test exits. This ensures other tests can run in
|
|
// a clean environment and reduces the potential for conflicts.
|
|
type Cleanup struct {
|
|
namespaces *set.Set[string]
|
|
aclPolicies *set.Set[string]
|
|
aclRoles *set.Set[string]
|
|
aclTokens *set.Set[string]
|
|
}
|
|
|
|
// NewCleanup generates an initialized Cleanup object for immediate use.
|
|
func NewCleanup() *Cleanup {
|
|
return &Cleanup{
|
|
namespaces: set.New[string](0),
|
|
aclPolicies: set.New[string](0),
|
|
aclRoles: set.New[string](0),
|
|
aclTokens: set.New[string](0),
|
|
}
|
|
}
|
|
|
|
// Run triggers a Cleanup of all the stored resources. This should typically be
|
|
// called via defer, so it will always Run no matter if the test fails or not.
|
|
// Any failure will ultimately fail the test, but will not stop the attempts to
|
|
// delete all the resources.
|
|
func (c *Cleanup) Run(t *testing.T, nomadClient *api.Client) {
|
|
for _, namespace := range c.namespaces.Slice() {
|
|
_, err := nomadClient.Namespaces().Delete(namespace, nil)
|
|
test.NoError(t, err)
|
|
}
|
|
|
|
for _, policy := range c.aclPolicies.Slice() {
|
|
_, err := nomadClient.ACLPolicies().Delete(policy, nil)
|
|
test.NoError(t, err)
|
|
}
|
|
|
|
for _, role := range c.aclRoles.Slice() {
|
|
_, err := nomadClient.ACLRoles().Delete(role, nil)
|
|
test.NoError(t, err)
|
|
}
|
|
|
|
for _, token := range c.aclTokens.Slice() {
|
|
_, err := nomadClient.ACLTokens().Delete(token, nil)
|
|
test.NoError(t, err)
|
|
}
|
|
|
|
must.NoError(t, nomadClient.System().GarbageCollect())
|
|
}
|
|
|
|
// Add the resource identifier to the resource tracker. It will be removed by
|
|
// the Cleanup function once it is triggered.
|
|
func (c *Cleanup) Add(id string, resourceType TestResourceType) {
|
|
switch resourceType {
|
|
case NamespaceTestResourceType:
|
|
c.namespaces.Insert(id)
|
|
case ACLPolicyTestResourceType:
|
|
c.aclPolicies.Insert(id)
|
|
case ACLRoleTestResourceType:
|
|
c.aclRoles.Insert(id)
|
|
case ACLTokenTestResourceType:
|
|
c.aclTokens.Insert(id)
|
|
}
|
|
}
|
|
|
|
// Remove the resource identifier from the resource tracker, indicating it is
|
|
// no longer existing on the cluster and does not need to be cleaned.
|
|
func (c *Cleanup) Remove(id string, resourceType TestResourceType) {
|
|
switch resourceType {
|
|
case NamespaceTestResourceType:
|
|
c.namespaces.Remove(id)
|
|
case ACLPolicyTestResourceType:
|
|
c.aclPolicies.Remove(id)
|
|
case ACLRoleTestResourceType:
|
|
c.aclRoles.Remove(id)
|
|
case ACLTokenTestResourceType:
|
|
c.aclTokens.Remove(id)
|
|
}
|
|
}
|