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 }