github.com/yimialmonte/fabric@v2.1.1+incompatible/msp/configbuilder_test.go (about)

     1  /*
     2  Copyright IBM Corp. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package msp
     8  
     9  import (
    10  	"io/ioutil"
    11  	"os"
    12  	"path/filepath"
    13  	"testing"
    14  
    15  	"github.com/hyperledger/fabric/bccsp/factory"
    16  	"github.com/hyperledger/fabric/core/config/configtest"
    17  	"github.com/stretchr/testify/assert"
    18  )
    19  
    20  func TestSetupBCCSPKeystoreConfig(t *testing.T) {
    21  	keystoreDir := "/tmp"
    22  
    23  	// Case 1 : Check with empty FactoryOpts
    24  	rtnConfig := SetupBCCSPKeystoreConfig(nil, keystoreDir)
    25  	assert.NotNil(t, rtnConfig)
    26  	assert.Equal(t, rtnConfig.ProviderName, "SW")
    27  	assert.NotNil(t, rtnConfig.SwOpts)
    28  	assert.NotNil(t, rtnConfig.SwOpts.FileKeystore)
    29  	assert.Equal(t, rtnConfig.SwOpts.FileKeystore.KeyStorePath, keystoreDir)
    30  
    31  	// Case 2 : Check with 'SW' as default provider
    32  	// Case 2-1 : without SwOpts
    33  	bccspConfig := &factory.FactoryOpts{
    34  		ProviderName: "SW",
    35  	}
    36  	rtnConfig = SetupBCCSPKeystoreConfig(bccspConfig, keystoreDir)
    37  	assert.NotNil(t, rtnConfig.SwOpts)
    38  	assert.NotNil(t, rtnConfig.SwOpts.FileKeystore)
    39  	assert.Equal(t, rtnConfig.SwOpts.FileKeystore.KeyStorePath, keystoreDir)
    40  
    41  	// Case 2-2 : without SwOpts.FileKeystore
    42  	bccspConfig.SwOpts = &factory.SwOpts{
    43  		HashFamily: "SHA2",
    44  		SecLevel:   256,
    45  		Ephemeral:  true,
    46  	}
    47  	rtnConfig = SetupBCCSPKeystoreConfig(bccspConfig, keystoreDir)
    48  	assert.NotNil(t, rtnConfig.SwOpts.FileKeystore)
    49  	assert.Equal(t, rtnConfig.SwOpts.FileKeystore.KeyStorePath, keystoreDir)
    50  
    51  	// Case 2-3 : without SwOpts.FileKeystore.KeyStorePath
    52  	bccspConfig.SwOpts = &factory.SwOpts{
    53  		HashFamily:   "SHA2",
    54  		SecLevel:     256,
    55  		FileKeystore: &factory.FileKeystoreOpts{},
    56  	}
    57  	rtnConfig = SetupBCCSPKeystoreConfig(bccspConfig, keystoreDir)
    58  	assert.Equal(t, rtnConfig.SwOpts.FileKeystore.KeyStorePath, keystoreDir)
    59  
    60  	// Case 2-4 : with empty SwOpts.FileKeystore.KeyStorePath
    61  	bccspConfig.SwOpts = &factory.SwOpts{
    62  		HashFamily:   "SHA2",
    63  		SecLevel:     256,
    64  		FileKeystore: &factory.FileKeystoreOpts{KeyStorePath: ""},
    65  	}
    66  	rtnConfig = SetupBCCSPKeystoreConfig(bccspConfig, keystoreDir)
    67  	assert.Equal(t, rtnConfig.SwOpts.FileKeystore.KeyStorePath, keystoreDir)
    68  
    69  	// Case 3 : Check with 'PKCS11' as default provider
    70  	// Case 3-1 : without SwOpts
    71  	bccspConfig.ProviderName = "PKCS11"
    72  	bccspConfig.SwOpts = nil
    73  	rtnConfig = SetupBCCSPKeystoreConfig(bccspConfig, keystoreDir)
    74  	assert.Nil(t, rtnConfig.SwOpts)
    75  
    76  	// Case 3-2 : without SwOpts.FileKeystore
    77  	bccspConfig.SwOpts = &factory.SwOpts{
    78  		HashFamily: "SHA2",
    79  		SecLevel:   256,
    80  		Ephemeral:  true,
    81  	}
    82  	rtnConfig = SetupBCCSPKeystoreConfig(bccspConfig, keystoreDir)
    83  	assert.NotNil(t, rtnConfig.SwOpts.FileKeystore)
    84  	assert.Equal(t, rtnConfig.SwOpts.FileKeystore.KeyStorePath, keystoreDir)
    85  }
    86  
    87  func TestGetLocalMspConfig(t *testing.T) {
    88  	mspDir := configtest.GetDevMspDir()
    89  	_, err := GetLocalMspConfig(mspDir, nil, "SampleOrg")
    90  	assert.NoError(t, err)
    91  }
    92  
    93  func TestGetLocalMspConfigFails(t *testing.T) {
    94  	_, err := GetLocalMspConfig("/tmp/", nil, "SampleOrg")
    95  	assert.Error(t, err)
    96  }
    97  
    98  func TestGetPemMaterialFromDirWithFile(t *testing.T) {
    99  	tempFile, err := ioutil.TempFile("", "fabric-msp-test")
   100  	assert.NoError(t, err)
   101  	err = tempFile.Close()
   102  	assert.NoError(t, err)
   103  	defer os.Remove(tempFile.Name())
   104  
   105  	_, err = getPemMaterialFromDir(tempFile.Name())
   106  	assert.Error(t, err)
   107  }
   108  
   109  func TestGetPemMaterialFromDirWithSymlinks(t *testing.T) {
   110  	mspDir := configtest.GetDevMspDir()
   111  	tempDir, err := ioutil.TempDir("", "fabric-msp-test")
   112  	assert.NoError(t, err)
   113  	defer os.RemoveAll(tempDir)
   114  
   115  	dirSymlinkName := filepath.Join(tempDir, "..data")
   116  	err = os.Symlink(filepath.Join(mspDir, "signcerts"), dirSymlinkName)
   117  	assert.NoError(t, err)
   118  
   119  	fileSymlinkTarget := filepath.Join("..data", "peer.pem")
   120  	fileSymlinkName := filepath.Join(tempDir, "peer.pem")
   121  	err = os.Symlink(fileSymlinkTarget, fileSymlinkName)
   122  	assert.NoError(t, err)
   123  
   124  	pemdataSymlink, err := getPemMaterialFromDir(tempDir)
   125  	assert.NoError(t, err)
   126  	expected, err := getPemMaterialFromDir(filepath.Join(mspDir, "signcerts"))
   127  	assert.NoError(t, err)
   128  	assert.Equal(t, pemdataSymlink, expected)
   129  }
   130  
   131  func TestReadFileUtils(t *testing.T) {
   132  	// test that reading a file with an empty path doesn't crash
   133  	_, err := readPemFile("")
   134  	assert.Error(t, err)
   135  
   136  	// test that reading an existing file which is not a PEM file doesn't crash
   137  	_, err = readPemFile("/dev/null")
   138  	assert.Error(t, err)
   139  }