github.com/IBM-Blockchain/fabric-operator@v1.0.4/integration/e2ev2/e2ev2_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 e2ev2_test
    20  
    21  import (
    22  	"context"
    23  	"encoding/json"
    24  	"fmt"
    25  	"os"
    26  	"path/filepath"
    27  
    28  	. "github.com/onsi/gomega"
    29  
    30  	"github.com/IBM-Blockchain/fabric-operator/integration"
    31  	"github.com/IBM-Blockchain/fabric-operator/integration/helper"
    32  	"github.com/IBM-Blockchain/fabric-operator/pkg/offering/common"
    33  	"github.com/onsi/gomega/gexec"
    34  	k8serrors "k8s.io/apimachinery/pkg/api/errors"
    35  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    36  )
    37  
    38  var (
    39  	org1peer  *helper.Peer
    40  	orderer   *helper.Orderer
    41  	peeradmin *PeerAdmin
    42  )
    43  
    44  type PeerAdmin struct {
    45  	Envs []string
    46  }
    47  
    48  func NewPeerAdminSession(org1peer *helper.Peer, tlsRootCertPath string, address string) *PeerAdmin {
    49  	peerHome := filepath.Join(wd, org1peer.Name)
    50  
    51  	CopyFile("./config/core.yaml", filepath.Join(peerHome, "core.yaml"))
    52  	CopyFile("./config.yaml", filepath.Join(peerHome, peerAdminUsername, "/msp/config.yaml"))
    53  
    54  	envs := []string{
    55  		fmt.Sprintf("FABRIC_CFG_PATH=%s", peerHome),
    56  		fmt.Sprintf("CORE_PEER_TLS_ENABLED=%s", "true"),
    57  		fmt.Sprintf("CORE_PEER_LOCALMSPID=%s", org1peer.CR.Spec.MSPID),
    58  		fmt.Sprintf("CORE_PEER_TLS_ROOTCERT_FILE=%s", tlsRootCertPath),
    59  		fmt.Sprintf("CORE_PEER_MSPCONFIGPATH=%s", filepath.Join(wd, org1peer.Name, peerAdminUsername, "msp")),
    60  		fmt.Sprintf("CORE_PEER_ADDRESS=%s", address),
    61  	}
    62  
    63  	envs = append(envs, os.Environ()...)
    64  
    65  	return &PeerAdmin{
    66  		Envs: envs,
    67  	}
    68  }
    69  
    70  type Chaincode struct {
    71  	Path       string
    72  	Lang       string
    73  	Label      string
    74  	OutputFile string
    75  }
    76  
    77  func (p *PeerAdmin) PackageChaincode(c Chaincode) {
    78  	args := []string{
    79  		"lifecycle", "chaincode", "package",
    80  		"--path", c.Path,
    81  		"--lang", c.Lang,
    82  		"--label", c.Label,
    83  		c.OutputFile,
    84  	}
    85  
    86  	cmd := helper.GetCommand(helper.AbsPath(wd, "bin/peer"), args...)
    87  	cmd.Env = p.Envs
    88  
    89  	sess, err := helper.StartSession(cmd, "Package Chaincode")
    90  	Expect(err).NotTo(HaveOccurred())
    91  	Eventually(sess).Should(gexec.Exit(0))
    92  }
    93  
    94  func (p *PeerAdmin) InstallChaincode(packageFile string) {
    95  	args := []string{
    96  		"lifecycle", "chaincode", "install",
    97  		packageFile,
    98  	}
    99  
   100  	cmd := helper.GetCommand(helper.AbsPath(wd, "bin/peer"), args...)
   101  	cmd.Env = p.Envs
   102  	cmd.Env = append(cmd.Env, fmt.Sprintf("FABRIC_LOGGING_SPEC=%s", "debug"))
   103  
   104  	sess, err := helper.StartSession(cmd, "Install Chaincode")
   105  	Expect(err).NotTo(HaveOccurred())
   106  	Eventually(sess).Should(gexec.Exit(0))
   107  }
   108  
   109  func Org1CA() *helper.CA {
   110  	cr := helper.Org1CACR(namespace, domain)
   111  
   112  	return &helper.CA{
   113  		Domain:     domain,
   114  		Name:       cr.Name,
   115  		Namespace:  namespace,
   116  		WorkingDir: wd,
   117  		CR:         cr,
   118  		CRClient:   ibpCRClient,
   119  		KClient:    kclient,
   120  		NativeResourcePoller: integration.NativeResourcePoller{
   121  			Name:      cr.Name,
   122  			Namespace: namespace,
   123  			Client:    kclient,
   124  		},
   125  	}
   126  }
   127  
   128  func Org1Peer(tlsCert, caHost, adminCert string) *helper.Peer {
   129  	cr, err := helper.Org1PeerCR(namespace, domain, peerUsername, tlsCert, caHost, adminCert)
   130  	Expect(err).NotTo(HaveOccurred())
   131  
   132  	return &helper.Peer{
   133  		Domain:     domain,
   134  		Name:       cr.Name,
   135  		Namespace:  namespace,
   136  		WorkingDir: wd,
   137  		CR:         cr,
   138  		CRClient:   ibpCRClient,
   139  		KClient:    kclient,
   140  		NativeResourcePoller: integration.NativeResourcePoller{
   141  			Name:      cr.Name,
   142  			Namespace: namespace,
   143  			Client:    kclient,
   144  		},
   145  	}
   146  }
   147  
   148  func ClearOperatorConfig() {
   149  	err := kclient.CoreV1().ConfigMaps(namespace).Delete(context.TODO(), "operator-config", *metav1.NewDeleteOptions(0))
   150  	if !k8serrors.IsNotFound(err) {
   151  		Expect(err).NotTo(HaveOccurred())
   152  	}
   153  }
   154  
   155  func GetBackup(certType, name string) *common.Backup {
   156  	backupSecret, err := kclient.CoreV1().Secrets(namespace).Get(context.TODO(), fmt.Sprintf("%s-crypto-backup", name), metav1.GetOptions{})
   157  	if err != nil {
   158  		Expect(k8serrors.IsNotFound(err)).To(Equal(true))
   159  		return &common.Backup{}
   160  	}
   161  
   162  	backup := &common.Backup{}
   163  	key := fmt.Sprintf("%s-backup.json", certType)
   164  	err = json.Unmarshal(backupSecret.Data[key], backup)
   165  	Expect(err).NotTo(HaveOccurred())
   166  
   167  	return backup
   168  }
   169  
   170  func TLSSignCert(name string) []byte {
   171  	secret, err := kclient.CoreV1().Secrets(namespace).Get(context.TODO(), fmt.Sprintf("tls-%s-signcert", name), metav1.GetOptions{})
   172  	Expect(err).NotTo(HaveOccurred())
   173  
   174  	return secret.Data["cert.pem"]
   175  }
   176  
   177  func TLSKeystore(name string) []byte {
   178  	secret, err := kclient.CoreV1().Secrets(namespace).Get(context.TODO(), fmt.Sprintf("tls-%s-keystore", name), metav1.GetOptions{})
   179  	Expect(err).NotTo(HaveOccurred())
   180  
   181  	return secret.Data["key.pem"]
   182  }
   183  
   184  func EcertSignCert(name string) []byte {
   185  	secret, err := kclient.CoreV1().Secrets(namespace).Get(context.TODO(), fmt.Sprintf("ecert-%s-signcert", name), metav1.GetOptions{})
   186  	Expect(err).NotTo(HaveOccurred())
   187  
   188  	return secret.Data["cert.pem"]
   189  }
   190  
   191  func EcertKeystore(name string) []byte {
   192  	secret, err := kclient.CoreV1().Secrets(namespace).Get(context.TODO(), fmt.Sprintf("ecert-%s-keystore", name), metav1.GetOptions{})
   193  	Expect(err).NotTo(HaveOccurred())
   194  
   195  	return secret.Data["key.pem"]
   196  }
   197  
   198  func EcertCACert(name string) []byte {
   199  	secret, err := kclient.CoreV1().Secrets(namespace).Get(context.TODO(), fmt.Sprintf("ecert-%s-cacerts", name), metav1.GetOptions{})
   200  	Expect(err).NotTo(HaveOccurred())
   201  
   202  	return secret.Data["cacert-0.pem"]
   203  }