github.com/defanghe/fabric@v2.1.1+incompatible/bccsp/sw/fileks_test.go (about)

     1  /*
     2  Copyright IBM Corp. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package sw
     8  
     9  import (
    10  	"crypto/ecdsa"
    11  	"crypto/elliptic"
    12  	"crypto/rand"
    13  	"fmt"
    14  	"io/ioutil"
    15  	"os"
    16  	"path/filepath"
    17  	"testing"
    18  
    19  	"github.com/hyperledger/fabric/bccsp/utils"
    20  	"github.com/stretchr/testify/assert"
    21  )
    22  
    23  func TestInvalidStoreKey(t *testing.T) {
    24  	t.Parallel()
    25  
    26  	tempDir, err := ioutil.TempDir("", "bccspks")
    27  	assert.NoError(t, err)
    28  	defer os.RemoveAll(tempDir)
    29  
    30  	ks, err := NewFileBasedKeyStore(nil, filepath.Join(tempDir, "bccspks"), false)
    31  	if err != nil {
    32  		t.Fatalf("Failed initiliazing KeyStore [%s]", err)
    33  	}
    34  
    35  	err = ks.StoreKey(nil)
    36  	if err == nil {
    37  		t.Fatal("Error should be different from nil in this case")
    38  	}
    39  
    40  	err = ks.StoreKey(&ecdsaPrivateKey{nil})
    41  	if err == nil {
    42  		t.Fatal("Error should be different from nil in this case")
    43  	}
    44  
    45  	err = ks.StoreKey(&ecdsaPublicKey{nil})
    46  	if err == nil {
    47  		t.Fatal("Error should be different from nil in this case")
    48  	}
    49  
    50  	err = ks.StoreKey(&aesPrivateKey{nil, false})
    51  	if err == nil {
    52  		t.Fatal("Error should be different from nil in this case")
    53  	}
    54  
    55  	err = ks.StoreKey(&aesPrivateKey{nil, true})
    56  	if err == nil {
    57  		t.Fatal("Error should be different from nil in this case")
    58  	}
    59  }
    60  
    61  func TestBigKeyFile(t *testing.T) {
    62  	ksPath, err := ioutil.TempDir("", "bccspks")
    63  	assert.NoError(t, err)
    64  	defer os.RemoveAll(ksPath)
    65  
    66  	ks, err := NewFileBasedKeyStore(nil, ksPath, false)
    67  	assert.NoError(t, err)
    68  
    69  	// Generate a key for keystore to find
    70  	privKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
    71  	assert.NoError(t, err)
    72  
    73  	cspKey := &ecdsaPrivateKey{privKey}
    74  	ski := cspKey.SKI()
    75  	rawKey, err := utils.PrivateKeyToPEM(privKey, nil)
    76  	assert.NoError(t, err)
    77  
    78  	// Large padding array, of some values PEM parser will NOOP
    79  	bigBuff := make([]byte, (1 << 17))
    80  	for i := range bigBuff {
    81  		bigBuff[i] = '\n'
    82  	}
    83  	copy(bigBuff, rawKey)
    84  
    85  	//>64k, so that total file size will be too big
    86  	ioutil.WriteFile(filepath.Join(ksPath, "bigfile.pem"), bigBuff, 0666)
    87  
    88  	_, err = ks.GetKey(ski)
    89  	assert.Error(t, err)
    90  	expected := fmt.Sprintf("key with SKI %x not found in %s", ski, ksPath)
    91  	assert.EqualError(t, err, expected)
    92  
    93  	// 1k, so that the key would be found
    94  	ioutil.WriteFile(filepath.Join(ksPath, "smallerfile.pem"), bigBuff[0:1<<10], 0666)
    95  
    96  	_, err = ks.GetKey(ski)
    97  	assert.NoError(t, err)
    98  }
    99  
   100  func TestReInitKeyStore(t *testing.T) {
   101  	ksPath, err := ioutil.TempDir("", "bccspks")
   102  	assert.NoError(t, err)
   103  	defer os.RemoveAll(ksPath)
   104  
   105  	ks, err := NewFileBasedKeyStore(nil, ksPath, false)
   106  	assert.NoError(t, err)
   107  	fbKs, isFileBased := ks.(*fileBasedKeyStore)
   108  	assert.True(t, isFileBased)
   109  	err = fbKs.Init(nil, ksPath, false)
   110  	assert.EqualError(t, err, "keystore is already initialized")
   111  }
   112  func TestDirExists(t *testing.T) {
   113  	r, err := dirExists("")
   114  	assert.False(t, r)
   115  	assert.NoError(t, err)
   116  
   117  	r, err = dirExists(os.TempDir())
   118  	assert.NoError(t, err)
   119  	assert.Equal(t, true, r)
   120  
   121  	r, err = dirExists(filepath.Join(os.TempDir(), "7rhf90239vhev90"))
   122  	assert.NoError(t, err)
   123  	assert.Equal(t, false, r)
   124  }
   125  
   126  func TestDirEmpty(t *testing.T) {
   127  	_, err := dirEmpty("")
   128  	assert.Error(t, err)
   129  
   130  	path := filepath.Join(os.TempDir(), "7rhf90239vhev90")
   131  	defer os.Remove(path)
   132  	os.Mkdir(path, os.ModePerm)
   133  
   134  	r, err := dirEmpty(path)
   135  	assert.NoError(t, err)
   136  	assert.Equal(t, true, r)
   137  
   138  	r, err = dirEmpty(os.TempDir())
   139  	assert.NoError(t, err)
   140  	assert.Equal(t, false, r)
   141  }