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  }