status-im/status-go

View on GitHub
waku/v1/status_options_test.go

Summary

Maintainability
A
0 mins
Test Coverage
package v1

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,
        PacketRateLimits: &common.RateLimits{
            IPLimits:     10,
            PeerIDLimits: 5,
            TopicLimits:  1,
        },
        TopicInterest: []common.TopicType{{0x01}, {0x02}, {0x03}, {0x04}},
        BytesRateLimits: &common.RateLimits{
            IPLimits:     10,
            PeerIDLimits: 5,
            TopicLimits:  1,
        },
    }
    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{}{uint64(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{}{uint64(0), pow},
        []interface{}{uint64(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,
        6: 6,
    }
    kfi := map[statusOptionKey]int{
        0: 0,
        1: 1,
        2: 2,
        3: 3,
        4: 4,
        5: 5,
        6: 6,
    }

    // 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])
    }
}