github.com/IBM-Blockchain/fabric-operator@v1.0.4/pkg/offering/openshift/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  	. "github.com/onsi/ginkgo/v2"
    23  	. "github.com/onsi/gomega"
    24  	corev1 "k8s.io/api/core/v1"
    25  	"sigs.k8s.io/yaml"
    26  
    27  	current "github.com/IBM-Blockchain/fabric-operator/api/v1beta1"
    28  	"github.com/IBM-Blockchain/fabric-operator/pkg/apis/deployer"
    29  	"github.com/IBM-Blockchain/fabric-operator/pkg/manager/resources"
    30  	"github.com/IBM-Blockchain/fabric-operator/pkg/offering"
    31  	"github.com/IBM-Blockchain/fabric-operator/pkg/offering/openshift/console/override"
    32  	"github.com/IBM-Blockchain/fabric-operator/pkg/util"
    33  )
    34  
    35  var _ = Describe("Openshift Console Deployer Config Map Overrides", func() {
    36  	var (
    37  		overrider *override.Override
    38  		instance  *current.IBPConsole
    39  		cm        *corev1.ConfigMap
    40  	)
    41  
    42  	BeforeEach(func() {
    43  		var err error
    44  		overrider = &override.Override{}
    45  		instance = &current.IBPConsole{
    46  			Spec: current.IBPConsoleSpec{
    47  				ImagePullSecrets: []string{"pullsecret"},
    48  				ConnectionString: "connectionString1",
    49  				Storage: &current.ConsoleStorage{
    50  					Console: &current.StorageSpec{
    51  						Class: "sc1",
    52  					},
    53  				},
    54  				NetworkInfo: &current.NetworkInfo{
    55  					Domain: "domain1",
    56  				},
    57  				Versions: &current.Versions{
    58  					CA: map[string]current.VersionCA{
    59  						"1.4.6-1": current.VersionCA{
    60  							Default: true,
    61  							Version: "1.4.6-1",
    62  							Image: current.CAImages{
    63  								CAInitImage: "ca-init-image",
    64  								CAInitTag:   "1.4.6",
    65  								CAImage:     "ca-image",
    66  								CATag:       "1.4.6",
    67  							},
    68  						},
    69  					},
    70  					Peer: map[string]current.VersionPeer{
    71  						"1.4.6-1": current.VersionPeer{
    72  							Default: true,
    73  							Version: "1.4.6-1",
    74  							Image: current.PeerImages{
    75  								PeerInitImage:   "peer-init-image",
    76  								PeerInitTag:     "1.4.6",
    77  								PeerImage:       "peer-image",
    78  								PeerTag:         "1.4.6",
    79  								DindImage:       "dind-iamge",
    80  								DindTag:         "1.4.6",
    81  								GRPCWebImage:    "grpcweb-image",
    82  								GRPCWebTag:      "1.4.6",
    83  								FluentdImage:    "fluentd-image",
    84  								FluentdTag:      "1.4.6",
    85  								CouchDBImage:    "couchdb-image",
    86  								CouchDBTag:      "1.4.6",
    87  								CCLauncherImage: "cclauncer-image",
    88  								CCLauncherTag:   "1.4.6",
    89  							},
    90  						},
    91  					},
    92  					Orderer: map[string]current.VersionOrderer{
    93  						"1.4.6-1": current.VersionOrderer{
    94  							Default: true,
    95  							Version: "1.4.6-1",
    96  							Image: current.OrdererImages{
    97  								OrdererInitImage: "orderer-init-image",
    98  								OrdererInitTag:   "1.4.6",
    99  								OrdererImage:     "orderer-image",
   100  								OrdererTag:       "1.4.6",
   101  								GRPCWebImage:     "grpcweb-image",
   102  								GRPCWebTag:       "1.4.6",
   103  							},
   104  						},
   105  					},
   106  				},
   107  				CRN: &current.CRN{
   108  					CName:       "cname",
   109  					CType:       "ctype",
   110  					Location:    "location1",
   111  					Servicename: "Servicename1",
   112  					Version:     "version1",
   113  					AccountID:   "id123",
   114  				},
   115  				Deployer: &current.Deployer{
   116  					ConnectionString: "connectionstring2",
   117  				},
   118  			},
   119  		}
   120  		cm, err = util.GetConfigMapFromFile("../../../../../testdata/deployercm/deployer-configmap.yaml")
   121  		Expect(err).NotTo(HaveOccurred())
   122  	})
   123  
   124  	Context("create", func() {
   125  		It("return an error if no image pull secret provided", func() {
   126  			instance.Spec.ImagePullSecrets = nil
   127  			err := overrider.DeployerCM(instance, cm, resources.Create, nil)
   128  			Expect(err).To(HaveOccurred())
   129  			Expect(err.Error()).To(Equal("no image pull secret provided"))
   130  		})
   131  
   132  		It("return an error if no domain provided", func() {
   133  			instance.Spec.NetworkInfo.Domain = ""
   134  			err := overrider.DeployerCM(instance, cm, resources.Create, nil)
   135  			Expect(err).To(HaveOccurred())
   136  			Expect(err.Error()).To(Equal("domain not provided"))
   137  		})
   138  
   139  		It("overrides values based on spec", func() {
   140  			err := overrider.DeployerCM(instance, cm, resources.Create, nil)
   141  			Expect(err).NotTo(HaveOccurred())
   142  
   143  			config := &deployer.Config{}
   144  
   145  			err = yaml.Unmarshal([]byte(cm.Data["settings.yaml"]), config)
   146  			Expect(err).NotTo(HaveOccurred())
   147  
   148  			By("setting cluster type", func() {
   149  				Expect(config.ClusterType).To(Equal(offering.OPENSHIFT.String()))
   150  			})
   151  
   152  			By("setting service type", func() {
   153  				Expect(config.ServiceConfig.Type).To(Equal(corev1.ServiceTypeClusterIP))
   154  			})
   155  
   156  			By("setting domain", func() {
   157  				Expect(config.Domain).To(Equal(instance.Spec.NetworkInfo.Domain))
   158  			})
   159  
   160  			By("setting image pull secret", func() {
   161  				Expect(config.ImagePullSecrets).To(Equal(instance.Spec.ImagePullSecrets))
   162  			})
   163  
   164  			By("setting connection string", func() {
   165  				Expect(config.Database.ConnectionURL).To(Equal(instance.Spec.Deployer.ConnectionString))
   166  			})
   167  
   168  			By("setting versions", func() {
   169  				expectedVersions := &current.Versions{
   170  					CA: map[string]current.VersionCA{
   171  						"1.4.6-1": current.VersionCA{
   172  							Default: true,
   173  							Version: "1.4.6-1",
   174  							Image: current.CAImages{
   175  								CAInitImage: "ca-init-image",
   176  								CAInitTag:   "1.4.6",
   177  								CAImage:     "ca-image",
   178  								CATag:       "1.4.6",
   179  							},
   180  						},
   181  					},
   182  					Peer: map[string]current.VersionPeer{
   183  						"1.4.6-1": current.VersionPeer{
   184  							Default: true,
   185  							Version: "1.4.6-1",
   186  							Image: current.PeerImages{
   187  								PeerInitImage:   "peer-init-image",
   188  								PeerInitTag:     "1.4.6",
   189  								PeerImage:       "peer-image",
   190  								PeerTag:         "1.4.6",
   191  								DindImage:       "dind-iamge",
   192  								DindTag:         "1.4.6",
   193  								GRPCWebImage:    "grpcweb-image",
   194  								GRPCWebTag:      "1.4.6",
   195  								FluentdImage:    "fluentd-image",
   196  								FluentdTag:      "1.4.6",
   197  								CouchDBImage:    "couchdb-image",
   198  								CouchDBTag:      "1.4.6",
   199  								CCLauncherImage: "cclauncer-image",
   200  								CCLauncherTag:   "1.4.6",
   201  							},
   202  						},
   203  					},
   204  					Orderer: map[string]current.VersionOrderer{
   205  						"1.4.6-1": current.VersionOrderer{
   206  							Default: true,
   207  							Version: "1.4.6-1",
   208  							Image: current.OrdererImages{
   209  								OrdererInitImage: "orderer-init-image",
   210  								OrdererInitTag:   "1.4.6",
   211  								OrdererImage:     "orderer-image",
   212  								OrdererTag:       "1.4.6",
   213  								GRPCWebImage:     "grpcweb-image",
   214  								GRPCWebTag:       "1.4.6",
   215  							},
   216  						},
   217  					},
   218  				}
   219  
   220  				typeConvertedVersions := &current.Versions{}
   221  				util.ConvertSpec(config.Versions, typeConvertedVersions)
   222  				Expect(typeConvertedVersions).To(Equal(expectedVersions))
   223  			})
   224  
   225  			By("setting storage class name", func() {
   226  				Expect(config.Defaults.Storage.CA.CA.Class).To(Equal(instance.Spec.Storage.Console.Class))
   227  				Expect(config.Defaults.Storage.Peer.Peer.Class).To(Equal(instance.Spec.Storage.Console.Class))
   228  				Expect(config.Defaults.Storage.Peer.StateDB.Class).To(Equal(instance.Spec.Storage.Console.Class))
   229  				Expect(config.Defaults.Storage.Orderer.Orderer.Class).To(Equal(instance.Spec.Storage.Console.Class))
   230  			})
   231  
   232  			By("setting CRN", func() {
   233  				crn := &current.CRN{
   234  					CName:       instance.Spec.CRN.CName,
   235  					CType:       instance.Spec.CRN.CType,
   236  					Location:    instance.Spec.CRN.Location,
   237  					Servicename: instance.Spec.CRN.Servicename,
   238  					Version:     instance.Spec.CRN.Version,
   239  					AccountID:   instance.Spec.CRN.AccountID,
   240  				}
   241  				Expect(config.CRN).To(Equal(crn))
   242  			})
   243  		})
   244  	})
   245  
   246  	Context("update", func() {
   247  		It("return an error if no image pull secret provided", func() {
   248  			instance.Spec.ImagePullSecrets = nil
   249  			err := overrider.DeployerCM(instance, cm, resources.Update, nil)
   250  			Expect(err).To(HaveOccurred())
   251  			Expect(err.Error()).To(Equal("no image pull secret provided"))
   252  		})
   253  	})
   254  })