git.frostfs.info/TrueCloudLab/frostfs-sdk-go@v0.0.0-20241022124111-5361f0ecebd3/netmap/network_info_test.go (about)

     1  package netmap_test
     2  
     3  import (
     4  	"encoding/binary"
     5  	"testing"
     6  
     7  	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
     8  	. "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func TestNetworkInfo_CurrentEpoch(t *testing.T) {
    13  	var x NetworkInfo
    14  
    15  	require.Zero(t, x.CurrentEpoch())
    16  
    17  	const e = 13
    18  
    19  	x.SetCurrentEpoch(e)
    20  
    21  	require.EqualValues(t, e, x.CurrentEpoch())
    22  
    23  	var m netmap.NetworkInfo
    24  	x.WriteToV2(&m)
    25  
    26  	require.EqualValues(t, e, m.GetCurrentEpoch())
    27  }
    28  
    29  func TestNetworkInfo_MagicNumber(t *testing.T) {
    30  	var x NetworkInfo
    31  
    32  	require.Zero(t, x.MagicNumber())
    33  
    34  	const magic = 321
    35  
    36  	x.SetMagicNumber(magic)
    37  
    38  	require.EqualValues(t, magic, x.MagicNumber())
    39  
    40  	var m netmap.NetworkInfo
    41  	x.WriteToV2(&m)
    42  
    43  	require.EqualValues(t, magic, m.GetMagicNumber())
    44  }
    45  
    46  func TestNetworkInfo_MsPerBlock(t *testing.T) {
    47  	var x NetworkInfo
    48  
    49  	require.Zero(t, x.MsPerBlock())
    50  
    51  	const ms = 789
    52  
    53  	x.SetMsPerBlock(ms)
    54  
    55  	require.EqualValues(t, ms, x.MsPerBlock())
    56  
    57  	var m netmap.NetworkInfo
    58  	x.WriteToV2(&m)
    59  
    60  	require.EqualValues(t, ms, m.GetMsPerBlock())
    61  }
    62  
    63  func testConfigValue(t *testing.T,
    64  	getter func(x NetworkInfo) any,
    65  	setter func(x *NetworkInfo, val any),
    66  	val1, val2 any,
    67  	v2Key string, v2Val func(val any) []byte,
    68  ) {
    69  	var x NetworkInfo
    70  
    71  	require.Zero(t, getter(x))
    72  
    73  	checkVal := func(exp any) {
    74  		require.EqualValues(t, exp, getter(x))
    75  
    76  		var m netmap.NetworkInfo
    77  		x.WriteToV2(&m)
    78  
    79  		require.EqualValues(t, 1, m.GetNetworkConfig().NumberOfParameters())
    80  		found := false
    81  		m.GetNetworkConfig().IterateParameters(func(prm *netmap.NetworkParameter) bool {
    82  			require.False(t, found)
    83  			require.Equal(t, []byte(v2Key), prm.GetKey())
    84  			require.Equal(t, v2Val(exp), prm.GetValue())
    85  			found = true
    86  			return false
    87  		})
    88  		require.True(t, found)
    89  	}
    90  
    91  	setter(&x, val1)
    92  	checkVal(val1)
    93  
    94  	setter(&x, val2)
    95  	checkVal(val2)
    96  }
    97  
    98  func TestNetworkInfo_AuditFee(t *testing.T) {
    99  	testConfigValue(t,
   100  		func(x NetworkInfo) any { return x.AuditFee() },
   101  		func(info *NetworkInfo, val any) { info.SetAuditFee(val.(uint64)) },
   102  		uint64(1), uint64(2),
   103  		"AuditFee", func(val any) []byte {
   104  			data := make([]byte, 8)
   105  			binary.LittleEndian.PutUint64(data, val.(uint64))
   106  			return data
   107  		},
   108  	)
   109  }
   110  
   111  func TestNetworkInfo_StoragePrice(t *testing.T) {
   112  	testConfigValue(t,
   113  		func(x NetworkInfo) any { return x.StoragePrice() },
   114  		func(info *NetworkInfo, val any) { info.SetStoragePrice(val.(uint64)) },
   115  		uint64(1), uint64(2),
   116  		"BasicIncomeRate", func(val any) []byte {
   117  			data := make([]byte, 8)
   118  			binary.LittleEndian.PutUint64(data, val.(uint64))
   119  			return data
   120  		},
   121  	)
   122  }
   123  
   124  func TestNetworkInfo_ContainerFee(t *testing.T) {
   125  	testConfigValue(t,
   126  		func(x NetworkInfo) any { return x.ContainerFee() },
   127  		func(info *NetworkInfo, val any) { info.SetContainerFee(val.(uint64)) },
   128  		uint64(1), uint64(2),
   129  		"ContainerFee", func(val any) []byte {
   130  			data := make([]byte, 8)
   131  			binary.LittleEndian.PutUint64(data, val.(uint64))
   132  			return data
   133  		},
   134  	)
   135  }
   136  
   137  func TestNetworkInfo_NamedContainerFee(t *testing.T) {
   138  	testConfigValue(t,
   139  		func(x NetworkInfo) any { return x.NamedContainerFee() },
   140  		func(info *NetworkInfo, val any) { info.SetNamedContainerFee(val.(uint64)) },
   141  		uint64(1), uint64(2),
   142  		"ContainerAliasFee", func(val any) []byte {
   143  			data := make([]byte, 8)
   144  			binary.LittleEndian.PutUint64(data, val.(uint64))
   145  			return data
   146  		},
   147  	)
   148  }
   149  
   150  func TestNetworkInfo_IRCandidateFee(t *testing.T) {
   151  	testConfigValue(t,
   152  		func(x NetworkInfo) any { return x.IRCandidateFee() },
   153  		func(info *NetworkInfo, val any) { info.SetIRCandidateFee(val.(uint64)) },
   154  		uint64(1), uint64(2),
   155  		"InnerRingCandidateFee", func(val any) []byte {
   156  			data := make([]byte, 8)
   157  			binary.LittleEndian.PutUint64(data, val.(uint64))
   158  			return data
   159  		},
   160  	)
   161  }
   162  
   163  func TestNetworkInfo_MaxObjectSize(t *testing.T) {
   164  	testConfigValue(t,
   165  		func(x NetworkInfo) any { return x.MaxObjectSize() },
   166  		func(info *NetworkInfo, val any) { info.SetMaxObjectSize(val.(uint64)) },
   167  		uint64(1), uint64(2),
   168  		"MaxObjectSize", func(val any) []byte {
   169  			data := make([]byte, 8)
   170  			binary.LittleEndian.PutUint64(data, val.(uint64))
   171  			return data
   172  		},
   173  	)
   174  }
   175  
   176  func TestNetworkInfo_MaxECDataCount(t *testing.T) {
   177  	testConfigValue(t,
   178  		func(x NetworkInfo) any { return x.MaxECDataCount() },
   179  		func(info *NetworkInfo, val any) { info.SetMaxECDataCount(val.(uint64)) },
   180  		uint64(1), uint64(2),
   181  		"MaxECDataCount", func(val any) []byte {
   182  			data := make([]byte, 8)
   183  			binary.LittleEndian.PutUint64(data, val.(uint64))
   184  			return data
   185  		},
   186  	)
   187  }
   188  
   189  func TestNetworkInfo_MaxECParityCount(t *testing.T) {
   190  	testConfigValue(t,
   191  		func(x NetworkInfo) any { return x.MaxECParityCount() },
   192  		func(info *NetworkInfo, val any) { info.SetMaxECParityCount(val.(uint64)) },
   193  		uint64(1), uint64(2),
   194  		"MaxECParityCount", func(val any) []byte {
   195  			data := make([]byte, 8)
   196  			binary.LittleEndian.PutUint64(data, val.(uint64))
   197  			return data
   198  		},
   199  	)
   200  }
   201  
   202  func TestNetworkInfo_WithdrawalFee(t *testing.T) {
   203  	testConfigValue(t,
   204  		func(x NetworkInfo) any { return x.WithdrawalFee() },
   205  		func(info *NetworkInfo, val any) { info.SetWithdrawalFee(val.(uint64)) },
   206  		uint64(1), uint64(2),
   207  		"WithdrawFee", func(val any) []byte {
   208  			data := make([]byte, 8)
   209  			binary.LittleEndian.PutUint64(data, val.(uint64))
   210  			return data
   211  		},
   212  	)
   213  }
   214  
   215  func TestNetworkInfo_HomomorphicHashingDisabled(t *testing.T) {
   216  	testConfigValue(t,
   217  		func(x NetworkInfo) any { return x.HomomorphicHashingDisabled() },
   218  		func(info *NetworkInfo, val any) {
   219  			if val.(bool) {
   220  				info.DisableHomomorphicHashing()
   221  			}
   222  		},
   223  		true, true, // it is impossible to enable hashing
   224  		"HomomorphicHashingDisabled", func(val any) []byte {
   225  			data := make([]byte, 1)
   226  
   227  			if val.(bool) {
   228  				data[0] = 1
   229  			}
   230  
   231  			return data
   232  		},
   233  	)
   234  }
   235  
   236  func TestNetworkInfo_MaintenanceModeAllowed(t *testing.T) {
   237  	testConfigValue(t,
   238  		func(x NetworkInfo) any { return x.MaintenanceModeAllowed() },
   239  		func(info *NetworkInfo, val any) {
   240  			if val.(bool) {
   241  				info.AllowMaintenanceMode()
   242  			}
   243  		},
   244  		true, true,
   245  		"MaintenanceModeAllowed", func(val any) []byte {
   246  			if val.(bool) {
   247  				return []byte{1}
   248  			}
   249  			return []byte{0}
   250  		},
   251  	)
   252  }