github.com/IBM-Blockchain/fabric-operator@v1.0.4/pkg/offering/common/reconcilechecks/fabricversion_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 reconcilechecks_test 20 21 import ( 22 "errors" 23 24 . "github.com/onsi/ginkgo/v2" 25 . "github.com/onsi/gomega" 26 27 "github.com/IBM-Blockchain/fabric-operator/pkg/offering/common/reconcilechecks" 28 "github.com/IBM-Blockchain/fabric-operator/pkg/offering/common/reconcilechecks/mocks" 29 ) 30 31 var _ = Describe("fabric version", func() { 32 var ( 33 instance *mocks.Instance 34 update *mocks.Update 35 image *mocks.Image 36 fv *mocks.Version 37 ) 38 39 BeforeEach(func() { 40 instance = &mocks.Instance{} 41 update = &mocks.Update{} 42 image = &mocks.Image{} 43 fv = &mocks.Version{} 44 }) 45 46 Context("create CR", func() { 47 It("returns an error if fabric version is not set in spec", func() { 48 _, err := reconcilechecks.FabricVersion(instance, update, image, fv) 49 Expect(err).To(MatchError(ContainSubstring("fabric version is not set"))) 50 }) 51 52 Context("images section blank", func() { 53 It("normalizes fabric version and requests a requeue", func() { 54 instance.GetFabricVersionReturns("1.4.9") 55 requeue, err := reconcilechecks.FabricVersion(instance, update, image, fv) 56 Expect(err).NotTo(HaveOccurred()) 57 Expect(requeue).To(Equal(true)) 58 Expect(fv.NormalizeCallCount()).To(Equal(1)) 59 Expect(instance.SetFabricVersionCallCount()).To(Equal(1)) 60 }) 61 62 It("returns an error if fabric version not supported", func() { 63 instance.GetFabricVersionReturns("0.0.1") 64 fv.ValidateReturns(errors.New("not supported")) 65 _, err := reconcilechecks.FabricVersion(instance, update, image, fv) 66 Expect(err).To(MatchError(ContainSubstring("not supported"))) 67 }) 68 69 When("version is passed without hyphen", func() { 70 BeforeEach(func() { 71 instance.GetFabricVersionReturns("1.4.9") 72 }) 73 74 It("finds default version for release and updates images section", func() { 75 requeue, err := reconcilechecks.FabricVersion(instance, update, image, fv) 76 Expect(err).NotTo(HaveOccurred()) 77 Expect(requeue).To(Equal(true)) 78 Expect(image.SetDefaultsCallCount()).To(Equal(1)) 79 }) 80 }) 81 82 When("version is passed with hyphen", func() { 83 BeforeEach(func() { 84 instance.GetFabricVersionReturns("1.4.9-0") 85 }) 86 87 It("looks images and updates images section", func() { 88 requeue, err := reconcilechecks.FabricVersion(instance, update, image, fv) 89 Expect(err).NotTo(HaveOccurred()) 90 Expect(requeue).To(Equal(true)) 91 Expect(image.SetDefaultsCallCount()).To(Equal(1)) 92 }) 93 }) 94 }) 95 96 Context("images section passed", func() { 97 BeforeEach(func() { 98 instance.ImagesSetReturns(true) 99 }) 100 101 When("version is not passed", func() { 102 It("returns an error", func() { 103 _, err := reconcilechecks.FabricVersion(instance, update, image, fv) 104 Expect(err).To(MatchError(ContainSubstring("fabric version is not set"))) 105 }) 106 }) 107 108 When("version is passed", func() { 109 BeforeEach(func() { 110 instance.GetFabricVersionReturns("2.0.0-8") 111 }) 112 113 It("persists current spec configuration", func() { 114 requeue, err := reconcilechecks.FabricVersion(instance, update, image, fv) 115 Expect(err).NotTo(HaveOccurred()) 116 Expect(requeue).To(Equal(false)) 117 Expect(instance.SetFabricVersionCallCount()).To(Equal(0)) 118 Expect(fv.NormalizeCallCount()).To(Equal(0)) 119 Expect(fv.ValidateCallCount()).To(Equal(0)) 120 Expect(image.SetDefaultsCallCount()).To(Equal(0)) 121 }) 122 }) 123 }) 124 }) 125 126 Context("update CR", func() { 127 BeforeEach(func() { 128 instance.GetFabricVersionReturns("2.0.1-0") 129 instance.ImagesSetReturns(true) 130 }) 131 132 When("images updated", func() { 133 BeforeEach(func() { 134 update.ImagesUpdatedReturns(true) 135 }) 136 137 Context("and version updated", func() { 138 BeforeEach(func() { 139 update.FabricVersionUpdatedReturns(true) 140 }) 141 142 It("persists current spec configuration", func() { 143 requeue, err := reconcilechecks.FabricVersion(instance, update, image, fv) 144 Expect(err).NotTo(HaveOccurred()) 145 Expect(requeue).To(Equal(false)) 146 Expect(fv.NormalizeCallCount()).To(Equal(0)) 147 Expect(instance.SetFabricVersionCallCount()).To(Equal(0)) 148 Expect(fv.ValidateCallCount()).To(Equal(0)) 149 Expect(image.SetDefaultsCallCount()).To(Equal(0)) 150 }) 151 }) 152 153 Context("and version not updated", func() { 154 It("persists current spec configuration", func() { 155 requeue, err := reconcilechecks.FabricVersion(instance, update, image, fv) 156 Expect(err).NotTo(HaveOccurred()) 157 Expect(requeue).To(Equal(false)) 158 Expect(fv.NormalizeCallCount()).To(Equal(0)) 159 Expect(instance.SetFabricVersionCallCount()).To(Equal(0)) 160 Expect(fv.ValidateCallCount()).To(Equal(0)) 161 Expect(image.SetDefaultsCallCount()).To(Equal(0)) 162 }) 163 }) 164 }) 165 166 When("images not updated", func() { 167 Context("and version updated during operator migration", func() { 168 BeforeEach(func() { 169 instance.GetFabricVersionReturns("unsupported") 170 update.FabricVersionUpdatedReturns(true) 171 }) 172 173 It("persists current spec configuration", func() { 174 requeue, err := reconcilechecks.FabricVersion(instance, update, image, fv) 175 Expect(err).NotTo(HaveOccurred()) 176 Expect(requeue).To(Equal(false)) 177 Expect(image.UpdateRequiredCallCount()).To(Equal(0)) 178 Expect(fv.NormalizeCallCount()).To(Equal(0)) 179 Expect(instance.SetFabricVersionCallCount()).To(Equal(0)) 180 Expect(fv.ValidateCallCount()).To(Equal(0)) 181 Expect(image.SetDefaultsCallCount()).To(Equal(0)) 182 }) 183 }) 184 185 Context("and version updated not due to operator migration", func() { 186 BeforeEach(func() { 187 image.UpdateRequiredReturns(true) 188 }) 189 190 It("looks images and updates images section", func() { 191 requeue, err := reconcilechecks.FabricVersion(instance, update, image, fv) 192 Expect(err).NotTo(HaveOccurred()) 193 Expect(requeue).To(Equal(true)) 194 Expect(fv.ValidateCallCount()).To(Equal(1)) 195 Expect(image.SetDefaultsCallCount()).To(Equal(1)) 196 }) 197 }) 198 }) 199 }) 200 })