Skip to content

Commit 6985aa4

Browse files
committed
test(operator): toggle cvo on startup and teardown
1 parent 2cd4186 commit 6985aa4

File tree

2 files changed

+43
-12
lines changed

2 files changed

+43
-12
lines changed

test/e2e/operator_e2e_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,13 @@ import (
3131
// 11. Delete ns-b
3232
// 12. Ensure the reference to ns-b is eventually removed from o's status.components.refs field
3333
func TestOperatorComponentSelection(t *testing.T) {
34-
// Toggle v2alpha1 feature-gate for this test.
34+
// Toggle v2alpha1 feature-gate for this test
3535
c := newKubeClient(t)
36+
require.NoError(t, toggleCVO(t, c))
3637
require.NoError(t, togglev2alpha1(t, c))
3738
defer func() {
3839
require.NoError(t, togglev2alpha1(t, c))
40+
require.NoError(t, toggleCVO(t, c))
3941
}()
4042

4143
// Create an operator resource, o

test/e2e/util_test.go

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
2121
extScheme "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/scheme"
2222
"k8s.io/apimachinery/pkg/api/equality"
23-
"k8s.io/apimachinery/pkg/api/errors"
23+
apierrors "k8s.io/apimachinery/pkg/api/errors"
2424
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2525
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
2626
"k8s.io/apimachinery/pkg/labels"
@@ -31,6 +31,7 @@ import (
3131
"k8s.io/apimachinery/pkg/watch"
3232
"k8s.io/apiserver/pkg/storage/names"
3333
k8sscheme "k8s.io/client-go/kubernetes/scheme"
34+
"k8s.io/client-go/util/retry"
3435
"k8s.io/component-base/featuregate"
3536

3637
"github.com/operator-framework/operator-lifecycle-manager/pkg/api/apis/operators/v1alpha1"
@@ -222,7 +223,7 @@ func awaitAnnotations(t *testing.T, query func() (metav1.ObjectMeta, error), exp
222223
err = wait.Poll(pollInterval, pollDuration, func() (bool, error) {
223224
t.Logf("Waiting for annotations to match %v", expected)
224225
obj, err := query()
225-
if err != nil && !errors.IsNotFound(err) {
226+
if err != nil && !apierrors.IsNotFound(err) {
226227
return false, err
227228
}
228229
t.Logf("current annotations: %v", obj.GetAnnotations())
@@ -258,7 +259,7 @@ func waitForDelete(checkResource checkResourceFunc) error {
258259
var err error
259260
err = wait.Poll(pollInterval, pollDuration, func() (bool, error) {
260261
err := checkResource()
261-
if errors.IsNotFound(err) {
262+
if apierrors.IsNotFound(err) {
262263
return true, nil
263264
}
264265
if err != nil {
@@ -447,7 +448,7 @@ func createInternalCatalogSource(t *testing.T, c operatorclient.ClientInterface,
447448

448449
t.Logf("Creating catalog source %s in namespace %s...", name, namespace)
449450
catalogSource, err := crc.OperatorsV1alpha1().CatalogSources(namespace).Create(catalogSource)
450-
if err != nil && !errors.IsAlreadyExists(err) {
451+
if err != nil && !apierrors.IsAlreadyExists(err) {
451452
require.NoError(t, err)
452453
}
453454
t.Logf("Catalog source %s created", name)
@@ -499,7 +500,7 @@ func createConfigMapForCatalogData(t *testing.T, c operatorclient.ClientInterfac
499500
}
500501

501502
createdConfigMap, err := c.KubernetesInterface().CoreV1().ConfigMaps(namespace).Create(catalogConfigMap)
502-
if err != nil && !errors.IsAlreadyExists(err) {
503+
if err != nil && !apierrors.IsAlreadyExists(err) {
503504
require.NoError(t, err)
504505
}
505506
return createdConfigMap, buildConfigMapCleanupFunc(t, c, namespace, createdConfigMap)
@@ -710,8 +711,10 @@ func toggleFeatureGates(t *testing.T, c operatorclient.ClientInterface, deployme
710711
return err
711712
}
712713

713-
_, err = c.KubernetesInterface().AppsV1().Deployments(deployment.GetNamespace()).Update(deployment)
714-
if err != nil {
714+
if err := retry.RetryOnConflict(retry.DefaultBackoff, func() error {
715+
_, err := c.KubernetesInterface().AppsV1().Deployments(deployment.GetNamespace()).Update(deployment)
716+
return err
717+
}); err != nil {
715718
return err
716719
}
717720

@@ -723,8 +726,34 @@ func toggleFeatureGates(t *testing.T, c operatorclient.ClientInterface, deployme
723726
return err
724727
}
725728

726-
func toggleCVO() (func() error, error) {
727-
return func() error {
728-
return nil
729-
}, nil
729+
const (
730+
cvoNamespace = "openshift-cluster-version"
731+
cvoDeploymentName = "cluster-version-operator"
732+
)
733+
734+
func toggleCVO(t *testing.T, c operatorclient.ClientInterface) error {
735+
scale, err := c.KubernetesInterface().AppsV1().Deployments(cvoNamespace).GetScale(cvoDeploymentName, metav1.GetOptions{})
736+
if err != nil {
737+
if apierrors.IsNotFound(err) {
738+
// CVO is not enabled
739+
err = nil
740+
}
741+
742+
return err
743+
}
744+
745+
if scale.Spec.Replicas > 0 {
746+
scale.Spec.Replicas = 0
747+
} else {
748+
scale.Spec.Replicas = 1
749+
}
750+
751+
if err := retry.RetryOnConflict(retry.DefaultBackoff, func() error {
752+
_, err := c.KubernetesInterface().AppsV1().Deployments(cvoNamespace).UpdateScale(cvoDeploymentName, scale)
753+
return err
754+
}); err != nil {
755+
return err
756+
}
757+
758+
return nil
730759
}

0 commit comments

Comments
 (0)