aboutsummaryrefslogtreecommitdiffstats
path: root/swarm/storage/mru/lookup_test.go
blob: b66b200a36d7d0aea43844b621e284da7c315b24 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package mru

import (
    "bytes"
    "testing"

    "github.com/ethereum/go-ethereum/common/hexutil"
)

func getTestUpdateLookup() *UpdateLookup {
    metadata := *getTestMetadata()
    rootAddr, _, _, _ := metadata.serializeAndHash()
    return &UpdateLookup{
        period:   79,
        version:  2010,
        rootAddr: rootAddr,
    }
}

func compareUpdateLookup(a, b *UpdateLookup) bool {
    return a.version == b.version &&
        a.period == b.period &&
        bytes.Equal(a.rootAddr, b.rootAddr)
}

func TestUpdateLookupUpdateAddr(t *testing.T) {
    ul := getTestUpdateLookup()
    updateAddr := ul.UpdateAddr()
    compareByteSliceToExpectedHex(t, "updateAddr", updateAddr, "0x8fbc8d4777ef6da790257eda80ab4321fabd08cbdbe67e4e3da6caca386d64e0")
}

func TestUpdateLookupSerializer(t *testing.T) {
    serializedUpdateLookup := make([]byte, updateLookupLength)
    ul := getTestUpdateLookup()
    if err := ul.binaryPut(serializedUpdateLookup); err != nil {
        t.Fatal(err)
    }
    compareByteSliceToExpectedHex(t, "serializedUpdateLookup", serializedUpdateLookup, "0x4f000000da070000fb0ed7efa696bdb0b54cd75554cc3117ffc891454317df7dd6fefad978e2f2fb")

    // set receiving slice to the wrong size
    serializedUpdateLookup = make([]byte, updateLookupLength+7)
    if err := ul.binaryPut(serializedUpdateLookup); err == nil {
        t.Fatalf("Expected UpdateLookup.binaryPut to fail when receiving slice has a length != %d", updateLookupLength)
    }

    // set rootAddr to an invalid length
    ul.rootAddr = []byte{1, 2, 3, 4}
    serializedUpdateLookup = make([]byte, updateLookupLength)
    if err := ul.binaryPut(serializedUpdateLookup); err == nil {
        t.Fatal("Expected UpdateLookup.binaryPut to fail when rootAddr is not of the correct size")
    }
}

func TestUpdateLookupDeserializer(t *testing.T) {
    serializedUpdateLookup, _ := hexutil.Decode("0x4f000000da070000fb0ed7efa696bdb0b54cd75554cc3117ffc891454317df7dd6fefad978e2f2fb")
    var recoveredUpdateLookup UpdateLookup
    if err := recoveredUpdateLookup.binaryGet(serializedUpdateLookup); err != nil {
        t.Fatal(err)
    }
    originalUpdateLookup := *getTestUpdateLookup()
    if !compareUpdateLookup(&originalUpdateLookup, &recoveredUpdateLookup) {
        t.Fatalf("Expected recovered UpdateLookup to match")
    }

    // set source slice to the wrong size
    serializedUpdateLookup = make([]byte, updateLookupLength+4)
    if err := recoveredUpdateLookup.binaryGet(serializedUpdateLookup); err == nil {
        t.Fatalf("Expected UpdateLookup.binaryGet to fail when source slice has a length != %d", updateLookupLength)
    }
}

func TestUpdateLookupSerializeDeserialize(t *testing.T) {
    serializedUpdateLookup := make([]byte, updateLookupLength)
    originalUpdateLookup := getTestUpdateLookup()
    if err := originalUpdateLookup.binaryPut(serializedUpdateLookup); err != nil {
        t.Fatal(err)
    }
    var recoveredUpdateLookup UpdateLookup
    if err := recoveredUpdateLookup.binaryGet(serializedUpdateLookup); err != nil {
        t.Fatal(err)
    }
    if !compareUpdateLookup(originalUpdateLookup, &recoveredUpdateLookup) {
        t.Fatalf("Expected recovered UpdateLookup to match")
    }
}