Skip to content

Commit

Permalink
WIP: testing CR deletion
Browse files Browse the repository at this point in the history
  • Loading branch information
Thomas Eckert committed Oct 17, 2022
1 parent 03f244c commit ffed653
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 26 deletions.
29 changes: 7 additions & 22 deletions cli/cmd/uninstall/uninstall.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import (
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"sigs.k8s.io/controller-runtime/pkg/client"
)

Expand Down Expand Up @@ -50,7 +49,6 @@ type Command struct {
helmActionsRunner helm.HelmActionsRunner

// Configuration for interacting with Kubernetes.
restConfig *rest.Config
kubernetes kubernetes.Interface
client client.Client

Expand Down Expand Up @@ -356,20 +354,13 @@ func (c *Command) initKubernetes(settings *helmCLI.EnvSettings) error {
settings.KubeContext = c.flagKubeContext
}

if c.restConfig == nil {
if c.restConfig, err = settings.RESTClientGetter().ToRESTConfig(); err != nil {
return fmt.Errorf("error creating Kubernetes REST config %v", err)
}
restConfig, err := settings.RESTClientGetter().ToRESTConfig()
if err != nil {
return fmt.Errorf("error creating Kubernetes REST config %v", err)
}

if c.kubernetes == nil {
if c.kubernetes, err = kubernetes.NewForConfig(c.restConfig); err != nil {
return fmt.Errorf("error creating Kubernetes client %v", err)
}
}

if c.client == nil {
if c.client, err = client.New(c.restConfig, client.Options{}); err != nil {
if c.kubernetes, err = kubernetes.NewForConfig(restConfig); err != nil {
return fmt.Errorf("error creating Kubernetes client %v", err)
}
}
Expand Down Expand Up @@ -406,7 +397,8 @@ func (c *Command) promptDeletion(releaseType, releaseName, releaseNamespace stri
return true, nil
}

// crds is used to deserialize JSON returned from the `/apis/apiextensions.k8s.io/v1/customresourcedefinitions` endpoint.
// crds is used to deserialize JSON returned from the
// `/apis/apiextensions.k8s.io/v1/customresourcedefinitions` endpoint.
type crds struct {
Items []struct {
Metadata struct {
Expand Down Expand Up @@ -443,11 +435,11 @@ func (c *Command) deleteCustomResources() error {
return err
}

cr := &unstructured.Unstructured{}
for _, crd := range crds.Items {
if crd.Spec.Group == "consul.hashicorp.com" {
for _, version := range crd.Spec.Versions {
for _, namespace := range namespaces.Items {
cr := &unstructured.Unstructured{}
cr.SetGroupVersionKind(schema.GroupVersionKind{
Group: "consul.hashicorp.com",
Kind: crd.Spec.Names.Kind,
Expand Down Expand Up @@ -510,31 +502,24 @@ func (c *Command) wipeData(foundReleaseName, foundReleaseNamespace string) error
if err := c.deletePVCs(foundReleaseName, foundReleaseNamespace); err != nil {
return err
}

if err := c.deleteSecrets(foundReleaseNamespace); err != nil {
return err
}

if err := c.deleteServiceAccounts(foundReleaseName, foundReleaseNamespace); err != nil {
return err
}

if err := c.deleteRoles(foundReleaseName, foundReleaseNamespace); err != nil {
return err
}

if err := c.deleteRoleBindings(foundReleaseName, foundReleaseNamespace); err != nil {
return err
}

if err := c.deleteJobs(foundReleaseName, foundReleaseNamespace); err != nil {
return err
}

if err := c.deleteClusterRoles(foundReleaseName); err != nil {
return err
}

if err := c.deleteClusterRoleBindings(foundReleaseName); err != nil {
return err
}
Expand Down
70 changes: 66 additions & 4 deletions cli/cmd/uninstall/uninstall_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import (
"os"
"testing"

clientFake "sigs.k8s.io/controller-runtime/pkg/client/fake"

"github.com/hashicorp/consul-k8s/cli/common"
cmnFlag "github.com/hashicorp/consul-k8s/cli/common/flag"
"github.com/hashicorp/consul-k8s/cli/common/terminal"
Expand All @@ -24,7 +26,6 @@ import (
v1 "k8s.io/api/core/v1"
rbacv1 "k8s.io/api/rbac/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes/fake"
)

Expand Down Expand Up @@ -358,6 +359,67 @@ func TestDeleteClusterRoleBindings(t *testing.T) {
require.Equal(t, clusterrolebindings.Items[0].Name, clusterrolebinding3.Name)
}

func TestDeleteCustomResources(t *testing.T) {
cases := map[string]struct {
crs interface{}
crds crds
expected string
}{
"Without CRDs or CRs": {},
"Without CRs": {},
"With CRs": {},
}

for name, tc := range cases {
t.Run(name, func(t *testing.T) {
buf := new(bytes.Buffer)
c := getInitializedCommand(t, buf)
c.kubernetes = fake.NewSimpleClientset()
c.client = clientFake.NewClientBuilder().Build()

err := c.deleteCustomResources()
require.NoError(t, err)

actual := buf.String()
require.Equal(t, tc.expected, actual)

// Check to ensure no CRs exist anymore.
})
}
}

func TestCheckCustomResourceDefinitions(t *testing.T) {
cases := map[string]struct {
crds crds
expected string
}{
"Without CRDs": {
crds: crds{},
expected: "",
},
"With CRDs": {
crds: crds{},
expected: "",
},
}

for name, tc := range cases {
t.Run(name, func(t *testing.T) {
buf := new(bytes.Buffer)
c := getInitializedCommand(t, buf)
c.kubernetes = fake.NewSimpleClientset()
c.client = clientFake.NewClientBuilder().Build()

err := c.checkCustomResourceDefinitions()
require.NoError(t, err)

actual := buf.String()
require.Equal(t, tc.expected, actual)
})
}

}

func TestTaskCreateCommand_AutocompleteFlags(t *testing.T) {
t.Parallel()
cmd := getInitializedCommand(t, nil)
Expand Down Expand Up @@ -389,7 +451,6 @@ func TestTaskCreateCommand_AutocompleteArgs(t *testing.T) {
}

func TestUninstall(t *testing.T) {
var k8s kubernetes.Interface
cases := map[string]struct {
input []string
messages []string
Expand Down Expand Up @@ -549,8 +610,9 @@ func TestUninstall(t *testing.T) {
t.Run(name, func(t *testing.T) {
buf := new(bytes.Buffer)
c := getInitializedCommand(t, buf)
k8s = fake.NewSimpleClientset()
c.kubernetes = k8s
c.kubernetes = fake.NewSimpleClientset()
c.client = clientFake.NewClientBuilder().Build()

mock := tc.helmActionsRunner
c.helmActionsRunner = mock
if tc.preProcessingFunc != nil {
Expand Down

0 comments on commit ffed653

Please sign in to comment.