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