@@ -10,6 +10,7 @@ import (
10
10
"fmt"
11
11
"math"
12
12
"math/big"
13
+ "reflect"
13
14
"sort"
14
15
"strings"
15
16
"testing"
@@ -28,6 +29,7 @@ import (
28
29
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
29
30
"k8s.io/apimachinery/pkg/labels"
30
31
"k8s.io/apimachinery/pkg/runtime"
32
+ "k8s.io/apimachinery/pkg/util/diff"
31
33
utilerrors "k8s.io/apimachinery/pkg/util/errors"
32
34
"k8s.io/apimachinery/pkg/util/intstr"
33
35
"k8s.io/client-go/informers"
@@ -39,8 +41,7 @@ import (
39
41
apiregistrationfake "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/fake"
40
42
kagg "k8s.io/kube-aggregator/pkg/client/informers/externalversions"
41
43
42
- "github.com/operator-framework/operator-lifecycle-manager/pkg/metrics"
43
- "github.com/operator-framework/operator-lifecycle-manager/pkg/api/apis/operators/v1"
44
+ v1 "github.com/operator-framework/operator-lifecycle-manager/pkg/api/apis/operators/v1"
44
45
"github.com/operator-framework/operator-lifecycle-manager/pkg/api/apis/operators/v1alpha1"
45
46
"github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/clientset/versioned"
46
47
"github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/clientset/versioned/fake"
@@ -56,6 +57,7 @@ import (
56
57
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorlister"
57
58
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/ownerutil"
58
59
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/queueinformer"
60
+ "github.com/operator-framework/operator-lifecycle-manager/pkg/metrics"
59
61
)
60
62
61
63
// Fakes
@@ -796,6 +798,7 @@ func TestTransitionCSV(t *testing.T) {
796
798
}
797
799
type expected struct {
798
800
csvStates map [string ]csvState
801
+ objs []runtime.Object
799
802
err map [string ]error
800
803
}
801
804
tests := []struct {
@@ -2174,7 +2177,7 @@ func TestTransitionCSV(t *testing.T) {
2174
2177
},
2175
2178
},
2176
2179
{
2177
- name : "SingleCSVInstallingToSucceeded" ,
2180
+ name : "SingleCSVInstallingToSucceeded/UnmanagedDeploymentNotAffected " ,
2178
2181
initial : initial {
2179
2182
csvs : []runtime.Object {
2180
2183
csvWithAnnotations (csv ("csv1" ,
@@ -2193,12 +2196,55 @@ func TestTransitionCSV(t *testing.T) {
2193
2196
},
2194
2197
objs : []runtime.Object {
2195
2198
deployment ("csv1-dep1" , namespace , "sa" , defaultTemplateAnnotations ),
2199
+ deployment ("extra-dep" , namespace , "sa" , nil ),
2196
2200
},
2197
2201
},
2198
2202
expected : expected {
2199
2203
csvStates : map [string ]csvState {
2200
2204
"csv1" : {exists : true , phase : v1alpha1 .CSVPhaseSucceeded },
2201
2205
},
2206
+ objs : []runtime.Object {
2207
+ deployment ("extra-dep" , namespace , "sa" , nil ),
2208
+ },
2209
+ },
2210
+ },
2211
+ {
2212
+ name : "SingleCSVSucceededToSucceeded/UnmanagedDeploymentInNamespace" ,
2213
+ initial : initial {
2214
+ csvs : []runtime.Object {
2215
+ withConditionReason (csvWithAnnotations (csv ("csv1" ,
2216
+ namespace ,
2217
+ "0.0.0" ,
2218
+ "" ,
2219
+ installStrategy ("csv1-dep1" , nil , nil ),
2220
+ []* v1beta1.CustomResourceDefinition {crd ("c1" , "v1" , "g1" )},
2221
+ []* v1beta1.CustomResourceDefinition {},
2222
+ v1alpha1 .CSVPhaseSucceeded ,
2223
+ ), defaultTemplateAnnotations ), v1alpha1 .CSVReasonInstallSuccessful ),
2224
+ },
2225
+ clientObjs : []runtime.Object {defaultOperatorGroup },
2226
+ crds : []runtime.Object {
2227
+ crd ("c1" , "v1" , "g1" ),
2228
+ },
2229
+ objs : []runtime.Object {
2230
+ withLabels (
2231
+ deployment ("csv1-dep1" , namespace , "sa" , defaultTemplateAnnotations ),
2232
+ map [string ]string {
2233
+ ownerutil .OwnerKey : "csv1" ,
2234
+ ownerutil .OwnerNamespaceKey : namespace ,
2235
+ ownerutil .OwnerKind : "ClusterServiceVersion" ,
2236
+ },
2237
+ ),
2238
+ deployment ("extra-dep" , namespace , "sa" , nil ),
2239
+ },
2240
+ },
2241
+ expected : expected {
2242
+ csvStates : map [string ]csvState {
2243
+ "csv1" : {exists : true , phase : v1alpha1 .CSVPhaseSucceeded },
2244
+ },
2245
+ objs : []runtime.Object {
2246
+ deployment ("extra-dep" , namespace , "sa" , nil ),
2247
+ },
2202
2248
},
2203
2249
},
2204
2250
{
@@ -2859,6 +2905,11 @@ func TestTransitionCSV(t *testing.T) {
2859
2905
}
2860
2906
}
2861
2907
}
2908
+
2909
+ // Verify other objects
2910
+ if tt .expected .objs != nil {
2911
+ RequireObjectsInNamespace (t , op .OpClient , op .client , namespace , tt .expected .objs )
2912
+ }
2862
2913
})
2863
2914
}
2864
2915
}
@@ -3706,35 +3757,39 @@ func TestSyncOperatorGroups(t *testing.T) {
3706
3757
assert .Equal (t , tt .expectedStatus , operatorGroup .Status )
3707
3758
3708
3759
for namespace , objects := range tt .final .objects {
3709
- for _ , object := range objects {
3710
- var err error
3711
- var fetched runtime.Object
3712
- switch o := object .(type ) {
3713
- case * appsv1.Deployment :
3714
- fetched , err = op .OpClient .GetDeployment (namespace , o .GetName ())
3715
- case * rbacv1.ClusterRole :
3716
- fetched , err = op .OpClient .GetClusterRole (o .GetName ())
3717
- case * rbacv1.Role :
3718
- fetched , err = op .OpClient .GetRole (namespace , o .GetName ())
3719
- case * rbacv1.ClusterRoleBinding :
3720
- fetched , err = op .OpClient .GetClusterRoleBinding (o .GetName ())
3721
- case * rbacv1.RoleBinding :
3722
- fetched , err = op .OpClient .GetRoleBinding (namespace , o .GetName ())
3723
- case * v1alpha1.ClusterServiceVersion :
3724
- fetched , err = op .client .OperatorsV1alpha1 ().ClusterServiceVersions (namespace ).Get (o .GetName (), metav1.GetOptions {})
3725
- case * v1.OperatorGroup :
3726
- fetched , err = op .client .OperatorsV1 ().OperatorGroups (namespace ).Get (o .GetName (), metav1.GetOptions {})
3727
- default :
3728
- require .Failf (t , "couldn't find expected object" , "%#v" , object )
3729
- }
3730
- require .NoError (t , err , "couldn't fetch %s %v" , namespace , object )
3731
- require .Equal (t , object , fetched , "%s in %s not equal" , object .GetObjectKind ().GroupVersionKind ().String (), namespace )
3732
- }
3760
+ RequireObjectsInNamespace (t , op .OpClient , op .client , namespace , objects )
3733
3761
}
3734
3762
})
3735
3763
}
3736
3764
}
3737
3765
3766
+ func RequireObjectsInNamespace (t * testing.T , opClient operatorclient.ClientInterface , client versioned.Interface , namespace string , objects []runtime.Object ) {
3767
+ for _ , object := range objects {
3768
+ var err error
3769
+ var fetched runtime.Object
3770
+ switch o := object .(type ) {
3771
+ case * appsv1.Deployment :
3772
+ fetched , err = opClient .GetDeployment (namespace , o .GetName ())
3773
+ case * rbacv1.ClusterRole :
3774
+ fetched , err = opClient .GetClusterRole (o .GetName ())
3775
+ case * rbacv1.Role :
3776
+ fetched , err = opClient .GetRole (namespace , o .GetName ())
3777
+ case * rbacv1.ClusterRoleBinding :
3778
+ fetched , err = opClient .GetClusterRoleBinding (o .GetName ())
3779
+ case * rbacv1.RoleBinding :
3780
+ fetched , err = opClient .GetRoleBinding (namespace , o .GetName ())
3781
+ case * v1alpha1.ClusterServiceVersion :
3782
+ fetched , err = client .OperatorsV1alpha1 ().ClusterServiceVersions (namespace ).Get (o .GetName (), metav1.GetOptions {})
3783
+ case * v1.OperatorGroup :
3784
+ fetched , err = client .OperatorsV1 ().OperatorGroups (namespace ).Get (o .GetName (), metav1.GetOptions {})
3785
+ default :
3786
+ require .Failf (t , "couldn't find expected object" , "%#v" , object )
3787
+ }
3788
+ require .NoError (t , err , "couldn't fetch %s %v" , namespace , object )
3789
+ require .True (t , reflect .DeepEqual (object , fetched ), diff .ObjectDiff (object , fetched ))
3790
+ }
3791
+ }
3792
+
3738
3793
func TestIsReplacing (t * testing.T ) {
3739
3794
logrus .SetLevel (logrus .DebugLevel )
3740
3795
namespace := "ns"
0 commit comments