github.com/true-sqn/fabric@v2.1.1+incompatible/internal/peer/node/config_test.go (about)

     1  /*
     2  Copyright IBM Corp. 2016 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/hyperledger/fabric/core/ledger"
    14  	"github.com/hyperledger/fabric/core/ledger/util/couchdb"
    15  	"github.com/spf13/viper"
    16  	"github.com/stretchr/testify/assert"
    17  )
    18  
    19  func TestLedgerConfig(t *testing.T) {
    20  	defer viper.Set("ledger.state.stateDatabase", "goleveldb")
    21  	var tests = []struct {
    22  		name     string
    23  		config   map[string]interface{}
    24  		expected *ledger.Config
    25  	}{
    26  		{
    27  			name: "goleveldb",
    28  			config: map[string]interface{}{
    29  				"peer.fileSystemPath":        "/peerfs",
    30  				"ledger.state.stateDatabase": "goleveldb",
    31  			},
    32  			expected: &ledger.Config{
    33  				RootFSPath: "/peerfs/ledgersData",
    34  				StateDBConfig: &ledger.StateDBConfig{
    35  					StateDatabase: "goleveldb",
    36  					CouchDB:       &couchdb.Config{},
    37  				},
    38  				PrivateDataConfig: &ledger.PrivateDataConfig{
    39  					MaxBatchSize:    5000,
    40  					BatchesInterval: 1000,
    41  					PurgeInterval:   100,
    42  				},
    43  				HistoryDBConfig: &ledger.HistoryDBConfig{
    44  					Enabled: false,
    45  				},
    46  			},
    47  		},
    48  		{
    49  			name: "CouchDB Defaults",
    50  			config: map[string]interface{}{
    51  				"peer.fileSystemPath":                              "/peerfs",
    52  				"ledger.state.stateDatabase":                       "CouchDB",
    53  				"ledger.state.couchDBConfig.couchDBAddress":        "localhost:5984",
    54  				"ledger.state.couchDBConfig.username":              "username",
    55  				"ledger.state.couchDBConfig.password":              "password",
    56  				"ledger.state.couchDBConfig.maxRetries":            3,
    57  				"ledger.state.couchDBConfig.maxRetriesOnStartup":   10,
    58  				"ledger.state.couchDBConfig.requestTimeout":        "30s",
    59  				"ledger.state.couchDBConfig.createGlobalChangesDB": true,
    60  				"ledger.state.couchDBConfig.cacheSize":             64,
    61  			},
    62  			expected: &ledger.Config{
    63  				RootFSPath: "/peerfs/ledgersData",
    64  				StateDBConfig: &ledger.StateDBConfig{
    65  					StateDatabase: "CouchDB",
    66  					CouchDB: &couchdb.Config{
    67  						Address:                 "localhost:5984",
    68  						Username:                "username",
    69  						Password:                "password",
    70  						MaxRetries:              3,
    71  						MaxRetriesOnStartup:     10,
    72  						RequestTimeout:          30 * time.Second,
    73  						InternalQueryLimit:      1000,
    74  						MaxBatchUpdateSize:      500,
    75  						WarmIndexesAfterNBlocks: 1,
    76  						CreateGlobalChangesDB:   true,
    77  						RedoLogPath:             "/peerfs/ledgersData/couchdbRedoLogs",
    78  						UserCacheSizeMBs:        64,
    79  					},
    80  				},
    81  				PrivateDataConfig: &ledger.PrivateDataConfig{
    82  					MaxBatchSize:    5000,
    83  					BatchesInterval: 1000,
    84  					PurgeInterval:   100,
    85  				},
    86  				HistoryDBConfig: &ledger.HistoryDBConfig{
    87  					Enabled: false,
    88  				},
    89  			},
    90  		},
    91  		{
    92  			name: "CouchDB Explicit",
    93  			config: map[string]interface{}{
    94  				"peer.fileSystemPath":                                "/peerfs",
    95  				"ledger.state.stateDatabase":                         "CouchDB",
    96  				"ledger.state.couchDBConfig.couchDBAddress":          "localhost:5984",
    97  				"ledger.state.couchDBConfig.username":                "username",
    98  				"ledger.state.couchDBConfig.password":                "password",
    99  				"ledger.state.couchDBConfig.maxRetries":              3,
   100  				"ledger.state.couchDBConfig.maxRetriesOnStartup":     10,
   101  				"ledger.state.couchDBConfig.requestTimeout":          "30s",
   102  				"ledger.state.couchDBConfig.internalQueryLimit":      500,
   103  				"ledger.state.couchDBConfig.maxBatchUpdateSize":      600,
   104  				"ledger.state.couchDBConfig.warmIndexesAfterNBlocks": 5,
   105  				"ledger.state.couchDBConfig.createGlobalChangesDB":   true,
   106  				"ledger.state.couchDBConfig.cacheSize":               64,
   107  				"ledger.pvtdataStore.collElgProcMaxDbBatchSize":      50000,
   108  				"ledger.pvtdataStore.collElgProcDbBatchesInterval":   10000,
   109  				"ledger.pvtdataStore.purgeInterval":                  1000,
   110  				"ledger.history.enableHistoryDatabase":               true,
   111  			},
   112  			expected: &ledger.Config{
   113  				RootFSPath: "/peerfs/ledgersData",
   114  				StateDBConfig: &ledger.StateDBConfig{
   115  					StateDatabase: "CouchDB",
   116  					CouchDB: &couchdb.Config{
   117  						Address:                 "localhost:5984",
   118  						Username:                "username",
   119  						Password:                "password",
   120  						MaxRetries:              3,
   121  						MaxRetriesOnStartup:     10,
   122  						RequestTimeout:          30 * time.Second,
   123  						InternalQueryLimit:      500,
   124  						MaxBatchUpdateSize:      600,
   125  						WarmIndexesAfterNBlocks: 5,
   126  						CreateGlobalChangesDB:   true,
   127  						RedoLogPath:             "/peerfs/ledgersData/couchdbRedoLogs",
   128  						UserCacheSizeMBs:        64,
   129  					},
   130  				},
   131  				PrivateDataConfig: &ledger.PrivateDataConfig{
   132  					MaxBatchSize:    50000,
   133  					BatchesInterval: 10000,
   134  					PurgeInterval:   1000,
   135  				},
   136  				HistoryDBConfig: &ledger.HistoryDBConfig{
   137  					Enabled: true,
   138  				},
   139  			},
   140  		},
   141  	}
   142  
   143  	for _, test := range tests {
   144  		_test := test
   145  		t.Run(_test.name, func(t *testing.T) {
   146  			for k, v := range _test.config {
   147  				viper.Set(k, v)
   148  			}
   149  			conf := ledgerConfig()
   150  			assert.EqualValues(t, _test.expected, conf)
   151  		})
   152  	}
   153  }