github.com/IBM-Blockchain/fabric-operator@v1.0.4/pkg/initializer/orderer/config/v1/config_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 v1_test
    20  
    21  import (
    22  	commonapi "github.com/IBM-Blockchain/fabric-operator/pkg/apis/common"
    23  	v1 "github.com/IBM-Blockchain/fabric-operator/pkg/apis/orderer/v1"
    24  	config "github.com/IBM-Blockchain/fabric-operator/pkg/initializer/orderer/config/v1"
    25  	. "github.com/onsi/ginkgo/v2"
    26  	. "github.com/onsi/gomega"
    27  )
    28  
    29  var _ = Describe("Orderer configuration", func() {
    30  	Context("reading and writing orderer configuration file", func() {
    31  		BeforeEach(func() {
    32  			config := &config.Orderer{}
    33  
    34  			err := config.WriteToFile("/tmp/orderer.yaml")
    35  			Expect(err).NotTo(HaveOccurred())
    36  		})
    37  
    38  		It("creates orderer.yaml", func() {
    39  			Expect("/tmp/orderer.yaml").Should(BeAnExistingFile())
    40  		})
    41  
    42  		It("read orderer.yaml", func() {
    43  			_, err := config.ReadOrdererFile("/tmp/orderer.yaml")
    44  			Expect(err).NotTo(HaveOccurred())
    45  		})
    46  	})
    47  
    48  	Context("merges current configuration with overrides values", func() {
    49  		It("merges with defaults based on HSM proxy", func() {
    50  			orderer, err := config.ReadOrdererFile("../../../../../testdata/init/orderer/orderer.yaml")
    51  			Expect(err).NotTo(HaveOccurred())
    52  
    53  			newConfig := &config.Orderer{
    54  				Orderer: v1.Orderer{
    55  					General: v1.General{
    56  						BCCSP: &commonapi.BCCSP{
    57  							ProviderName: "PKCS11",
    58  							PKCS11: &commonapi.PKCS11Opts{
    59  								Library:    "library2",
    60  								Label:      "label2",
    61  								Pin:        "2222",
    62  								HashFamily: "SHA3",
    63  								SecLevel:   512,
    64  								FileKeyStore: &commonapi.FileKeyStoreOpts{
    65  									KeyStorePath: "keystore3",
    66  								},
    67  							},
    68  						},
    69  					},
    70  				},
    71  			}
    72  
    73  			err = orderer.MergeWith(newConfig, true)
    74  			Expect(err).NotTo(HaveOccurred())
    75  			Expect(orderer.General.BCCSP.PKCS11.Library).To(Equal("/usr/local/lib/libpkcs11-proxy.so"))
    76  			Expect(orderer.General.BCCSP.PKCS11.Label).To(Equal("label2"))
    77  			Expect(orderer.General.BCCSP.PKCS11.Pin).To(Equal("2222"))
    78  			Expect(orderer.General.BCCSP.PKCS11.HashFamily).To(Equal("SHA3"))
    79  			Expect(orderer.General.BCCSP.PKCS11.SecLevel).To(Equal(512))
    80  			Expect(orderer.General.BCCSP.PKCS11.FileKeyStore.KeyStorePath).To(Equal("keystore3"))
    81  		})
    82  
    83  		It("correctly merges boolean fields", func() {
    84  			orderer, err := config.ReadOrdererFile("../../../../../testdata/init/orderer/orderer.yaml")
    85  			Expect(err).NotTo(HaveOccurred())
    86  
    87  			trueVal := true
    88  			orderer.General.Authentication.NoExpirationChecks = &trueVal
    89  			orderer.General.Profile.Enabled = &trueVal
    90  			Expect(*orderer.General.Authentication.NoExpirationChecks).To(Equal(true))
    91  			Expect(*orderer.General.Profile.Enabled).To(Equal(true))
    92  
    93  			falseVal := false
    94  			newConfig := &config.Orderer{
    95  				Orderer: v1.Orderer{
    96  					General: v1.General{
    97  						Authentication: v1.Authentication{
    98  							NoExpirationChecks: &falseVal,
    99  						},
   100  					},
   101  				},
   102  			}
   103  
   104  			err = orderer.MergeWith(newConfig, false)
   105  			Expect(err).NotTo(HaveOccurred())
   106  
   107  			By("setting field from 'true' to 'false' if bool pointer set to 'false' in override config", func() {
   108  				Expect(*orderer.General.Authentication.NoExpirationChecks).To(Equal(false))
   109  			})
   110  
   111  			By("persisting boolean fields set to 'true' when bool pointer not set to 'false' in override config", func() {
   112  				Expect(*orderer.General.Profile.Enabled).To(Equal(true))
   113  			})
   114  
   115  		})
   116  	})
   117  
   118  	It("reads in orderer.yaml and unmarshal it to peer config", func() {
   119  		orderer, err := config.ReadOrdererFile("../../../../../testdata/init/orderer/orderer.yaml")
   120  		Expect(err).NotTo(HaveOccurred())
   121  
   122  		// General
   123  		general := orderer.General
   124  		By("setting General.LedgerType", func() {
   125  			Expect(general.LedgerType).To(Equal("file"))
   126  		})
   127  
   128  		By("setting General.ListenAddress", func() {
   129  			Expect(general.ListenAddress).To(Equal("127.0.0.1"))
   130  		})
   131  
   132  		By("setting General.ListenPort", func() {
   133  			Expect(general.ListenPort).To(Equal(uint16(7050)))
   134  		})
   135  
   136  		By("setting General.TLS.Enabled", func() {
   137  			Expect(*general.TLS.Enabled).To(Equal(true))
   138  		})
   139  
   140  		By("setting General.TLS.PrivateKey", func() {
   141  			Expect(general.TLS.PrivateKey).To(Equal("tls/server.key"))
   142  		})
   143  
   144  		By("setting General.TLS.Certificate", func() {
   145  			Expect(general.TLS.Certificate).To(Equal("tls/server.crt"))
   146  		})
   147  
   148  		By("setting General.TLS.RootCAs", func() {
   149  			Expect(general.TLS.RootCAs).To(Equal([]string{"tls/ca.crt"}))
   150  		})
   151  
   152  		By("setting General.TLS.ClientAuthRequired", func() {
   153  			Expect(*general.TLS.ClientAuthRequired).To(Equal(true))
   154  		})
   155  
   156  		By("setting General.TLS.ClientRootCAs", func() {
   157  			Expect(general.TLS.ClientRootCAs).To(Equal([]string{"tls/client.crt"}))
   158  		})
   159  
   160  		By("setting General.BCCSP.ProviderName", func() {
   161  			Expect(general.BCCSP.ProviderName).To(Equal("SW"))
   162  		})
   163  
   164  		By("setting General.BCCSP.SW.HashFamily", func() {
   165  			Expect(general.BCCSP.SW.HashFamily).To(Equal("SHA2"))
   166  		})
   167  
   168  		By("setting General.BCCSP.SW.SecLevel", func() {
   169  			Expect(general.BCCSP.SW.SecLevel).To(Equal(256))
   170  		})
   171  
   172  		By("setting General.BCCSP.SW.FileKeyStore.KeyStore", func() {
   173  			Expect(general.BCCSP.SW.FileKeyStore.KeyStorePath).To(Equal("msp/keystore"))
   174  		})
   175  
   176  		By("setting BCCSP.PKCS11.Library", func() {
   177  			Expect(general.BCCSP.PKCS11.Library).To(Equal("library1"))
   178  		})
   179  
   180  		By("setting BCCSP.PKCS11.Label", func() {
   181  			Expect(general.BCCSP.PKCS11.Label).To(Equal("label1"))
   182  		})
   183  
   184  		By("setting BCCSP.PKCS11.Pin", func() {
   185  			Expect(general.BCCSP.PKCS11.Pin).To(Equal("1234"))
   186  		})
   187  
   188  		By("setting BCCSP.PKCS11.HashFamily", func() {
   189  			Expect(general.BCCSP.PKCS11.HashFamily).To(Equal("SHA2"))
   190  		})
   191  
   192  		By("setting BCCSP.PKCS11.Security", func() {
   193  			Expect(general.BCCSP.PKCS11.SecLevel).To(Equal(256))
   194  		})
   195  
   196  		By("setting BCCSP.PKCS11.FileKeystore.KeystorePath", func() {
   197  			Expect(general.BCCSP.PKCS11.FileKeyStore.KeyStorePath).To(Equal("keystore2"))
   198  		})
   199  	})
   200  })