go_study/fabric-main/msp/configbuilder_test.go

136 lines
4.0 KiB
Go

/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package msp
import (
"io/ioutil"
"os"
"path/filepath"
"testing"
"github.com/hyperledger/fabric/bccsp/factory"
"github.com/hyperledger/fabric/core/config/configtest"
"github.com/stretchr/testify/require"
)
func TestSetupBCCSPKeystoreConfig(t *testing.T) {
keystoreDir := "/tmp"
// Case 1 : Check with empty FactoryOpts
rtnConfig := SetupBCCSPKeystoreConfig(nil, keystoreDir)
require.NotNil(t, rtnConfig)
require.Equal(t, rtnConfig.Default, "SW")
require.NotNil(t, rtnConfig.SW)
require.NotNil(t, rtnConfig.SW.FileKeystore)
require.Equal(t, rtnConfig.SW.FileKeystore.KeyStorePath, keystoreDir)
// Case 2 : Check with 'SW' as default provider
// Case 2-1 : without SwOpts
bccspConfig := &factory.FactoryOpts{
Default: "SW",
}
rtnConfig = SetupBCCSPKeystoreConfig(bccspConfig, keystoreDir)
require.NotNil(t, rtnConfig.SW)
require.NotNil(t, rtnConfig.SW.FileKeystore)
require.Equal(t, rtnConfig.SW.FileKeystore.KeyStorePath, keystoreDir)
// Case 2-2 : without SwOpts.FileKeystore
bccspConfig.SW = &factory.SwOpts{
Hash: "SHA2",
Security: 256,
}
rtnConfig = SetupBCCSPKeystoreConfig(bccspConfig, keystoreDir)
require.NotNil(t, rtnConfig.SW.FileKeystore)
require.Equal(t, rtnConfig.SW.FileKeystore.KeyStorePath, keystoreDir)
// Case 2-3 : without SwOpts.FileKeystore.KeyStorePath
bccspConfig.SW = &factory.SwOpts{
Hash: "SHA2",
Security: 256,
FileKeystore: &factory.FileKeystoreOpts{},
}
rtnConfig = SetupBCCSPKeystoreConfig(bccspConfig, keystoreDir)
require.Equal(t, rtnConfig.SW.FileKeystore.KeyStorePath, keystoreDir)
// Case 2-4 : with empty SwOpts.FileKeystore.KeyStorePath
bccspConfig.SW = &factory.SwOpts{
Hash: "SHA2",
Security: 256,
FileKeystore: &factory.FileKeystoreOpts{KeyStorePath: ""},
}
rtnConfig = SetupBCCSPKeystoreConfig(bccspConfig, keystoreDir)
require.Equal(t, rtnConfig.SW.FileKeystore.KeyStorePath, keystoreDir)
// Case 3 : Check with 'PKCS11' as default provider
// Case 3-1 : without SwOpts
bccspConfig.Default = "PKCS11"
bccspConfig.SW = nil
rtnConfig = SetupBCCSPKeystoreConfig(bccspConfig, keystoreDir)
require.Nil(t, rtnConfig.SW)
// Case 3-2 : without SwOpts.FileKeystore
bccspConfig.SW = &factory.SwOpts{
Hash: "SHA2",
Security: 256,
}
rtnConfig = SetupBCCSPKeystoreConfig(bccspConfig, keystoreDir)
require.NotNil(t, rtnConfig.SW.FileKeystore)
require.Equal(t, rtnConfig.SW.FileKeystore.KeyStorePath, keystoreDir)
}
func TestGetLocalMspConfig(t *testing.T) {
mspDir := configtest.GetDevMspDir()
_, err := GetLocalMspConfig(mspDir, nil, "SampleOrg")
require.NoError(t, err)
}
func TestGetLocalMspConfigFails(t *testing.T) {
_, err := GetLocalMspConfig("/tmp/", nil, "SampleOrg")
require.Error(t, err)
}
func TestGetPemMaterialFromDirWithFile(t *testing.T) {
tempFile, err := ioutil.TempFile("", "fabric-msp-test")
require.NoError(t, err)
err = tempFile.Close()
require.NoError(t, err)
defer os.Remove(tempFile.Name())
_, err = getPemMaterialFromDir(tempFile.Name())
require.Error(t, err)
}
func TestGetPemMaterialFromDirWithSymlinks(t *testing.T) {
mspDir := configtest.GetDevMspDir()
tempDir := t.TempDir()
dirSymlinkName := filepath.Join(tempDir, "..data")
err := os.Symlink(filepath.Join(mspDir, "signcerts"), dirSymlinkName)
require.NoError(t, err)
fileSymlinkTarget := filepath.Join("..data", "peer.pem")
fileSymlinkName := filepath.Join(tempDir, "peer.pem")
err = os.Symlink(fileSymlinkTarget, fileSymlinkName)
require.NoError(t, err)
pemdataSymlink, err := getPemMaterialFromDir(tempDir)
require.NoError(t, err)
expected, err := getPemMaterialFromDir(filepath.Join(mspDir, "signcerts"))
require.NoError(t, err)
require.Equal(t, pemdataSymlink, expected)
}
func TestReadFileUtils(t *testing.T) {
// test that reading a file with an empty path doesn't crash
_, err := readPemFile("")
require.Error(t, err)
// test that reading an existing file which is not a PEM file doesn't crash
_, err = readPemFile("/dev/null")
require.Error(t, err)
}