github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/core/ledger/kvledger/upgrade_dbs_test.go (about)

     1  /*
     2  Copyright hechain. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package kvledger
     8  
     9  import (
    10  	"fmt"
    11  	"testing"
    12  
    13  	"github.com/hechain20/hechain/common/ledger/dataformat"
    14  	"github.com/hechain20/hechain/core/ledger/mock"
    15  	"github.com/hechain20/hechain/internal/fileutil"
    16  	"github.com/pkg/errors"
    17  	"github.com/stretchr/testify/require"
    18  )
    19  
    20  func TestUpgradeWrongFormat(t *testing.T) {
    21  	conf, cleanup := testConfig(t)
    22  	conf.HistoryDBConfig.Enabled = false
    23  	defer cleanup()
    24  	provider := testutilNewProvider(conf, t, &mock.DeployedChaincodeInfoProvider{})
    25  
    26  	// change format to a wrong value to test upgradeFormat error path
    27  	err := provider.idStore.db.Put(formatKey, []byte("x.0"), true)
    28  	provider.Close()
    29  	require.NoError(t, err)
    30  
    31  	stateDBPath := StateDBPath(conf.RootFSPath)
    32  	isEmpty, err := fileutil.DirEmpty(stateDBPath)
    33  	require.NoError(t, err)
    34  	require.False(t, isEmpty)
    35  
    36  	err = UpgradeDBs(conf)
    37  	expectedErr := errors.WithMessage(
    38  		&dataformat.ErrFormatMismatch{
    39  			ExpectedFormat: dataformat.PreviousFormat,
    40  			Format:         "x.0",
    41  			DBInfo:         fmt.Sprintf("leveldb for channel-IDs at [%s]", LedgerProviderPath(conf.RootFSPath)),
    42  		},
    43  		"error while checking whether upgrade is required",
    44  	)
    45  	require.EqualError(t, err, expectedErr.Error())
    46  	isEmpty, err = fileutil.DirEmpty(stateDBPath)
    47  	require.NoError(t, err)
    48  	require.False(t, isEmpty)
    49  }
    50  
    51  func TestUpgradeAlreadyUptodateFormat(t *testing.T) {
    52  	conf, cleanup := testConfig(t)
    53  	conf.HistoryDBConfig.Enabled = false
    54  	defer cleanup()
    55  	provider := testutilNewProvider(conf, t, &mock.DeployedChaincodeInfoProvider{})
    56  	provider.Close()
    57  
    58  	stateDBPath := StateDBPath(conf.RootFSPath)
    59  	isEmpty, err := fileutil.DirEmpty(stateDBPath)
    60  	require.NoError(t, err)
    61  	require.False(t, isEmpty)
    62  
    63  	err = UpgradeDBs(conf)
    64  	require.EqualError(t, err, "the data format is already up to date. No upgrade is required")
    65  	isEmpty, err = fileutil.DirEmpty(stateDBPath)
    66  	require.NoError(t, err)
    67  	require.False(t, isEmpty)
    68  }