status-go/waku/v0/status_options_test.go

112 lines
2.8 KiB
Go

package v0
import (
"math"
"testing"
"github.com/stretchr/testify/require"
"github.com/ethereum/go-ethereum/rlp"
"github.com/status-im/status-go/waku/common"
)
func TestEncodeDecodeRLP(t *testing.T) {
pow := math.Float64bits(6.02)
lightNodeEnabled := true
confirmationsEnabled := true
opts := StatusOptions{
PoWRequirement: &pow,
BloomFilter: common.TopicType{0xaa, 0xbb, 0xcc, 0xdd}.ToBloom(),
LightNodeEnabled: &lightNodeEnabled,
ConfirmationsEnabled: &confirmationsEnabled,
RateLimits: &common.RateLimits{
IPLimits: 10,
PeerIDLimits: 5,
TopicLimits: 1,
},
TopicInterest: []common.TopicType{{0x01}, {0x02}, {0x03}, {0x04}},
}
data, err := rlp.EncodeToBytes(opts)
require.NoError(t, err)
var optsDecoded StatusOptions
err = rlp.DecodeBytes(data, &optsDecoded)
require.NoError(t, err)
require.EqualValues(t, opts, optsDecoded)
}
func TestBackwardCompatibility(t *testing.T) {
alist := []interface{}{
[]interface{}{"0", math.Float64bits(2.05)},
}
data, err := rlp.EncodeToBytes(alist)
require.NoError(t, err)
var optsDecoded StatusOptions
err = rlp.DecodeBytes(data, &optsDecoded)
require.NoError(t, err)
pow := math.Float64bits(2.05)
require.EqualValues(t, StatusOptions{PoWRequirement: &pow}, optsDecoded)
}
func TestForwardCompatibility(t *testing.T) {
pow := math.Float64bits(2.05)
alist := []interface{}{
[]interface{}{"0", pow},
[]interface{}{"99", uint(10)}, // some future option
}
data, err := rlp.EncodeToBytes(alist)
require.NoError(t, err)
var optsDecoded StatusOptions
err = rlp.DecodeBytes(data, &optsDecoded)
require.NoError(t, err)
require.EqualValues(t, StatusOptions{PoWRequirement: &pow}, optsDecoded)
}
func TestInitRLPKeyFields(t *testing.T) {
ifk := map[int]statusOptionKey{
0: "0",
1: "1",
2: "2",
3: "3",
4: "4",
5: "5",
}
kfi := map[statusOptionKey]int{
"0": 0,
"1": 1,
"2": 2,
"3": 3,
"4": 4,
"5": 5,
}
// Test that the kfi length matches the inited global keyFieldIdx length
require.Equal(t, len(kfi), len(keyFieldIdx))
// Test that each index of the kfi values matches the inited global keyFieldIdx of the same index
for k, v := range kfi {
require.Exactly(t, v, keyFieldIdx[k])
}
// Test that each index of the inited global keyFieldIdx values matches kfi values of the same index
for k, v := range keyFieldIdx {
require.Exactly(t, v, kfi[k])
}
// Test that the ifk length matches the inited global idxFieldKey length
require.Equal(t, len(ifk), len(idxFieldKey))
// Test that each index of the ifk values matches the inited global idxFieldKey of the same index
for k, v := range ifk {
require.Exactly(t, v, idxFieldKey[k])
}
// Test that each index of the inited global idxFieldKey values matches ifk values of the same index
for k, v := range idxFieldKey {
require.Exactly(t, v, ifk[k])
}
}