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  }