@@ -42,23 +42,136 @@ func Test_BundleRenderer_ValidatesBundle(t *testing.T) {
4242 require .Contains (t , err .Error (), "this bundle is invalid" )
4343}
4444
45- func Test_BundleRenderer_CreatesCorrectDefaultOptions (t * testing.T ) {
46- expectedInstallNamespace := "install-namespace"
47- expectedTargetNamespaces := [] string { "" }
48- expectedUniqueNameGenerator := render . DefaultUniqueNameGenerator
45+ func Test_BundleRenderer_CreatesCorrectRenderOptions_WithDefaults (t * testing.T ) {
46+ const (
47+ expectedInstallNamespace = "install-namespace"
48+ )
4949
50- renderer := render.BundleRenderer {
51- ResourceGenerators : []render.ResourceGenerator {
52- func (rv1 * bundle.RegistryV1 , opts render.Options ) ([]client.Object , error ) {
50+ for _ , tc := range []struct {
51+ name string
52+ csv v1alpha1.ClusterServiceVersion
53+ validate func (t * testing.T , opts render.Options )
54+ expectedErrMsgFragment string
55+ }{
56+ {
57+ name : "sets install-namespace correctly" ,
58+ csv : MakeCSV (WithInstallModeSupportFor (v1alpha1 .InstallModeTypeAllNamespaces )),
59+ validate : func (t * testing.T , opts render.Options ) {
5360 require .Equal (t , expectedInstallNamespace , opts .InstallNamespace )
54- require .Equal (t , expectedTargetNamespaces , opts .TargetNamespaces )
55- require .Equal (t , reflect .ValueOf (expectedUniqueNameGenerator ).Pointer (), reflect .ValueOf (render .DefaultUniqueNameGenerator ).Pointer (), "options has unexpected default unique name generator" )
56- return nil , nil
5761 },
62+ }, {
63+ name : "uses DefaultUniqueNameGenerator by default" ,
64+ csv : MakeCSV (WithInstallModeSupportFor (v1alpha1 .InstallModeTypeAllNamespaces )),
65+ validate : func (t * testing.T , opts render.Options ) {
66+ require .Equal (t , reflect .ValueOf (render .DefaultUniqueNameGenerator ).Pointer (), reflect .ValueOf (opts .UniqueNameGenerator ).Pointer (), "options has unexpected default unique name generator" )
67+ },
68+ }, {
69+ name : "sets target namespaces to [corev1.NamespaceAll] by default if bundle supports install modes [AllNamespaces]" ,
70+ csv : MakeCSV (WithInstallModeSupportFor (v1alpha1 .InstallModeTypeAllNamespaces )),
71+ validate : func (t * testing.T , opts render.Options ) {
72+ require .Equal (t , []string {corev1 .NamespaceAll }, opts .TargetNamespaces )
73+ },
74+ }, {
75+ name : "sets target namespaces to [corev1.NamespaceAll] by default if bundle supports install modes [AllNamespaces, SingleNamespace]" ,
76+ csv : MakeCSV (WithInstallModeSupportFor (v1alpha1 .InstallModeTypeAllNamespaces , v1alpha1 .InstallModeTypeSingleNamespace )),
77+ validate : func (t * testing.T , opts render.Options ) {
78+ require .Equal (t , []string {corev1 .NamespaceAll }, opts .TargetNamespaces )
79+ },
80+ }, {
81+ name : "sets target namespaces to [corev1.NamespaceAll] by default if bundle supports install modes [AllNamespaces, OwnNamespace]" ,
82+ csv : MakeCSV (WithInstallModeSupportFor (v1alpha1 .InstallModeTypeAllNamespaces , v1alpha1 .InstallModeTypeOwnNamespace )),
83+ validate : func (t * testing.T , opts render.Options ) {
84+ require .Equal (t , []string {corev1 .NamespaceAll }, opts .TargetNamespaces )
85+ },
86+ }, {
87+ name : "sets target namespaces to [corev1.NamespaceAll] by default if bundle supports install modes [AllNamespaces, MultiNamespace]" ,
88+ csv : MakeCSV (WithInstallModeSupportFor (v1alpha1 .InstallModeTypeAllNamespaces , v1alpha1 .InstallModeTypeMultiNamespace )),
89+ validate : func (t * testing.T , opts render.Options ) {
90+ require .Equal (t , []string {corev1 .NamespaceAll }, opts .TargetNamespaces )
91+ },
92+ }, {
93+ name : "sets target namespaces to [corev1.NamespaceAll] by default if bundle supports install modes [AllNamespaces, OwnNamespace, SingleNamespace]" ,
94+ csv : MakeCSV (WithInstallModeSupportFor (v1alpha1 .InstallModeTypeAllNamespaces , v1alpha1 .InstallModeTypeOwnNamespace , v1alpha1 .InstallModeTypeSingleNamespace )),
95+ validate : func (t * testing.T , opts render.Options ) {
96+ require .Equal (t , []string {corev1 .NamespaceAll }, opts .TargetNamespaces )
97+ },
98+ }, {
99+ name : "sets target namespaces to [corev1.NamespaceAll] by default if bundle supports install modes [AllNamespaces, OwnNamespace, MultiNamespace]" ,
100+ csv : MakeCSV (WithInstallModeSupportFor (v1alpha1 .InstallModeTypeAllNamespaces , v1alpha1 .InstallModeTypeOwnNamespace , v1alpha1 .InstallModeTypeMultiNamespace )),
101+ validate : func (t * testing.T , opts render.Options ) {
102+ require .Equal (t , []string {corev1 .NamespaceAll }, opts .TargetNamespaces )
103+ },
104+ }, {
105+ name : "sets target namespaces to [corev1.NamespaceAll] by default if bundle supports install modes [AllNamespaces, SingleNamespace, MultiNamespace]" ,
106+ csv : MakeCSV (WithInstallModeSupportFor (v1alpha1 .InstallModeTypeAllNamespaces , v1alpha1 .InstallModeTypeSingleNamespace , v1alpha1 .InstallModeTypeMultiNamespace )),
107+ validate : func (t * testing.T , opts render.Options ) {
108+ require .Equal (t , []string {corev1 .NamespaceAll }, opts .TargetNamespaces )
109+ },
110+ }, {
111+ name : "sets target namespaces to [corev1.NamespaceAll] by default if bundle supports install modes [AllNamespaces, SingleNamespace, OwnNamespace, MultiNamespace]" ,
112+ csv : MakeCSV (WithInstallModeSupportFor (v1alpha1 .InstallModeTypeAllNamespaces , v1alpha1 .InstallModeTypeSingleNamespace , v1alpha1 .InstallModeTypeOwnNamespace , v1alpha1 .InstallModeTypeMultiNamespace )),
113+ validate : func (t * testing.T , opts render.Options ) {
114+ require .Equal (t , []string {corev1 .NamespaceAll }, opts .TargetNamespaces )
115+ },
116+ }, {
117+ name : "sets target namespaces to [install-namespace] by default if bundle supports install modes [OwnNamespace]" ,
118+ csv : MakeCSV (WithInstallModeSupportFor (v1alpha1 .InstallModeTypeOwnNamespace )),
119+ validate : func (t * testing.T , opts render.Options ) {
120+ require .Equal (t , []string {expectedInstallNamespace }, opts .TargetNamespaces )
121+ },
122+ }, {
123+ name : "sets target namespaces to [install-namespace] by default if bundle supports install modes [OwnNamespace, SingleNamespace]" ,
124+ csv : MakeCSV (WithInstallModeSupportFor (v1alpha1 .InstallModeTypeOwnNamespace , v1alpha1 .InstallModeTypeSingleNamespace )),
125+ validate : func (t * testing.T , opts render.Options ) {
126+ require .Equal (t , []string {expectedInstallNamespace }, opts .TargetNamespaces )
127+ },
128+ }, {
129+ name : "sets target namespaces to [install-namespace] by default if bundle supports install modes [OwnNamespace, MultiNamespace]" ,
130+ csv : MakeCSV (WithInstallModeSupportFor (v1alpha1 .InstallModeTypeOwnNamespace , v1alpha1 .InstallModeTypeMultiNamespace )),
131+ validate : func (t * testing.T , opts render.Options ) {
132+ require .Equal (t , []string {expectedInstallNamespace }, opts .TargetNamespaces )
133+ },
134+ }, {
135+ name : "sets target namespaces to [install-namespace] by default if bundle supports install modes [OwnNamespace, SingleNamespace, MultiNamespace]" ,
136+ csv : MakeCSV (WithInstallModeSupportFor (v1alpha1 .InstallModeTypeOwnNamespace , v1alpha1 .InstallModeTypeSingleNamespace , v1alpha1 .InstallModeTypeMultiNamespace )),
137+ validate : func (t * testing.T , opts render.Options ) {
138+ require .Equal (t , []string {expectedInstallNamespace }, opts .TargetNamespaces )
139+ },
140+ }, {
141+ name : "returns error if target namespaces is not set bundle supports install modes [SingleNamespace]" ,
142+ csv : MakeCSV (WithInstallModeSupportFor (v1alpha1 .InstallModeTypeSingleNamespace )),
143+ expectedErrMsgFragment : "at least one target namespace must be specified" ,
144+ }, {
145+ name : "returns error if target namespaces is not set bundle supports install modes [MultiNamespace]" ,
146+ csv : MakeCSV (WithInstallModeSupportFor (v1alpha1 .InstallModeTypeSingleNamespace )),
147+ expectedErrMsgFragment : "at least one target namespace must be specified" ,
148+ }, {
149+ name : "returns error if target namespaces is not set bundle supports install modes [SingleNamespace, MultiNamespace]" ,
150+ csv : MakeCSV (WithInstallModeSupportFor (v1alpha1 .InstallModeTypeSingleNamespace )),
151+ expectedErrMsgFragment : "at least one target namespace must be specified" ,
58152 },
59- }
153+ } {
154+ t .Run (tc .name , func (t * testing.T ) {
155+ renderer := render.BundleRenderer {
156+ ResourceGenerators : []render.ResourceGenerator {
157+ func (rv1 * bundle.RegistryV1 , opts render.Options ) ([]client.Object , error ) {
158+ tc .validate (t , opts )
159+ return nil , nil
160+ },
161+ },
162+ }
60163
61- _ , _ = renderer .Render (bundle.RegistryV1 {}, expectedInstallNamespace )
164+ _ , err := renderer .Render (bundle.RegistryV1 {
165+ CSV : tc .csv ,
166+ }, expectedInstallNamespace )
167+ if tc .expectedErrMsgFragment == "" {
168+ require .NoError (t , err )
169+ } else {
170+ require .Error (t , err )
171+ require .Contains (t , err .Error (), tc .expectedErrMsgFragment )
172+ }
173+ })
174+ }
62175}
63176
64177func Test_BundleRenderer_ValidatesRenderOptions (t * testing.T ) {
@@ -76,7 +189,7 @@ func Test_BundleRenderer_ValidatesRenderOptions(t *testing.T) {
76189 opts : []render.Option {
77190 render .WithTargetNamespaces (),
78191 },
79- err : errors .New ("invalid option(s): at least one target namespace must be specified" ),
192+ err : errors .New ("invalid option(s): invalid target namespaces []: at least one target namespace must be specified" ),
80193 }, {
81194 name : "rejects nil unique name generator" ,
82195 installNamespace : "install-namespace" ,
0 commit comments