136 lines
4.0 KiB
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)
|
|
}
|