github.com/zhouxv/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 }