github.com/lzy4123/fabric@v2.1.1+incompatible/common/ledger/blockledger/fileledger/factory_test.go (about) 1 /* 2 Copyright IBM Corp. 2016 All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package fileledger 8 9 import ( 10 "fmt" 11 "io/ioutil" 12 "os" 13 "testing" 14 15 "github.com/hyperledger/fabric/common/ledger/blkstorage" 16 "github.com/hyperledger/fabric/common/ledger/blockledger" 17 "github.com/hyperledger/fabric/common/metrics/disabled" 18 "github.com/stretchr/testify/assert" 19 ) 20 21 type mockBlockStoreProvider struct { 22 blockstore blkstorage.BlockStore 23 exists bool 24 list []string 25 error error 26 } 27 28 func (mbsp *mockBlockStoreProvider) CreateBlockStore(ledgerid string) (blkstorage.BlockStore, error) { 29 return mbsp.blockstore, mbsp.error 30 } 31 32 func (mbsp *mockBlockStoreProvider) OpenBlockStore(ledgerid string) (blkstorage.BlockStore, error) { 33 return mbsp.blockstore, mbsp.error 34 } 35 36 func (mbsp *mockBlockStoreProvider) Exists(ledgerid string) (bool, error) { 37 return mbsp.exists, mbsp.error 38 } 39 40 func (mbsp *mockBlockStoreProvider) List() ([]string, error) { 41 return mbsp.list, mbsp.error 42 } 43 44 func (mbsp *mockBlockStoreProvider) Close() { 45 } 46 47 func TestBlockstoreProviderError(t *testing.T) { 48 flf := &fileLedgerFactory{ 49 blkstorageProvider: &mockBlockStoreProvider{error: fmt.Errorf("blockstorage provider error")}, 50 ledgers: make(map[string]blockledger.ReadWriter), 51 } 52 assert.Panics( 53 t, 54 func() { flf.ChannelIDs() }, 55 "Expected ChannelIDs to panic if storage provider cannot list channel IDs") 56 57 _, err := flf.GetOrCreate("foo") 58 assert.Error(t, err, "Expected GetOrCreate to return error if blockstorage provider cannot open") 59 assert.Empty(t, flf.ledgers, "Expected no new ledger is created") 60 } 61 62 func TestMultiReinitialization(t *testing.T) { 63 metricsProvider := &disabled.Provider{} 64 65 dir, err := ioutil.TempDir("", "hyperledger_fabric") 66 assert.NoError(t, err, "Error creating temp dir: %s", err) 67 defer os.RemoveAll(dir) 68 69 flf, err := New(dir, metricsProvider) 70 assert.NoError(t, err) 71 _, err = flf.GetOrCreate("testchannelid") 72 assert.NoError(t, err, "Error GetOrCreate channel") 73 assert.Equal(t, 1, len(flf.ChannelIDs()), "Expected 1 channel") 74 flf.Close() 75 76 flf, err = New(dir, metricsProvider) 77 assert.NoError(t, err) 78 _, err = flf.GetOrCreate("foo") 79 assert.NoError(t, err, "Error creating channel") 80 assert.Equal(t, 2, len(flf.ChannelIDs()), "Expected channel to be recovered") 81 flf.Close() 82 83 flf, err = New(dir, metricsProvider) 84 assert.NoError(t, err) 85 _, err = flf.GetOrCreate("bar") 86 assert.NoError(t, err, "Error creating channel") 87 assert.Equal(t, 3, len(flf.ChannelIDs()), "Expected channel to be recovered") 88 flf.Close() 89 }