128 lines
3.8 KiB
Go
128 lines
3.8 KiB
Go
/*
|
|
Copyright IBM Corp. All Rights Reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package common
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"math/rand"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/hyperledger/fabric/cmd/common/signer"
|
|
"github.com/pkg/errors"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestCLI(t *testing.T) {
|
|
var testCmdInvoked bool
|
|
var exited bool
|
|
// Overwrite exit
|
|
terminate = func(_ int) {
|
|
exited = true
|
|
}
|
|
// Overwrite stdout with writing to this buffer
|
|
testBuff := &bytes.Buffer{}
|
|
outWriter = testBuff
|
|
|
|
var returnValue error
|
|
cli := NewCLI("cli", "cli help")
|
|
testCommand := func(conf Config) error {
|
|
// If we exited, the command wasn't executed
|
|
if exited {
|
|
return nil
|
|
}
|
|
// Else, the command was executed - so ensure it was executed
|
|
// with the expected config
|
|
require.Equal(t, Config{
|
|
SignerConfig: signer.Config{
|
|
MSPID: "SampleOrg",
|
|
KeyPath: "key.pem",
|
|
IdentityPath: "cert.pem",
|
|
},
|
|
}, conf)
|
|
testCmdInvoked = true
|
|
return returnValue
|
|
}
|
|
cli.Command("test", "test help", testCommand)
|
|
|
|
t.Run("Loading a non existent config", func(t *testing.T) {
|
|
defer testBuff.Reset()
|
|
// Overwrite user home directory with testdata
|
|
dir := filepath.Join("testdata", "non_existent_config")
|
|
cli.Run([]string{"test", "--configFile", filepath.Join(dir, "config.yaml")})
|
|
require.Contains(t, testBuff.String(), fmt.Sprint("Failed loading config open ", dir))
|
|
require.Contains(t, testBuff.String(), "config.yaml: no such file or directory")
|
|
require.True(t, exited)
|
|
})
|
|
|
|
t.Run("Loading a valid config and the command succeeds", func(t *testing.T) {
|
|
defer testBuff.Reset()
|
|
testCmdInvoked = false
|
|
exited = false
|
|
// Overwrite user home directory with testdata
|
|
dir := filepath.Join("testdata", "valid_config")
|
|
// Ensure that a valid config results in running our command
|
|
cli.Run([]string{"test", "--configFile", filepath.Join(dir, "config.yaml")})
|
|
require.True(t, testCmdInvoked)
|
|
require.False(t, exited)
|
|
})
|
|
|
|
t.Run("Loading a valid config but the command fails", func(t *testing.T) {
|
|
returnValue = errors.New("something went wrong")
|
|
defer func() {
|
|
returnValue = nil
|
|
}()
|
|
defer testBuff.Reset()
|
|
testCmdInvoked = false
|
|
exited = false
|
|
// Overwrite user home directory with testdata
|
|
dir := filepath.Join("testdata", "valid_config")
|
|
// Ensure that a valid config results in running our command
|
|
cli.Run([]string{"test", "--configFile", filepath.Join(dir, "config.yaml")})
|
|
require.True(t, testCmdInvoked)
|
|
require.True(t, exited)
|
|
require.Contains(t, testBuff.String(), "something went wrong")
|
|
})
|
|
|
|
t.Run("Saving a config", func(t *testing.T) {
|
|
defer testBuff.Reset()
|
|
testCmdInvoked = false
|
|
exited = false
|
|
dir := filepath.Join(os.TempDir(), fmt.Sprintf("config%d", rand.Int()))
|
|
os.Mkdir(dir, 0o700)
|
|
defer os.RemoveAll(dir)
|
|
|
|
userCert := filepath.Join(dir, "cert.pem")
|
|
userKey := filepath.Join(dir, "key.pem")
|
|
userCertFlag := fmt.Sprintf("--userCert=%s", userCert)
|
|
userKeyFlag := fmt.Sprintf("--userKey=%s", userKey)
|
|
os.Create(userCert)
|
|
os.Create(userKey)
|
|
|
|
cli.Run([]string{saveConfigCommand, "--MSP=SampleOrg", userCertFlag, userKeyFlag})
|
|
require.Contains(t, testBuff.String(), "--configFile must be used to specify the configuration file")
|
|
testBuff.Reset()
|
|
// Persist the config
|
|
cli.Run([]string{saveConfigCommand, "--MSP=SampleOrg", userCertFlag, userKeyFlag, "--configFile", filepath.Join(dir, "config.yaml")})
|
|
|
|
// Run a different command and ensure the config was successfully persisted
|
|
cli.Command("assert", "", func(conf Config) error {
|
|
require.Equal(t, Config{
|
|
SignerConfig: signer.Config{
|
|
MSPID: "SampleOrg",
|
|
KeyPath: userKey,
|
|
IdentityPath: userCert,
|
|
},
|
|
}, conf)
|
|
return nil
|
|
})
|
|
cli.Run([]string{"assert", "--configFile", filepath.Join(dir, "config.yaml")})
|
|
})
|
|
}
|