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  })