github.com/osdi23p228/fabric@v0.0.0-20221218062954-77808885f5db/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/osdi23p228/fabric/common/ledger/blkstorage" 16 "github.com/osdi23p228/fabric/common/ledger/blockledger" 17 "github.com/osdi23p228/fabric/common/metrics/disabled" 18 "github.com/stretchr/testify/assert" 19 ) 20 21 type mockBlockStoreProvider struct { 22 blockstore *blkstorage.BlockStore 23 list []string 24 error error 25 } 26 27 func (mbsp *mockBlockStoreProvider) Open(ledgerid string) (*blkstorage.BlockStore, error) { 28 return mbsp.blockstore, mbsp.error 29 } 30 31 func (mbsp *mockBlockStoreProvider) List() ([]string, error) { 32 return mbsp.list, mbsp.error 33 } 34 35 func (mbsp *mockBlockStoreProvider) Close() { 36 } 37 38 func TestBlockstoreProviderError(t *testing.T) { 39 flf := &fileLedgerFactory{ 40 blkstorageProvider: &mockBlockStoreProvider{error: fmt.Errorf("blockstorage provider error")}, 41 ledgers: make(map[string]blockledger.ReadWriter), 42 } 43 assert.Panics( 44 t, 45 func() { flf.ChannelIDs() }, 46 "Expected ChannelIDs to panic if storage provider cannot list channel IDs") 47 48 _, err := flf.GetOrCreate("foo") 49 assert.Error(t, err, "Expected GetOrCreate to return error if blockstorage provider cannot open") 50 assert.Empty(t, flf.ledgers, "Expected no new ledger is created") 51 } 52 53 func TestMultiReinitialization(t *testing.T) { 54 metricsProvider := &disabled.Provider{} 55 56 dir, err := ioutil.TempDir("", "hyperledger_fabric") 57 assert.NoError(t, err, "Error creating temp dir: %s", err) 58 defer os.RemoveAll(dir) 59 60 flf, err := New(dir, metricsProvider) 61 assert.NoError(t, err) 62 _, err = flf.GetOrCreate("testchannelid") 63 assert.NoError(t, err, "Error GetOrCreate channel") 64 assert.Equal(t, 1, len(flf.ChannelIDs()), "Expected 1 channel") 65 flf.Close() 66 67 flf, err = New(dir, metricsProvider) 68 assert.NoError(t, err) 69 _, err = flf.GetOrCreate("foo") 70 assert.NoError(t, err, "Error creating channel") 71 assert.Equal(t, 2, len(flf.ChannelIDs()), "Expected channel to be recovered") 72 flf.Close() 73 74 flf, err = New(dir, metricsProvider) 75 assert.NoError(t, err) 76 _, err = flf.GetOrCreate("bar") 77 assert.NoError(t, err, "Error creating channel") 78 assert.Equal(t, 3, len(flf.ChannelIDs()), "Expected channel to be recovered") 79 flf.Close() 80 }