@@ -42,23 +42,136 @@ func Test_BundleRenderer_ValidatesBundle(t *testing.T) {
42
42
require .Contains (t , err .Error (), "this bundle is invalid" )
43
43
}
44
44
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
+ )
49
49
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 ) {
53
60
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
57
61
},
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 : "exactly 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 .InstallModeTypeMultiNamespace )),
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 , v1alpha1 .InstallModeTypeMultiNamespace )),
151
+ expectedErrMsgFragment : "at least one target namespace must be specified" ,
58
152
},
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
+ }
60
163
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
+ }
62
175
}
63
176
64
177
func Test_BundleRenderer_ValidatesRenderOptions (t * testing.T ) {
@@ -76,7 +189,7 @@ func Test_BundleRenderer_ValidatesRenderOptions(t *testing.T) {
76
189
opts : []render.Option {
77
190
render .WithTargetNamespaces (),
78
191
},
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" ),
80
193
}, {
81
194
name : "rejects nil unique name generator" ,
82
195
installNamespace : "install-namespace" ,
0 commit comments