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 }