github.com/true-sqn/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  }