Skip to content

Commit 8172d3a

Browse files
author
Per Goncalves da Silva
committed
Add unintall feature test
Signed-off-by: Per Goncalves da Silva <[email protected]>
1 parent dbc4af3 commit 8172d3a

File tree

3 files changed

+321
-14
lines changed

3 files changed

+321
-14
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
Feature: Uninstall ClusterExtension
2+
3+
As an OLM user I would like to uninstall a cluster extension,
4+
removing all resources previously installed/updated through the extension.
5+
6+
Background:
7+
Given OLM is available
8+
And ClusterCatalog "test" serves bundles
9+
And ServiceAccount "olm-sa" with needed permissions is available in ${TEST_NAMESPACE}
10+
And ClusterExtension is applied
11+
"""
12+
apiVersion: olm.operatorframework.io/v1
13+
kind: ClusterExtension
14+
metadata:
15+
name: ${NAME}
16+
spec:
17+
namespace: ${TEST_NAMESPACE}
18+
serviceAccount:
19+
name: olm-sa
20+
source:
21+
sourceType: Catalog
22+
catalog:
23+
packageName: test
24+
selector:
25+
matchLabels:
26+
"olm.operatorframework.io/metadata.name": test-catalog
27+
"""
28+
And bundle "test-operator.1.2.0" is installed in version "1.2.0"
29+
And ClusterExtension is rolled out
30+
And ClusterExtension resources are created and labeled
31+
32+
Scenario: Removing ClusterExtension triggers the extension uninstall, eventually removing all installed resources
33+
When ClusterExtension is removed
34+
Then ClusterExtension resources are removed
35+
36+
Scenario: Removing ClusterExtension resources leads to all installed resources being removed even if the service account is no longer present
37+
When resource "serviceaccount/olm-sa" is removed
38+
# Ensure service account is gone before checking to ensure resources are cleaned up whether the service account
39+
# and its permissions are present on the cluster or not
40+
And resource "serviceaccount/olm-sa" is eventually not found
41+
And ClusterExtension is removed
42+
Then ClusterExtension resources are removed

test/e2e/steps/hooks.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
1717
"k8s.io/component-base/featuregate"
1818
"k8s.io/klog/v2/textlogger"
19+
"sigs.k8s.io/controller-runtime/pkg/client"
1920

2021
"github.com/operator-framework/operator-controller/internal/operator-controller/features"
2122
)
@@ -32,6 +33,26 @@ type scenarioContext struct {
3233
removedResources []unstructured.Unstructured
3334
backGroundCmds []*exec.Cmd
3435
metricsResponse map[string]string
36+
37+
extensionObjects []client.Object
38+
}
39+
40+
// SaveClusterExtensionObjects collects all resources related to the ClusterExtension container in
41+
// either their Helm release Secret or ClusterExtensionRevision depending on the applier being used
42+
// and saves them into the context.
43+
func (s *scenarioContext) SaveClusterExtensionObjects() error {
44+
objs, err := listExtensionResources(s.clusterExtensionName)
45+
if err != nil {
46+
return fmt.Errorf("failed to load extension resources into context: %w", err)
47+
}
48+
s.extensionObjects = objs
49+
return nil
50+
}
51+
52+
// GetClusterExtensionObjects returns the ClusterExtension objects currently save into the context.
53+
// Will always return nil until SaveClusterExtensionObjects is called
54+
func (s *scenarioContext) GetClusterExtensionObjects() []client.Object {
55+
return s.extensionObjects
3556
}
3657

3758
type contextKey string

0 commit comments

Comments
 (0)