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 }