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 = &current.IBPConsole{
    48  			Spec: current.IBPConsoleSpec{
    49  				RegistryURL:      "us.test.io/",
    50  				ImagePullSecrets: []string{"pullsecret"},
    51  				ConnectionString: "connectionString1",
    52  				Storage: &current.ConsoleStorage{
    53  					Console: &current.StorageSpec{
    54  						Class: "sc1",
    55  					},
    56  				},
    57  				NetworkInfo: &current.NetworkInfo{
    58  					Domain: "domain1",
    59  				},
    60  				Versions: &current.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: &current.CRN{
   125  					CName:       "cname",
   126  					CType:       "ctype",
   127  					Location:    "location1",
   128  					Servicename: "Servicename1",
   129  					Version:     "version1",
   130  					AccountID:   "id123",
   131  				},
   132  				Deployer: &current.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 := &current.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 := &current.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 := &current.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  })