github.com/IBM-Blockchain/fabric-operator@v1.0.4/pkg/offering/common/reconcilechecks/images/images_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 images_test
    20  
    21  import (
    22  	. "github.com/onsi/ginkgo/v2"
    23  	. "github.com/onsi/gomega"
    24  
    25  	current "github.com/IBM-Blockchain/fabric-operator/api/v1beta1"
    26  	config "github.com/IBM-Blockchain/fabric-operator/operatorconfig"
    27  	"github.com/IBM-Blockchain/fabric-operator/pkg/apis/deployer"
    28  	"github.com/IBM-Blockchain/fabric-operator/pkg/offering/common/reconcilechecks/images"
    29  	"github.com/IBM-Blockchain/fabric-operator/pkg/offering/common/reconcilechecks/images/mocks"
    30  )
    31  
    32  var _ = Describe("default images", func() {
    33  	var (
    34  		operatorCfg *config.Operator
    35  	)
    36  
    37  	BeforeEach(func() {
    38  		operatorCfg = &config.Operator{
    39  			Versions: &deployer.Versions{
    40  				CA: map[string]deployer.VersionCA{
    41  					"1.4.9-0": {
    42  						Default: false,
    43  						Version: "1.4.9-0",
    44  						Image: deployer.CAImages{
    45  							CAImage:       "caimage",
    46  							CATag:         "catag",
    47  							CAInitImage:   "cainitimage",
    48  							CAInitTag:     "cainittag",
    49  							EnrollerImage: "enrolleriamge",
    50  							EnrollerTag:   "enrollertag",
    51  						},
    52  					},
    53  					"1.4.9-1": {
    54  						Default: true,
    55  						Version: "1.4.9-1",
    56  						Image: deployer.CAImages{
    57  							CAImage:       "caimage",
    58  							CATag:         "newcatag",
    59  							CAInitImage:   "cainitimage",
    60  							CAInitTag:     "cainittag",
    61  							EnrollerImage: "enrolleriamge",
    62  							EnrollerTag:   "enrollertag",
    63  						},
    64  					},
    65  				},
    66  				Peer: map[string]deployer.VersionPeer{
    67  					"1.4.9-0": {
    68  						Default: true,
    69  						Version: "1.4.9-0",
    70  						Image: deployer.PeerImages{
    71  							PeerInitImage: "ibp-init",
    72  							PeerInitTag:   "2.5.1-2511004-amd64",
    73  							PeerImage:     "ibp-peer",
    74  							PeerTag:       "1.4.9-2511004-amd64",
    75  							DindImage:     "ibp-dind",
    76  							DindTag:       "noimages-amd64",
    77  							CouchDBImage:  "ibp-couchdb",
    78  							CouchDBTag:    "2.3.1-2511004-amd64",
    79  							GRPCWebImage:  "ibp-grpcweb",
    80  							GRPCWebTag:    "2.5.1-2511004-amd64",
    81  							FluentdImage:  "ibp-fluentd",
    82  							FluentdTag:    "2.5.1-2511004-amd64",
    83  							EnrollerImage: "ibp-enroller",
    84  							EnrollerTag:   "1.0.0-amd64",
    85  						},
    86  					},
    87  					"2.2.1-0": {
    88  						Default: false,
    89  						Version: "2.2.1-0",
    90  						Image: deployer.PeerImages{
    91  							PeerInitImage: "ibp-init",
    92  							PeerInitTag:   "2.5.1-2511004-amd64",
    93  							PeerImage:     "ibp-peer",
    94  							PeerTag:       "2.2.1-2511004-amd64",
    95  							DindImage:     "ibp-dind",
    96  							DindTag:       "noimages-amd64",
    97  							CouchDBImage:  "ibp-couchdb",
    98  							CouchDBTag:    "2.3.1-2511004-amd64",
    99  							GRPCWebImage:  "ibp-grpcweb",
   100  							GRPCWebTag:    "2.5.1-2511004-amd64",
   101  							FluentdImage:  "ibp-fluentd",
   102  							FluentdTag:    "2.5.1-2511004-amd64",
   103  							EnrollerImage: "ibp-enroller",
   104  							EnrollerTag:   "1.0.0-amd64",
   105  						},
   106  					},
   107  					"2.2.1-1": {
   108  						Default: true,
   109  						Version: "2.2.1-1",
   110  						Image: deployer.PeerImages{
   111  							PeerInitImage: "ibp-init",
   112  							PeerInitTag:   "2.5.1-2511004-amd64",
   113  							PeerImage:     "ibp-peer",
   114  							PeerTag:       "2.2.1-2511204-amd64",
   115  							DindImage:     "ibp-dind",
   116  							DindTag:       "noimages-amd64",
   117  							CouchDBImage:  "ibp-couchdb",
   118  							CouchDBTag:    "2.3.1-2511004-amd64",
   119  							GRPCWebImage:  "ibp-grpcweb",
   120  							GRPCWebTag:    "2.5.1-2511004-amd64",
   121  							FluentdImage:  "ibp-fluentd",
   122  							FluentdTag:    "2.5.1-2511004-amd64",
   123  							EnrollerImage: "ibp-enroller",
   124  							EnrollerTag:   "1.0.0-amd64",
   125  						},
   126  					},
   127  				},
   128  				Orderer: map[string]deployer.VersionOrderer{
   129  					"1.4-9-0": {
   130  						Default: true,
   131  						Version: "1.4.9-0",
   132  						Image: deployer.OrdererImages{
   133  							OrdererInitImage: "ibp-init",
   134  							OrdererInitTag:   "2.5.1-2511004-amd64",
   135  							OrdererImage:     "ibp-orderer",
   136  							OrdererTag:       "1.4.9-2511004-amd64",
   137  							GRPCWebImage:     "ibp-grpcweb",
   138  							GRPCWebTag:       "2.5.1-2511004-amd64",
   139  							EnrollerImage:    "ibp-enroller",
   140  							EnrollerTag:      "1.0.0-amd64",
   141  						},
   142  					},
   143  					"2.2.1-0": {
   144  						Default: false,
   145  						Version: "2.2.1-0",
   146  						Image: deployer.OrdererImages{
   147  							OrdererInitImage: "ibp-init",
   148  							OrdererInitTag:   "2.5.1-2511004-amd64",
   149  							OrdererImage:     "ibp-orderer",
   150  							OrdererTag:       "2.2.1-2511004-amd64",
   151  							GRPCWebImage:     "ibp-grpcweb",
   152  							GRPCWebTag:       "2.5.1-2511004-amd64",
   153  							EnrollerImage:    "ibp-enroller",
   154  							EnrollerTag:      "1.0.0-amd64",
   155  						},
   156  					},
   157  					"2.2.1-1": {
   158  						Default: true,
   159  						Version: "2.2.1-0",
   160  						Image: deployer.OrdererImages{
   161  							OrdererInitImage: "ibp-init",
   162  							OrdererInitTag:   "2.5.1-2511004-amd64",
   163  							OrdererImage:     "ibp-orderer",
   164  							OrdererTag:       "2.2.1-2511204-amd64",
   165  							GRPCWebImage:     "ibp-grpcweb",
   166  							GRPCWebTag:       "2.5.1-2511004-amd64",
   167  							EnrollerImage:    "ibp-enroller",
   168  							EnrollerTag:      "1.0.0-amd64",
   169  						},
   170  					},
   171  				},
   172  			},
   173  		}
   174  	})
   175  
   176  	Context("images", func() {
   177  		var image *images.Image
   178  
   179  		BeforeEach(func() {
   180  			image = &images.Image{
   181  				Versions:    operatorCfg.Versions,
   182  				DefaultArch: "amd64",
   183  				// DefaultRegistryURL: "",
   184  			}
   185  		})
   186  
   187  		It("returns an error if fabric version is not in correct format", func() {
   188  			instance := &mocks.Instance{}
   189  			instance.GetFabricVersionReturns("1.4.9")
   190  			err := image.SetDefaults(instance)
   191  			Expect(err).To(MatchError("fabric version format '1.4.9' is not valid, must pass hyphenated version (e.g. 2.2.1-1)"))
   192  		})
   193  
   194  		Context("update required", func() {
   195  			var update *mocks.Update
   196  
   197  			BeforeEach(func() {
   198  				update = &mocks.Update{}
   199  			})
   200  
   201  			It("returns false if images updated", func() {
   202  				update.ImagesUpdatedReturns(true)
   203  				required := image.UpdateRequired(update)
   204  				Expect(required).To(Equal(false))
   205  			})
   206  
   207  			It("returns false if neither images nor fabric version updated", func() {
   208  				required := image.UpdateRequired(update)
   209  				Expect(required).To(Equal(false))
   210  			})
   211  
   212  			It("returns true if fabric version updated and images not updated", func() {
   213  				update.FabricVersionUpdatedReturns(true)
   214  				required := image.UpdateRequired(update)
   215  				Expect(required).To(Equal(true))
   216  			})
   217  		})
   218  
   219  		Context("ca", func() {
   220  			var (
   221  				instance *current.IBPCA
   222  			)
   223  
   224  			BeforeEach(func() {
   225  				instance = &current.IBPCA{
   226  					Spec: current.IBPCASpec{
   227  						RegistryURL:   "ghcr.io/ibm-blockchain/",
   228  						FabricVersion: "1.4.9-1",
   229  					},
   230  				}
   231  			})
   232  
   233  			Context("registry url", func() {
   234  				When("is not set", func() {
   235  					BeforeEach(func() {
   236  						instance.Spec.RegistryURL = ""
   237  					})
   238  
   239  					It("sets default images based on operator's config with registry of blank", func() {
   240  						err := image.SetDefaults(instance)
   241  						Expect(err).NotTo(HaveOccurred())
   242  						caImages := deployer.CAImages{
   243  							CAImage:       "caimage",
   244  							CATag:         "newcatag",
   245  							CAInitImage:   "cainitimage",
   246  							CAInitTag:     "cainittag",
   247  							EnrollerImage: "enrolleriamge",
   248  							EnrollerTag:   "enrollertag",
   249  						}
   250  						Expect(instance.Spec.Images.CAImage).To(Equal(caImages.CAImage))
   251  						Expect(instance.Spec.Images.CATag).To(Equal(caImages.CATag))
   252  						Expect(instance.Spec.Images.CAInitImage).To(Equal(caImages.CAInitImage))
   253  						Expect(instance.Spec.Images.CAInitTag).To(Equal(caImages.CAInitTag))
   254  						Expect(instance.Spec.Images.EnrollerImage).To(Equal(caImages.EnrollerImage))
   255  						Expect(instance.Spec.Images.EnrollerTag).To(Equal(caImages.EnrollerTag))
   256  					})
   257  				})
   258  
   259  				When("is set", func() {
   260  					It("sets default images based on operator's config", func() {
   261  						err := image.SetDefaults(instance)
   262  						Expect(err).NotTo(HaveOccurred())
   263  						caImages := deployer.CAImages{
   264  							CAImage:       "ghcr.io/ibm-blockchain/caimage",
   265  							CATag:         "newcatag",
   266  							CAInitImage:   "ghcr.io/ibm-blockchain/cainitimage",
   267  							CAInitTag:     "cainittag",
   268  							EnrollerImage: "ghcr.io/ibm-blockchain/enrolleriamge",
   269  							EnrollerTag:   "enrollertag",
   270  						}
   271  
   272  						Expect(instance.Spec.Images.CAImage).To(Equal(caImages.CAImage))
   273  						Expect(instance.Spec.Images.CATag).To(Equal(caImages.CATag))
   274  						Expect(instance.Spec.Images.CAInitImage).To(Equal(caImages.CAInitImage))
   275  						Expect(instance.Spec.Images.CAInitTag).To(Equal(caImages.CAInitTag))
   276  						Expect(instance.Spec.Images.EnrollerImage).To(Equal(caImages.EnrollerImage))
   277  						Expect(instance.Spec.Images.EnrollerTag).To(Equal(caImages.EnrollerTag))
   278  					})
   279  				})
   280  			})
   281  
   282  			When("using normalized fabric version", func() {
   283  				BeforeEach(func() {
   284  					instance.Spec.FabricVersion = "1.4.9-0"
   285  				})
   286  
   287  				It("returns default images for the base fabric version", func() {
   288  					err := image.SetDefaults(instance)
   289  					Expect(err).NotTo(HaveOccurred())
   290  
   291  					caImages := deployer.CAImages{
   292  						CAImage:       "ghcr.io/ibm-blockchain/caimage",
   293  						CATag:         "catag",
   294  						CAInitImage:   "ghcr.io/ibm-blockchain/cainitimage",
   295  						CAInitTag:     "cainittag",
   296  						EnrollerImage: "ghcr.io/ibm-blockchain/enrolleriamge",
   297  						EnrollerTag:   "enrollertag",
   298  					}
   299  
   300  					Expect(instance.Spec.Images.CAImage).To(Equal(caImages.CAImage))
   301  					Expect(instance.Spec.Images.CATag).To(Equal(caImages.CATag))
   302  					Expect(instance.Spec.Images.CAInitImage).To(Equal(caImages.CAInitImage))
   303  					Expect(instance.Spec.Images.CAInitTag).To(Equal(caImages.CAInitTag))
   304  					Expect(instance.Spec.Images.EnrollerImage).To(Equal(caImages.EnrollerImage))
   305  					Expect(instance.Spec.Images.EnrollerTag).To(Equal(caImages.EnrollerTag))
   306  				})
   307  			})
   308  
   309  			It("returns error if requested version not found", func() {
   310  				instance.Spec.FabricVersion = "5.1.0-1"
   311  				err := image.SetDefaults(instance)
   312  				Expect(err).To(HaveOccurred())
   313  			})
   314  		})
   315  
   316  		Context("peer", func() {
   317  			var (
   318  				instance *current.IBPPeer
   319  			)
   320  
   321  			BeforeEach(func() {
   322  				instance = &current.IBPPeer{
   323  					Spec: current.IBPPeerSpec{
   324  						RegistryURL:   "ghcr.io/ibm-blockchain/",
   325  						FabricVersion: "2.2.1-1",
   326  					},
   327  				}
   328  			})
   329  
   330  			Context("registy URL", func() {
   331  				When("is not set", func() {
   332  					BeforeEach(func() {
   333  						instance.Spec.RegistryURL = ""
   334  					})
   335  
   336  					It("sets registry URL to blank", func() {
   337  						err := image.SetDefaults(instance)
   338  						Expect(err).NotTo(HaveOccurred())
   339  						peerImages := deployer.PeerImages{
   340  							PeerInitImage: "ibp-init",
   341  							PeerInitTag:   "2.5.1-2511004-amd64",
   342  							PeerImage:     "ibp-peer",
   343  							PeerTag:       "2.2.1-2511204-amd64",
   344  							DindImage:     "ibp-dind",
   345  							DindTag:       "noimages-amd64",
   346  							CouchDBImage:  "ibp-couchdb",
   347  							CouchDBTag:    "2.3.1-2511004-amd64",
   348  							GRPCWebImage:  "ibp-grpcweb",
   349  							GRPCWebTag:    "2.5.1-2511004-amd64",
   350  							FluentdImage:  "ibp-fluentd",
   351  							FluentdTag:    "2.5.1-2511004-amd64",
   352  							EnrollerImage: "ibp-enroller",
   353  							EnrollerTag:   "1.0.0-amd64",
   354  						}
   355  
   356  						Expect(instance.Spec.Images.PeerInitImage).To(Equal(peerImages.PeerInitImage))
   357  						Expect(instance.Spec.Images.PeerInitTag).To(Equal(peerImages.PeerInitTag))
   358  						Expect(instance.Spec.Images.PeerImage).To(Equal(peerImages.PeerImage))
   359  						Expect(instance.Spec.Images.PeerTag).To(Equal(peerImages.PeerTag))
   360  						Expect(instance.Spec.Images.DindImage).To(Equal(peerImages.DindImage))
   361  						Expect(instance.Spec.Images.DindTag).To(Equal(peerImages.DindTag))
   362  						Expect(instance.Spec.Images.CouchDBImage).To(Equal(peerImages.CouchDBImage))
   363  						Expect(instance.Spec.Images.CouchDBTag).To(Equal(peerImages.CouchDBTag))
   364  						Expect(instance.Spec.Images.GRPCWebImage).To(Equal(peerImages.GRPCWebImage))
   365  						Expect(instance.Spec.Images.GRPCWebTag).To(Equal(peerImages.GRPCWebTag))
   366  						Expect(instance.Spec.Images.FluentdImage).To(Equal(peerImages.FluentdImage))
   367  						Expect(instance.Spec.Images.FluentdTag).To(Equal(peerImages.FluentdTag))
   368  						Expect(instance.Spec.Images.EnrollerImage).To(Equal(peerImages.EnrollerImage))
   369  						Expect(instance.Spec.Images.EnrollerTag).To(Equal(peerImages.EnrollerTag))
   370  					})
   371  				})
   372  
   373  				When("is set", func() {
   374  					It("sets the requested registry URL", func() {
   375  						err := image.SetDefaults(instance)
   376  						Expect(err).NotTo(HaveOccurred())
   377  						peerImages := deployer.PeerImages{
   378  							PeerInitImage: "ghcr.io/ibm-blockchain/ibp-init",
   379  							PeerInitTag:   "2.5.1-2511004-amd64",
   380  							PeerImage:     "ghcr.io/ibm-blockchain/ibp-peer",
   381  							PeerTag:       "2.2.1-2511204-amd64",
   382  							DindImage:     "ghcr.io/ibm-blockchain/ibp-dind",
   383  							DindTag:       "noimages-amd64",
   384  							CouchDBImage:  "ghcr.io/ibm-blockchain/ibp-couchdb",
   385  							CouchDBTag:    "2.3.1-2511004-amd64",
   386  							GRPCWebImage:  "ghcr.io/ibm-blockchain/ibp-grpcweb",
   387  							GRPCWebTag:    "2.5.1-2511004-amd64",
   388  							FluentdImage:  "ghcr.io/ibm-blockchain/ibp-fluentd",
   389  							FluentdTag:    "2.5.1-2511004-amd64",
   390  							EnrollerImage: "ghcr.io/ibm-blockchain/ibp-enroller",
   391  							EnrollerTag:   "1.0.0-amd64",
   392  						}
   393  
   394  						Expect(instance.Spec.Images.PeerInitImage).To(Equal(peerImages.PeerInitImage))
   395  						Expect(instance.Spec.Images.PeerInitTag).To(Equal(peerImages.PeerInitTag))
   396  						Expect(instance.Spec.Images.PeerImage).To(Equal(peerImages.PeerImage))
   397  						Expect(instance.Spec.Images.PeerTag).To(Equal(peerImages.PeerTag))
   398  						Expect(instance.Spec.Images.DindImage).To(Equal(peerImages.DindImage))
   399  						Expect(instance.Spec.Images.DindTag).To(Equal(peerImages.DindTag))
   400  						Expect(instance.Spec.Images.CouchDBImage).To(Equal(peerImages.CouchDBImage))
   401  						Expect(instance.Spec.Images.CouchDBTag).To(Equal(peerImages.CouchDBTag))
   402  						Expect(instance.Spec.Images.GRPCWebImage).To(Equal(peerImages.GRPCWebImage))
   403  						Expect(instance.Spec.Images.GRPCWebTag).To(Equal(peerImages.GRPCWebTag))
   404  						Expect(instance.Spec.Images.FluentdImage).To(Equal(peerImages.FluentdImage))
   405  						Expect(instance.Spec.Images.FluentdTag).To(Equal(peerImages.FluentdTag))
   406  						Expect(instance.Spec.Images.EnrollerImage).To(Equal(peerImages.EnrollerImage))
   407  						Expect(instance.Spec.Images.EnrollerTag).To(Equal(peerImages.EnrollerTag))
   408  					})
   409  				})
   410  
   411  			})
   412  
   413  			When("using normalized fabric version", func() {
   414  				BeforeEach(func() {
   415  					instance.Spec.FabricVersion = "2.2.1-0"
   416  				})
   417  
   418  				It("returns images for the requested fabric version", func() {
   419  					err := image.SetDefaults(instance)
   420  					Expect(err).NotTo(HaveOccurred())
   421  					peerImages := deployer.PeerImages{
   422  						PeerInitImage: "ghcr.io/ibm-blockchain/ibp-init",
   423  						PeerInitTag:   "2.5.1-2511004-amd64",
   424  						PeerImage:     "ghcr.io/ibm-blockchain/ibp-peer",
   425  						PeerTag:       "2.2.1-2511004-amd64",
   426  						DindImage:     "ghcr.io/ibm-blockchain/ibp-dind",
   427  						DindTag:       "noimages-amd64",
   428  						CouchDBImage:  "ghcr.io/ibm-blockchain/ibp-couchdb",
   429  						CouchDBTag:    "2.3.1-2511004-amd64",
   430  						GRPCWebImage:  "ghcr.io/ibm-blockchain/ibp-grpcweb",
   431  						GRPCWebTag:    "2.5.1-2511004-amd64",
   432  						FluentdImage:  "ghcr.io/ibm-blockchain/ibp-fluentd",
   433  						FluentdTag:    "2.5.1-2511004-amd64",
   434  						EnrollerImage: "ghcr.io/ibm-blockchain/ibp-enroller",
   435  						EnrollerTag:   "1.0.0-amd64",
   436  					}
   437  
   438  					Expect(instance.Spec.Images.PeerInitImage).To(Equal(peerImages.PeerInitImage))
   439  					Expect(instance.Spec.Images.PeerInitTag).To(Equal(peerImages.PeerInitTag))
   440  					Expect(instance.Spec.Images.PeerImage).To(Equal(peerImages.PeerImage))
   441  					Expect(instance.Spec.Images.PeerTag).To(Equal(peerImages.PeerTag))
   442  					Expect(instance.Spec.Images.DindImage).To(Equal(peerImages.DindImage))
   443  					Expect(instance.Spec.Images.DindTag).To(Equal(peerImages.DindTag))
   444  					Expect(instance.Spec.Images.CouchDBImage).To(Equal(peerImages.CouchDBImage))
   445  					Expect(instance.Spec.Images.CouchDBTag).To(Equal(peerImages.CouchDBTag))
   446  					Expect(instance.Spec.Images.GRPCWebImage).To(Equal(peerImages.GRPCWebImage))
   447  					Expect(instance.Spec.Images.GRPCWebTag).To(Equal(peerImages.GRPCWebTag))
   448  					Expect(instance.Spec.Images.FluentdImage).To(Equal(peerImages.FluentdImage))
   449  					Expect(instance.Spec.Images.FluentdTag).To(Equal(peerImages.FluentdTag))
   450  					Expect(instance.Spec.Images.EnrollerImage).To(Equal(peerImages.EnrollerImage))
   451  					Expect(instance.Spec.Images.EnrollerTag).To(Equal(peerImages.EnrollerTag))
   452  				})
   453  			})
   454  
   455  			It("returns error if requested version not found", func() {
   456  				instance.Spec.FabricVersion = "5.1.0-1"
   457  				err := image.SetDefaults(instance)
   458  				Expect(err).To(HaveOccurred())
   459  			})
   460  		})
   461  
   462  		Context("orderer", func() {
   463  			var (
   464  				instance *current.IBPOrderer
   465  			)
   466  
   467  			BeforeEach(func() {
   468  				instance = &current.IBPOrderer{
   469  					Spec: current.IBPOrdererSpec{
   470  						RegistryURL:   "ghcr.io/ibm-blockchain/",
   471  						FabricVersion: "2.2.1-1",
   472  					},
   473  				}
   474  			})
   475  
   476  			Context("registry URL", func() {
   477  				When("is not set", func() {
   478  					BeforeEach(func() {
   479  						instance.Spec.RegistryURL = ""
   480  					})
   481  
   482  					It("sets default images based on operator's config with registry of blank", func() {
   483  						err := image.SetDefaults(instance)
   484  						Expect(err).NotTo(HaveOccurred())
   485  						ordererImages := deployer.OrdererImages{
   486  							OrdererInitImage: "ibp-init",
   487  							OrdererInitTag:   "2.5.1-2511004-amd64",
   488  							OrdererImage:     "ibp-orderer",
   489  							OrdererTag:       "2.2.1-2511204-amd64",
   490  							GRPCWebImage:     "ibp-grpcweb",
   491  							GRPCWebTag:       "2.5.1-2511004-amd64",
   492  							EnrollerImage:    "ibp-enroller",
   493  							EnrollerTag:      "1.0.0-amd64",
   494  						}
   495  
   496  						Expect(instance.Spec.Images.OrdererInitImage).To(Equal(ordererImages.OrdererInitImage))
   497  						Expect(instance.Spec.Images.OrdererInitTag).To(Equal(ordererImages.OrdererInitTag))
   498  						Expect(instance.Spec.Images.OrdererImage).To(Equal(ordererImages.OrdererImage))
   499  						Expect(instance.Spec.Images.OrdererTag).To(Equal(ordererImages.OrdererTag))
   500  						Expect(instance.Spec.Images.GRPCWebImage).To(Equal(ordererImages.GRPCWebImage))
   501  						Expect(instance.Spec.Images.GRPCWebTag).To(Equal(ordererImages.GRPCWebTag))
   502  						Expect(instance.Spec.Images.EnrollerImage).To(Equal(ordererImages.EnrollerImage))
   503  						Expect(instance.Spec.Images.EnrollerTag).To(Equal(ordererImages.EnrollerTag))
   504  					})
   505  				})
   506  
   507  				When("is set", func() {
   508  					It("sets default images based on operator's config", func() {
   509  						err := image.SetDefaults(instance)
   510  						Expect(err).NotTo(HaveOccurred())
   511  						ordererImages := deployer.OrdererImages{
   512  							OrdererInitImage: "ghcr.io/ibm-blockchain/ibp-init",
   513  							OrdererInitTag:   "2.5.1-2511004-amd64",
   514  							OrdererImage:     "ghcr.io/ibm-blockchain/ibp-orderer",
   515  							OrdererTag:       "2.2.1-2511204-amd64",
   516  							GRPCWebImage:     "ghcr.io/ibm-blockchain/ibp-grpcweb",
   517  							GRPCWebTag:       "2.5.1-2511004-amd64",
   518  							EnrollerImage:    "ghcr.io/ibm-blockchain/ibp-enroller",
   519  							EnrollerTag:      "1.0.0-amd64",
   520  						}
   521  
   522  						Expect(instance.Spec.Images.OrdererInitImage).To(Equal(ordererImages.OrdererInitImage))
   523  						Expect(instance.Spec.Images.OrdererInitTag).To(Equal(ordererImages.OrdererInitTag))
   524  						Expect(instance.Spec.Images.OrdererImage).To(Equal(ordererImages.OrdererImage))
   525  						Expect(instance.Spec.Images.OrdererTag).To(Equal(ordererImages.OrdererTag))
   526  						Expect(instance.Spec.Images.GRPCWebImage).To(Equal(ordererImages.GRPCWebImage))
   527  						Expect(instance.Spec.Images.GRPCWebTag).To(Equal(ordererImages.GRPCWebTag))
   528  						Expect(instance.Spec.Images.EnrollerImage).To(Equal(ordererImages.EnrollerImage))
   529  						Expect(instance.Spec.Images.EnrollerTag).To(Equal(ordererImages.EnrollerTag))
   530  					})
   531  				})
   532  			})
   533  
   534  			When("using normalized fabric version", func() {
   535  				BeforeEach(func() {
   536  					instance.Spec.FabricVersion = "2.2.1-0"
   537  				})
   538  
   539  				It("returns default images for the base fabric version", func() {
   540  					err := image.SetDefaults(instance)
   541  					Expect(err).NotTo(HaveOccurred())
   542  					ordererImages := deployer.OrdererImages{
   543  						OrdererInitImage: "ghcr.io/ibm-blockchain/ibp-init",
   544  						OrdererInitTag:   "2.5.1-2511004-amd64",
   545  						OrdererImage:     "ghcr.io/ibm-blockchain/ibp-orderer",
   546  						OrdererTag:       "2.2.1-2511004-amd64",
   547  						GRPCWebImage:     "ghcr.io/ibm-blockchain/ibp-grpcweb",
   548  						GRPCWebTag:       "2.5.1-2511004-amd64",
   549  						EnrollerImage:    "ghcr.io/ibm-blockchain/ibp-enroller",
   550  						EnrollerTag:      "1.0.0-amd64",
   551  					}
   552  
   553  					Expect(instance.Spec.Images.OrdererInitImage).To(Equal(ordererImages.OrdererInitImage))
   554  					Expect(instance.Spec.Images.OrdererInitTag).To(Equal(ordererImages.OrdererInitTag))
   555  					Expect(instance.Spec.Images.OrdererImage).To(Equal(ordererImages.OrdererImage))
   556  					Expect(instance.Spec.Images.OrdererTag).To(Equal(ordererImages.OrdererTag))
   557  					Expect(instance.Spec.Images.GRPCWebImage).To(Equal(ordererImages.GRPCWebImage))
   558  					Expect(instance.Spec.Images.GRPCWebTag).To(Equal(ordererImages.GRPCWebTag))
   559  					Expect(instance.Spec.Images.EnrollerImage).To(Equal(ordererImages.EnrollerImage))
   560  					Expect(instance.Spec.Images.EnrollerTag).To(Equal(ordererImages.EnrollerTag))
   561  				})
   562  			})
   563  
   564  			It("returns error if requested version not found", func() {
   565  				instance.Spec.FabricVersion = "5.1.0-1"
   566  				err := image.SetDefaults(instance)
   567  				Expect(err).To(HaveOccurred())
   568  			})
   569  		})
   570  	})
   571  })