/* Copyright IBM Corp. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 */ package pkcs11 import ( "encoding/json" "testing" bpkcs11 "github.com/hyperledger/fabric/bccsp/pkcs11" "github.com/hyperledger/fabric/integration" "github.com/hyperledger/fabric/integration/nwo" "github.com/hyperledger/fabric/integration/nwo/commands" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" "github.com/onsi/gomega/gbytes" "github.com/onsi/gomega/gexec" ) func TestPKCS11(t *testing.T) { RegisterFailHandler(Fail) lib, pin, label := bpkcs11.FindPKCS11Lib() if lib == "" || pin == "" || label == "" { t.Skip("Skipping PKCS11 Suite: Required ENV variables not set") } RunSpecs(t, "PKCS11 Suite") } var ( buildServer *nwo.BuildServer components *nwo.Components ) var _ = SynchronizedBeforeSuite(func() []byte { buildServer = nwo.NewBuildServer("-tags=pkcs11") buildServer.Serve() components = buildServer.Components() payload, err := json.Marshal(components) Expect(err).NotTo(HaveOccurred()) return payload }, func(payload []byte) { err := json.Unmarshal(payload, &components) Expect(err).NotTo(HaveOccurred()) }) var _ = SynchronizedAfterSuite(func() { }, func() { buildServer.Shutdown() }) func StartPort() int { return integration.PKCS11Port.StartPortForNode() } func runQueryInvokeQuery(n *nwo.Network, orderer *nwo.Orderer, peer *nwo.Peer, channel string) { By("querying the chaincode") sess, err := n.PeerUserSession(peer, "User1", commands.ChaincodeQuery{ ChannelID: channel, Name: "mycc", Ctor: `{"Args":["query","a"]}`, }) Expect(err).NotTo(HaveOccurred()) Eventually(sess, n.EventuallyTimeout).Should(gexec.Exit(0)) Expect(sess).To(gbytes.Say("100")) sess, err = n.PeerUserSession(peer, "User1", commands.ChaincodeInvoke{ ChannelID: channel, Orderer: n.OrdererAddress(orderer, nwo.ListenPort), Name: "mycc", Ctor: `{"Args":["invoke","a","b","10"]}`, PeerAddresses: []string{ n.PeerAddress(n.Peer("Org1", "peer0"), nwo.ListenPort), n.PeerAddress(n.Peer("Org2", "peer0"), nwo.ListenPort), }, WaitForEvent: true, }) Expect(err).NotTo(HaveOccurred()) Eventually(sess, n.EventuallyTimeout).Should(gexec.Exit(0)) Expect(sess.Err).To(gbytes.Say("Chaincode invoke successful. result: status:200")) sess, err = n.PeerUserSession(peer, "User1", commands.ChaincodeQuery{ ChannelID: channel, Name: "mycc", Ctor: `{"Args":["query","a"]}`, }) Expect(err).NotTo(HaveOccurred()) Eventually(sess, n.EventuallyTimeout).Should(gexec.Exit(0)) Expect(sess).To(gbytes.Say("90")) }