github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/internal/peer/node/config_test.go (about) 1 /* 2 Copyright hechain. 2022 All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package node 8 9 import ( 10 "testing" 11 "time" 12 13 "github.com/hechain20/hechain/core/ledger" 14 "github.com/spf13/viper" 15 "github.com/stretchr/testify/require" 16 ) 17 18 func TestLedgerConfig(t *testing.T) { 19 defer viper.Reset() 20 tests := []struct { 21 name string 22 config map[string]interface{} 23 expected *ledger.Config 24 }{ 25 { 26 name: "goleveldb", 27 config: map[string]interface{}{ 28 "peer.fileSystemPath": "/peerfs", 29 "ledger.state.stateDatabase": "goleveldb", 30 }, 31 expected: &ledger.Config{ 32 RootFSPath: "/peerfs/ledgersData", 33 StateDBConfig: &ledger.StateDBConfig{ 34 StateDatabase: "goleveldb", 35 CouchDB: &ledger.CouchDBConfig{}, 36 }, 37 PrivateDataConfig: &ledger.PrivateDataConfig{ 38 MaxBatchSize: 5000, 39 BatchesInterval: 1000, 40 PurgeInterval: 100, 41 DeprioritizedDataReconcilerInterval: 60 * time.Minute, 42 }, 43 HistoryDBConfig: &ledger.HistoryDBConfig{ 44 Enabled: false, 45 }, 46 SnapshotsConfig: &ledger.SnapshotsConfig{ 47 RootDir: "/peerfs/snapshots", 48 }, 49 }, 50 }, 51 { 52 name: "CouchDB Defaults", 53 config: map[string]interface{}{ 54 "peer.fileSystemPath": "/peerfs", 55 "ledger.state.stateDatabase": "CouchDB", 56 "ledger.state.couchDBConfig.couchDBAddress": "localhost:5984", 57 "ledger.state.couchDBConfig.username": "username", 58 "ledger.state.couchDBConfig.password": "password", 59 "ledger.state.couchDBConfig.maxRetries": 3, 60 "ledger.state.couchDBConfig.maxRetriesOnStartup": 10, 61 "ledger.state.couchDBConfig.requestTimeout": "30s", 62 "ledger.state.couchDBConfig.createGlobalChangesDB": true, 63 "ledger.state.couchDBConfig.cacheSize": 64, 64 }, 65 expected: &ledger.Config{ 66 RootFSPath: "/peerfs/ledgersData", 67 StateDBConfig: &ledger.StateDBConfig{ 68 StateDatabase: "CouchDB", 69 CouchDB: &ledger.CouchDBConfig{ 70 Address: "localhost:5984", 71 Username: "username", 72 Password: "password", 73 MaxRetries: 3, 74 MaxRetriesOnStartup: 10, 75 RequestTimeout: 30 * time.Second, 76 InternalQueryLimit: 1000, 77 MaxBatchUpdateSize: 500, 78 CreateGlobalChangesDB: true, 79 RedoLogPath: "/peerfs/ledgersData/couchdbRedoLogs", 80 UserCacheSizeMBs: 64, 81 }, 82 }, 83 PrivateDataConfig: &ledger.PrivateDataConfig{ 84 MaxBatchSize: 5000, 85 BatchesInterval: 1000, 86 PurgeInterval: 100, 87 DeprioritizedDataReconcilerInterval: 60 * time.Minute, 88 }, 89 HistoryDBConfig: &ledger.HistoryDBConfig{ 90 Enabled: false, 91 }, 92 SnapshotsConfig: &ledger.SnapshotsConfig{ 93 RootDir: "/peerfs/snapshots", 94 }, 95 }, 96 }, 97 { 98 name: "CouchDB Explicit", 99 config: map[string]interface{}{ 100 "peer.fileSystemPath": "/peerfs", 101 "ledger.state.stateDatabase": "CouchDB", 102 "ledger.state.couchDBConfig.couchDBAddress": "localhost:5984", 103 "ledger.state.couchDBConfig.username": "username", 104 "ledger.state.couchDBConfig.password": "password", 105 "ledger.state.couchDBConfig.maxRetries": 3, 106 "ledger.state.couchDBConfig.maxRetriesOnStartup": 10, 107 "ledger.state.couchDBConfig.requestTimeout": "30s", 108 "ledger.state.couchDBConfig.internalQueryLimit": 500, 109 "ledger.state.couchDBConfig.maxBatchUpdateSize": 600, 110 "ledger.state.couchDBConfig.createGlobalChangesDB": true, 111 "ledger.state.couchDBConfig.cacheSize": 64, 112 "ledger.pvtdataStore.collElgProcMaxDbBatchSize": 50000, 113 "ledger.pvtdataStore.collElgProcDbBatchesInterval": 10000, 114 "ledger.pvtdataStore.purgeInterval": 1000, 115 "ledger.pvtdataStore.deprioritizedDataReconcilerInterval": "180m", 116 "ledger.history.enableHistoryDatabase": true, 117 "ledger.snapshots.rootDir": "/peerfs/customLocationForsnapshots", 118 }, 119 expected: &ledger.Config{ 120 RootFSPath: "/peerfs/ledgersData", 121 StateDBConfig: &ledger.StateDBConfig{ 122 StateDatabase: "CouchDB", 123 CouchDB: &ledger.CouchDBConfig{ 124 Address: "localhost:5984", 125 Username: "username", 126 Password: "password", 127 MaxRetries: 3, 128 MaxRetriesOnStartup: 10, 129 RequestTimeout: 30 * time.Second, 130 InternalQueryLimit: 500, 131 MaxBatchUpdateSize: 600, 132 CreateGlobalChangesDB: true, 133 RedoLogPath: "/peerfs/ledgersData/couchdbRedoLogs", 134 UserCacheSizeMBs: 64, 135 }, 136 }, 137 PrivateDataConfig: &ledger.PrivateDataConfig{ 138 MaxBatchSize: 50000, 139 BatchesInterval: 10000, 140 PurgeInterval: 1000, 141 DeprioritizedDataReconcilerInterval: 180 * time.Minute, 142 }, 143 HistoryDBConfig: &ledger.HistoryDBConfig{ 144 Enabled: true, 145 }, 146 SnapshotsConfig: &ledger.SnapshotsConfig{ 147 RootDir: "/peerfs/customLocationForsnapshots", 148 }, 149 }, 150 }, 151 } 152 153 for _, test := range tests { 154 _test := test 155 t.Run(_test.name, func(t *testing.T) { 156 for k, v := range _test.config { 157 viper.Set(k, v) 158 } 159 conf := ledgerConfig() 160 require.EqualValues(t, _test.expected, conf) 161 }) 162 } 163 }