github.com/IBM-Blockchain/fabric-operator@v1.0.4/pkg/offering/k8s/console/override/deployercm_test.go (about) 1 /* 2 * Copyright contributors to the Hyperledger Fabric Operator project 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at: 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 19 package override_test 20 21 import ( 22 "fmt" 23 24 . "github.com/onsi/ginkgo/v2" 25 . "github.com/onsi/gomega" 26 corev1 "k8s.io/api/core/v1" 27 "sigs.k8s.io/yaml" 28 29 current "github.com/IBM-Blockchain/fabric-operator/api/v1beta1" 30 "github.com/IBM-Blockchain/fabric-operator/pkg/apis/deployer" 31 "github.com/IBM-Blockchain/fabric-operator/pkg/manager/resources" 32 "github.com/IBM-Blockchain/fabric-operator/pkg/offering" 33 "github.com/IBM-Blockchain/fabric-operator/pkg/offering/k8s/console/override" 34 "github.com/IBM-Blockchain/fabric-operator/pkg/util" 35 ) 36 37 var _ = Describe("K8S Console Deployer Config Map Overrides", func() { 38 var ( 39 overrider *override.Override 40 instance *current.IBPConsole 41 cm *corev1.ConfigMap 42 ) 43 44 BeforeEach(func() { 45 var err error 46 overrider = &override.Override{} 47 instance = ¤t.IBPConsole{ 48 Spec: current.IBPConsoleSpec{ 49 RegistryURL: "us.test.io/", 50 ImagePullSecrets: []string{"pullsecret"}, 51 ConnectionString: "connectionString1", 52 Storage: ¤t.ConsoleStorage{ 53 Console: ¤t.StorageSpec{ 54 Class: "sc1", 55 }, 56 }, 57 NetworkInfo: ¤t.NetworkInfo{ 58 Domain: "domain1", 59 }, 60 Versions: ¤t.Versions{ 61 CA: map[string]current.VersionCA{ 62 "1.4.6-1": current.VersionCA{ 63 Default: true, 64 Version: "1.4.6-1", 65 Image: current.CAImages{ 66 CAInitImage: "ca-init-image", 67 CAInitTag: "1.4.6", 68 CAImage: "ca-image", 69 CATag: "1.4.6", 70 }, 71 }, 72 }, 73 Peer: map[string]current.VersionPeer{ 74 "1.4.6-1": current.VersionPeer{ 75 Default: true, 76 Version: "1.4.6-1", 77 Image: current.PeerImages{ 78 PeerInitImage: "peer-init-image", 79 PeerInitTag: "1.4.6", 80 PeerImage: "peer-image", 81 PeerTag: "1.4.6", 82 DindImage: "dind-iamge", 83 DindTag: "1.4.6", 84 GRPCWebImage: "grpcweb-image", 85 GRPCWebTag: "1.4.6", 86 FluentdImage: "fluentd-image", 87 FluentdTag: "1.4.6", 88 CouchDBImage: "couchdb-image", 89 CouchDBTag: "1.4.6", 90 }, 91 }, 92 "2.1.0-1": current.VersionPeer{ 93 Default: true, 94 Version: "2.1.0-1", 95 Image: current.PeerImages{ 96 CCLauncherImage: "cclauncer-image", 97 CCLauncherTag: "1.4.6", 98 BuilderImage: "ibp-ccenv", 99 BuilderTag: "2.1.0-20200505", 100 GoEnvImage: "ibp-goenv", 101 GoEnvTag: "2.1.0-20200505", 102 JavaEnvImage: "ibp-javaenv", 103 JavaEnvTag: "2.1.0-20200505", 104 NodeEnvImage: "ibp-nodeenv", 105 NodeEnvTag: "2.1.0-20200505", 106 }, 107 }, 108 }, 109 Orderer: map[string]current.VersionOrderer{ 110 "1.4.6-1": current.VersionOrderer{ 111 Default: true, 112 Version: "1.4.6-1", 113 Image: current.OrdererImages{ 114 OrdererInitImage: "orderer-init-image", 115 OrdererInitTag: "1.4.6", 116 OrdererImage: "orderer-image", 117 OrdererTag: "1.4.6", 118 GRPCWebImage: "grpcweb-image", 119 GRPCWebTag: "1.4.6", 120 }, 121 }, 122 }, 123 }, 124 CRN: ¤t.CRN{ 125 CName: "cname", 126 CType: "ctype", 127 Location: "location1", 128 Servicename: "Servicename1", 129 Version: "version1", 130 AccountID: "id123", 131 }, 132 Deployer: ¤t.Deployer{ 133 ConnectionString: "connectionstring2", 134 }, 135 }, 136 } 137 cm, err = util.GetConfigMapFromFile("../../../../../testdata/deployercm/deployer-configmap.yaml") 138 Expect(err).NotTo(HaveOccurred()) 139 }) 140 141 Context("create", func() { 142 It("return an error if no image pull secret provided", func() { 143 instance.Spec.ImagePullSecrets = nil 144 err := overrider.DeployerCM(instance, cm, resources.Create, nil) 145 Expect(err).To(HaveOccurred()) 146 Expect(err.Error()).To(Equal("no image pull secret provided")) 147 }) 148 149 It("return an error if no domain provided", func() { 150 instance.Spec.NetworkInfo.Domain = "" 151 err := overrider.DeployerCM(instance, cm, resources.Create, nil) 152 Expect(err).To(HaveOccurred()) 153 Expect(err.Error()).To(Equal("domain not provided")) 154 }) 155 156 It("overrides values based on spec", func() { 157 err := overrider.DeployerCM(instance, cm, resources.Create, nil) 158 Expect(err).NotTo(HaveOccurred()) 159 160 config := &deployer.Config{} 161 162 err = yaml.Unmarshal([]byte(cm.Data["settings.yaml"]), config) 163 Expect(err).NotTo(HaveOccurred()) 164 165 By("setting cluster type", func() { 166 Expect(config.ClusterType).To(Equal(offering.K8S.String())) 167 }) 168 169 By("setting service type", func() { 170 Expect(config.ServiceConfig.Type).To(Equal(corev1.ServiceTypeClusterIP)) 171 }) 172 173 By("setting domain", func() { 174 Expect(config.Domain).To(Equal(instance.Spec.NetworkInfo.Domain)) 175 }) 176 177 By("setting image pull secret", func() { 178 Expect(config.ImagePullSecrets).To(Equal(instance.Spec.ImagePullSecrets)) 179 }) 180 181 By("setting connection string", func() { 182 Expect(config.Database.ConnectionURL).To(Equal(instance.Spec.Deployer.ConnectionString)) 183 }) 184 185 By("setting versions", func() { 186 expectedVersions := ¤t.Versions{ 187 CA: map[string]current.VersionCA{ 188 "1.4.6-1": current.VersionCA{ 189 Default: true, 190 Version: "1.4.6-1", 191 Image: current.CAImages{ 192 CAInitImage: fmt.Sprintf("%sca-init-image", instance.Spec.RegistryURL), 193 CAInitTag: "1.4.6", 194 CAImage: fmt.Sprintf("%sca-image", instance.Spec.RegistryURL), 195 CATag: "1.4.6", 196 }, 197 }, 198 }, 199 Peer: map[string]current.VersionPeer{ 200 "1.4.6-1": current.VersionPeer{ 201 Default: true, 202 Version: "1.4.6-1", 203 Image: current.PeerImages{ 204 PeerInitImage: fmt.Sprintf("%speer-init-image", instance.Spec.RegistryURL), 205 PeerInitTag: "1.4.6", 206 PeerImage: fmt.Sprintf("%speer-image", instance.Spec.RegistryURL), 207 PeerTag: "1.4.6", 208 DindImage: fmt.Sprintf("%sdind-iamge", instance.Spec.RegistryURL), 209 DindTag: "1.4.6", 210 GRPCWebImage: fmt.Sprintf("%sgrpcweb-image", instance.Spec.RegistryURL), 211 GRPCWebTag: "1.4.6", 212 FluentdImage: fmt.Sprintf("%sfluentd-image", instance.Spec.RegistryURL), 213 FluentdTag: "1.4.6", 214 CouchDBImage: fmt.Sprintf("%scouchdb-image", instance.Spec.RegistryURL), 215 CouchDBTag: "1.4.6", 216 }, 217 }, 218 "2.1.0-1": current.VersionPeer{ 219 Default: true, 220 Version: "2.1.0-1", 221 Image: current.PeerImages{ 222 CCLauncherImage: fmt.Sprintf("%scclauncer-image", instance.Spec.RegistryURL), 223 CCLauncherTag: "1.4.6", 224 BuilderImage: fmt.Sprintf("%sibp-ccenv", instance.Spec.RegistryURL), 225 BuilderTag: "2.1.0-20200505", 226 GoEnvImage: fmt.Sprintf("%sibp-goenv", instance.Spec.RegistryURL), 227 GoEnvTag: "2.1.0-20200505", 228 JavaEnvImage: fmt.Sprintf("%sibp-javaenv", instance.Spec.RegistryURL), 229 JavaEnvTag: "2.1.0-20200505", 230 NodeEnvImage: fmt.Sprintf("%sibp-nodeenv", instance.Spec.RegistryURL), 231 NodeEnvTag: "2.1.0-20200505", 232 }, 233 }, 234 }, 235 Orderer: map[string]current.VersionOrderer{ 236 "1.4.6-1": current.VersionOrderer{ 237 Default: true, 238 Version: "1.4.6-1", 239 Image: current.OrdererImages{ 240 OrdererInitImage: fmt.Sprintf("%sorderer-init-image", instance.Spec.RegistryURL), 241 OrdererInitTag: "1.4.6", 242 OrdererImage: fmt.Sprintf("%sorderer-image", instance.Spec.RegistryURL), 243 OrdererTag: "1.4.6", 244 GRPCWebImage: fmt.Sprintf("%sgrpcweb-image", instance.Spec.RegistryURL), 245 GRPCWebTag: "1.4.6", 246 }, 247 }, 248 }, 249 } 250 251 typeConvertedVersions := ¤t.Versions{} 252 util.ConvertSpec(config.Versions, typeConvertedVersions) 253 Expect(typeConvertedVersions).To(Equal(expectedVersions)) 254 }) 255 256 By("setting storage class name", func() { 257 Expect(config.Defaults.Storage.CA.CA.Class).To(Equal(instance.Spec.Storage.Console.Class)) 258 Expect(config.Defaults.Storage.Peer.Peer.Class).To(Equal(instance.Spec.Storage.Console.Class)) 259 Expect(config.Defaults.Storage.Peer.StateDB.Class).To(Equal(instance.Spec.Storage.Console.Class)) 260 Expect(config.Defaults.Storage.Orderer.Orderer.Class).To(Equal(instance.Spec.Storage.Console.Class)) 261 }) 262 263 By("setting CRN", func() { 264 crn := ¤t.CRN{ 265 CName: instance.Spec.CRN.CName, 266 CType: instance.Spec.CRN.CType, 267 Location: instance.Spec.CRN.Location, 268 Servicename: instance.Spec.CRN.Servicename, 269 Version: instance.Spec.CRN.Version, 270 AccountID: instance.Spec.CRN.AccountID, 271 } 272 Expect(config.CRN).To(Equal(crn)) 273 }) 274 }) 275 }) 276 277 Context("update", func() { 278 It("return an error if no image pull secret provided", func() { 279 instance.Spec.ImagePullSecrets = nil 280 err := overrider.DeployerCM(instance, cm, resources.Update, nil) 281 Expect(err).To(HaveOccurred()) 282 Expect(err.Error()).To(Equal("no image pull secret provided")) 283 }) 284 }) 285 })