@@ -2,26 +2,48 @@ package cvo
22
33import (
44 "context"
5+ "time"
56
67 g "github.com/onsi/ginkgo/v2"
78 o "github.com/onsi/gomega"
9+ ctrlruntimeclient "sigs.k8s.io/controller-runtime/pkg/client"
10+ "sigs.k8s.io/controller-runtime/pkg/client/config"
811
912 apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
1013 kerrors "k8s.io/apimachinery/pkg/api/errors"
1114 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
15+ "k8s.io/apimachinery/pkg/util/wait"
16+ "k8s.io/client-go/kubernetes/scheme"
1217 "k8s.io/client-go/rest"
1318
19+ oteginkgo "github.com/openshift-eng/openshift-tests-extension/pkg/ginkgo"
20+ configv1 "github.com/openshift/api/config/v1"
21+ configv1client "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1"
22+
23+ "github.com/openshift/cluster-version-operator/pkg/external"
24+ proposalv1alpha1 "github.com/openshift/cluster-version-operator/pkg/proposal/api/v1alpha1"
1425 "github.com/openshift/cluster-version-operator/test/util"
1526)
1627
28+ func init () {
29+ err := proposalv1alpha1 .AddToScheme (scheme .Scheme )
30+ if err != nil {
31+ panic (err )
32+ }
33+ }
34+
1735var _ = g .Describe (`[Jira:"Cluster Version Operator"] cluster-version-operator` , func () {
1836
1937 var (
20- c * rest.Config
21- err error
22-
23- ctx = context .Background ()
38+ c * rest.Config
39+ configClient * configv1client.ConfigV1Client
2440 apiExtensionsClient apiextensionsclientset.Interface
41+ rtClient ctrlruntimeclient.Client
42+ err error
43+
44+ ctx = context .Background ()
45+ needRecover bool
46+ backup configv1.ClusterVersionSpec
2547 )
2648
2749 g .BeforeEach (func () {
@@ -31,9 +53,32 @@ var _ = g.Describe(`[Jira:"Cluster Version Operator"] cluster-version-operator`,
3153 o .Expect (util .SkipIfHypershift (ctx , c )).To (o .BeNil ())
3254 o .Expect (util .SkipIfMicroshift (ctx , c )).To (o .BeNil ())
3355
56+ configClient , err = configv1client .NewForConfig (c )
57+ o .Expect (err ).To (o .BeNil ())
58+
3459 apiExtensionsClient , err = apiextensionsclientset .NewForConfig (c )
3560 o .Expect (err ).To (o .BeNil ())
3661
62+ rtClient , err = ctrlruntimeclient .New (config .GetConfigOrDie (), ctrlruntimeclient.Options {})
63+ o .Expect (err ).To (o .BeNil ())
64+
65+ cv , err := configClient .ClusterVersions ().Get (ctx , external .DefaultClusterVersionName , metav1.GetOptions {})
66+ o .Expect (err ).NotTo (o .HaveOccurred ())
67+ if du := cv .Spec .DesiredUpdate ; du != nil {
68+ logger .WithValues ("AcceptRisks" , du .AcceptRisks ).Info ("Accept risks before testing" )
69+ o .Expect (du .AcceptRisks ).To (o .BeEmpty (), "found accept risks" )
70+ }
71+ backup = * cv .Spec .DeepCopy ()
72+ })
73+
74+ g .AfterEach (func () {
75+ if needRecover {
76+ cv , err := configClient .ClusterVersions ().Get (ctx , external .DefaultClusterVersionName , metav1.GetOptions {})
77+ o .Expect (err ).NotTo (o .HaveOccurred ())
78+ cv .Spec = backup
79+ _ , err = configClient .ClusterVersions ().Update (ctx , cv , metav1.UpdateOptions {})
80+ o .Expect (err ).NotTo (o .HaveOccurred ())
81+ }
3782 })
3883
3984 g .It ("should install light speed CRDs correctly" , func () {
@@ -46,4 +91,30 @@ var _ = g.Describe(`[Jira:"Cluster Version Operator"] cluster-version-operator`,
4691 }
4792 }
4893 })
94+
95+ g .It ("should create proposals" , g .Label ("Serial" ), oteginkgo .Informing (), func () {
96+ o .Expect (util .SkipIfNetworkRestricted (ctx , c , util .FauxinnatiAPIURL )).To (o .BeNil ())
97+
98+ cv , err := configClient .ClusterVersions ().Get (ctx , external .DefaultClusterVersionName , metav1.GetOptions {})
99+ o .Expect (err ).NotTo (o .HaveOccurred ())
100+
101+ g .By ("Using fauxinnati as the upstream and its simple channel" )
102+ cv .Spec .Upstream = util .FauxinnatiAPIURL
103+ cv .Spec .Channel = "simple"
104+
105+ _ , err = configClient .ClusterVersions ().Update (ctx , cv , metav1.UpdateOptions {})
106+ o .Expect (err ).NotTo (o .HaveOccurred ())
107+ needRecover = true
108+
109+ g .By ("Checking if the proposal are created" )
110+ o .Expect (wait .PollUntilContextTimeout (ctx , 30 * time .Second , 5 * time .Minute , true , func (ctx context.Context ) (done bool , err error ) {
111+ proposals := proposalv1alpha1.ProposalList {}
112+ err = rtClient .List (ctx , & proposals , ctrlruntimeclient .InNamespace (external .DefaultCVONamespace ))
113+ o .Expect (err ).NotTo (o .HaveOccurred ())
114+ if len (proposals .Items ) == 0 {
115+ return false , nil
116+ }
117+ return true , nil
118+ })).NotTo (o .HaveOccurred (), "no proposals found" )
119+ })
49120})
0 commit comments