github.com/0chain/gosdk@v1.17.11/core/conf/config_test.go (about)

     1  package conf
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/0chain/gosdk/core/conf/mocks"
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  func TestLoadConfig(t *testing.T) {
    11  
    12  	var mockDefaultReader = func() Reader {
    13  		reader := &mocks.Reader{}
    14  		reader.On("GetString", "block_worker").Return("http://127.0.0.1:9091/dns")
    15  		reader.On("GetString", "zauth.server").Return("http://127.0.0.1:8090/")
    16  		reader.On("GetInt", "min_submit").Return(0)
    17  		reader.On("GetInt", "min_confirmation").Return(0)
    18  		reader.On("GetInt", "max_txn_query").Return(0)
    19  		reader.On("GetInt", "query_sleep_time").Return(0)
    20  		reader.On("GetInt", "confirmation_chain_length").Return(0)
    21  		reader.On("GetStringSlice", "preferred_blobbers").Return(nil)
    22  		reader.On("GetString", "signature_scheme").Return("")
    23  		reader.On("GetString", "chain_id").Return("")
    24  		reader.On("GetString", "verify_optimistic").Return("true")
    25  		reader.On("GetInt", "sharder_consensous").Return(0)
    26  
    27  		return reader
    28  
    29  	}
    30  
    31  	tests := []struct {
    32  		name        string
    33  		exceptedErr error
    34  
    35  		setup func(*testing.T) Reader
    36  		run   func(*require.Assertions, Config)
    37  	}{
    38  		{
    39  			name:        "Test_Config_Invalid_BlockWorker",
    40  			exceptedErr: ErrInvalidValue,
    41  			setup: func(t *testing.T) Reader {
    42  
    43  				reader := &mocks.Reader{}
    44  				reader.On("GetString", "block_worker").Return("")
    45  				reader.On("GetString", "zauth.server").Return("")
    46  				reader.On("GetInt", "min_submit").Return(0)
    47  				reader.On("GetInt", "min_confirmation").Return(0)
    48  				reader.On("GetInt", "max_txn_query").Return(0)
    49  				reader.On("GetInt", "query_sleep_time").Return(0)
    50  				reader.On("GetInt", "confirmation_chain_length").Return(0)
    51  				reader.On("GetStringSlice", "preferred_blobbers").Return(nil)
    52  				reader.On("GetString", "signature_scheme").Return("")
    53  				reader.On("GetString", "chain_id").Return("")
    54  				reader.On("GetString", "verify_optimistic").Return("true")
    55  				reader.On("GetInt", "sharder_consensous").Return(0)
    56  
    57  				return reader
    58  			},
    59  			run: func(r *require.Assertions, cfg Config) {
    60  
    61  			},
    62  		},
    63  		{
    64  			name: "Test_Config_BlockWorker",
    65  
    66  			setup: func(t *testing.T) Reader {
    67  				return mockDefaultReader()
    68  			},
    69  			run: func(r *require.Assertions, cfg Config) {
    70  				r.Equal("http://127.0.0.1:9091/dns", cfg.BlockWorker)
    71  			},
    72  		},
    73  		{
    74  			name: "Test_Config_Min_Submit_Less_Than_1",
    75  
    76  			setup: func(t *testing.T) Reader {
    77  				return mockDefaultReader()
    78  			},
    79  			run: func(r *require.Assertions, cfg Config) {
    80  				r.Equal(10, cfg.MinSubmit)
    81  			},
    82  		},
    83  		{
    84  			name: "Test_Config_Min_Submit_Greater_Than_100",
    85  
    86  			setup: func(t *testing.T) Reader {
    87  
    88  				reader := &mocks.Reader{}
    89  				reader.On("GetString", "block_worker").Return("https://127.0.0.1:9091/dns")
    90  				reader.On("GetString", "zauth.server").Return("http://127.0.0.1:8090/")
    91  				reader.On("GetInt", "min_submit").Return(101)
    92  				reader.On("GetInt", "min_confirmation").Return(0)
    93  				reader.On("GetInt", "max_txn_query").Return(0)
    94  				reader.On("GetInt", "query_sleep_time").Return(0)
    95  				reader.On("GetInt", "confirmation_chain_length").Return(0)
    96  				reader.On("GetStringSlice", "preferred_blobbers").Return(nil)
    97  				reader.On("GetString", "signature_scheme").Return("")
    98  				reader.On("GetString", "chain_id").Return("")
    99  				reader.On("GetString", "verify_optimistic").Return("true")
   100  				reader.On("GetInt", "sharder_consensous").Return(0)
   101  
   102  				return reader
   103  			},
   104  			run: func(r *require.Assertions, cfg Config) {
   105  				r.Equal(100, cfg.MinSubmit)
   106  			},
   107  		},
   108  		{
   109  			name: "Test_Config_Min_Confirmation_Less_Than_1",
   110  
   111  			setup: func(t *testing.T) Reader {
   112  				return mockDefaultReader()
   113  			},
   114  			run: func(r *require.Assertions, cfg Config) {
   115  				r.Equal(10, cfg.MinConfirmation)
   116  			},
   117  		},
   118  		{
   119  			name: "Test_Config_Min_Confirmation_Greater_100",
   120  
   121  			setup: func(t *testing.T) Reader {
   122  
   123  				reader := &mocks.Reader{}
   124  				reader.On("GetString", "block_worker").Return("https://127.0.0.1:9091/dns")
   125  				reader.On("GetString", "zauth.server").Return("http://127.0.0.1:8090/")
   126  				reader.On("GetInt", "min_submit").Return(0)
   127  				reader.On("GetInt", "min_confirmation").Return(101)
   128  				reader.On("GetInt", "max_txn_query").Return(0)
   129  				reader.On("GetInt", "query_sleep_time").Return(0)
   130  				reader.On("GetInt", "confirmation_chain_length").Return(0)
   131  				reader.On("GetStringSlice", "preferred_blobbers").Return(nil)
   132  				reader.On("GetString", "signature_scheme").Return("")
   133  				reader.On("GetString", "chain_id").Return("")
   134  				reader.On("GetString", "verify_optimistic").Return("false")
   135  				reader.On("GetInt", "sharder_consensous").Return(0)
   136  
   137  				return reader
   138  			},
   139  			run: func(r *require.Assertions, cfg Config) {
   140  				r.Equal(100, cfg.MinConfirmation)
   141  			},
   142  		}, {
   143  			name: "Test_Config_Nax_Txn_Query_Less_Than_1",
   144  
   145  			setup: func(t *testing.T) Reader {
   146  
   147  				return mockDefaultReader()
   148  			},
   149  			run: func(r *require.Assertions, cfg Config) {
   150  				r.Equal(5, cfg.QuerySleepTime)
   151  			},
   152  		}, {
   153  			name: "Test_Config_Max_Txn_Query_Less_Than_1",
   154  
   155  			setup: func(t *testing.T) Reader {
   156  
   157  				return mockDefaultReader()
   158  			},
   159  			run: func(r *require.Assertions, cfg Config) {
   160  				r.Equal(5, cfg.MaxTxnQuery)
   161  			},
   162  		}, {
   163  			name: "Test_Config_Confirmation_Chain_Length_Less_Than_1",
   164  
   165  			setup: func(t *testing.T) Reader {
   166  				return mockDefaultReader()
   167  			},
   168  			run: func(r *require.Assertions, cfg Config) {
   169  				r.Equal(3, cfg.ConfirmationChainLength)
   170  			},
   171  		},
   172  	}
   173  	for _, tt := range tests {
   174  		t.Run(tt.name, func(t *testing.T) {
   175  
   176  			require := require.New(t)
   177  
   178  			reader := tt.setup(t)
   179  
   180  			cfg, err := LoadConfig(reader)
   181  
   182  			// test it by predefined error variable instead of error message
   183  			if tt.exceptedErr != nil {
   184  				require.ErrorIs(err, tt.exceptedErr)
   185  			} else {
   186  				require.Equal(nil, err)
   187  			}
   188  
   189  			if tt.run != nil {
   190  				tt.run(require, cfg)
   191  			}
   192  
   193  		})
   194  	}
   195  }