153 lines
4.3 KiB
Go
153 lines
4.3 KiB
Go
/*
|
|
Copyright Hitachi, Ltd. All Rights Reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package chaincode_test
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io/ioutil"
|
|
|
|
"github.com/hyperledger/fabric/internal/peer/lifecycle/chaincode"
|
|
"github.com/hyperledger/fabric/internal/peer/lifecycle/chaincode/mock"
|
|
"github.com/pkg/errors"
|
|
"github.com/spf13/cobra"
|
|
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
"github.com/onsi/gomega/gbytes"
|
|
)
|
|
|
|
var _ = Describe("CalculatePackageID", func() {
|
|
Describe("PackageIDCalculator", func() {
|
|
var (
|
|
mockReader *mock.Reader
|
|
input *chaincode.CalculatePackageIDInput
|
|
packageIDCalculator *chaincode.PackageIDCalculator
|
|
)
|
|
|
|
BeforeEach(func() {
|
|
input = &chaincode.CalculatePackageIDInput{
|
|
PackageFile: "pkgFile",
|
|
}
|
|
|
|
mockReader = &mock.Reader{}
|
|
data, err := ioutil.ReadFile("testdata/good-package.tar.gz")
|
|
Expect(err).NotTo(HaveOccurred())
|
|
mockReader.ReadFileReturns(data, nil)
|
|
|
|
buffer := gbytes.NewBuffer()
|
|
|
|
packageIDCalculator = &chaincode.PackageIDCalculator{
|
|
Input: input,
|
|
Reader: mockReader,
|
|
Writer: buffer,
|
|
}
|
|
})
|
|
|
|
It("calculates the package IDs for chaincodes", func() {
|
|
err := packageIDCalculator.PackageID()
|
|
Expect(err).NotTo(HaveOccurred())
|
|
Eventually(packageIDCalculator.Writer).Should(gbytes.Say("Real-Label:fb3edf9621c5e3d864079d8c9764205f4db09d7021cfa4124aa79f4edcc2f64a\n"))
|
|
})
|
|
|
|
Context("when the chaincode install package is not provided", func() {
|
|
BeforeEach(func() {
|
|
packageIDCalculator.Input.PackageFile = ""
|
|
})
|
|
|
|
It("returns an error", func() {
|
|
err := packageIDCalculator.PackageID()
|
|
Expect(err).To(MatchError("chaincode install package must be provided"))
|
|
})
|
|
})
|
|
|
|
Context("when the package file cannot be read", func() {
|
|
BeforeEach(func() {
|
|
mockReader.ReadFileReturns(nil, errors.New("coffee"))
|
|
})
|
|
|
|
It("returns an error", func() {
|
|
err := packageIDCalculator.PackageID()
|
|
Expect(err).To(MatchError("failed to read chaincode package at 'pkgFile': coffee"))
|
|
})
|
|
})
|
|
|
|
Context("when the package file cannot be parsed", func() {
|
|
BeforeEach(func() {
|
|
data, err := ioutil.ReadFile("testdata/unparsed-package.tar.gz")
|
|
Expect(err).NotTo(HaveOccurred())
|
|
mockReader.ReadFileReturns(data, nil)
|
|
})
|
|
|
|
It("returns an error", func() {
|
|
err := packageIDCalculator.PackageID()
|
|
Expect(err).To(MatchError(ContainSubstring("could not parse as a chaincode install package")))
|
|
})
|
|
})
|
|
|
|
Context("when JSON-formatted output is requested", func() {
|
|
BeforeEach(func() {
|
|
packageIDCalculator.Input.OutputFormat = "json"
|
|
})
|
|
|
|
It("calculates the package IDs for chaincodes and writes the output as JSON", func() {
|
|
err := packageIDCalculator.PackageID()
|
|
Expect(err).NotTo(HaveOccurred())
|
|
expectedOutput := &chaincode.CalculatePackageIDOutput{
|
|
PackageID: "Real-Label:fb3edf9621c5e3d864079d8c9764205f4db09d7021cfa4124aa79f4edcc2f64a",
|
|
}
|
|
json, err := json.MarshalIndent(expectedOutput, "", "\t")
|
|
Expect(err).NotTo(HaveOccurred())
|
|
Eventually(packageIDCalculator.Writer).Should(gbytes.Say(fmt.Sprintf(`\Q%s\E`, string(json))))
|
|
})
|
|
})
|
|
})
|
|
|
|
Describe("CalculatePackageIDCmd", func() {
|
|
var calculatePackageIDCmd *cobra.Command
|
|
|
|
BeforeEach(func() {
|
|
calculatePackageIDCmd = chaincode.CalculatePackageIDCmd(nil)
|
|
calculatePackageIDCmd.SilenceErrors = true
|
|
calculatePackageIDCmd.SilenceUsage = true
|
|
calculatePackageIDCmd.SetArgs([]string{
|
|
"testpkg",
|
|
})
|
|
})
|
|
|
|
It("sets up the calculator and attempts to calculate the package ID for the chaincode", func() {
|
|
err := calculatePackageIDCmd.Execute()
|
|
Expect(err).To(MatchError(ContainSubstring("failed to read chaincode package at 'testpkg'")))
|
|
})
|
|
|
|
Context("when more than one argument is provided", func() {
|
|
BeforeEach(func() {
|
|
calculatePackageIDCmd.SetArgs([]string{
|
|
"testpkg",
|
|
"whatthe",
|
|
})
|
|
})
|
|
|
|
It("returns an error", func() {
|
|
err := calculatePackageIDCmd.Execute()
|
|
Expect(err).To(MatchError("invalid number of args. expected only the packaged chaincode file"))
|
|
})
|
|
})
|
|
|
|
Context("when no argument is provided", func() {
|
|
BeforeEach(func() {
|
|
calculatePackageIDCmd.SetArgs([]string{})
|
|
})
|
|
|
|
It("returns an error", func() {
|
|
err := calculatePackageIDCmd.Execute()
|
|
Expect(err).To(MatchError("invalid number of args. expected only the packaged chaincode file"))
|
|
})
|
|
})
|
|
})
|
|
})
|