aboutsummaryrefslogtreecommitdiffstats
path: root/swarm/storage/mru/updateheader_test.go
blob: b1f505989256813bc367363437a76ce65e8fa873 (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
package mru

import (
    "bytes"
    "testing"

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

const serializedUpdateHeaderMultihashHex = "0x4f000000da070000fb0ed7efa696bdb0b54cd75554cc3117ffc891454317df7dd6fefad978e2f2fbf74a10ce8f26ffc8bfaa07c3031a34b2c61f517955e7deb1592daccf96c69cf001"

func getTestUpdateHeader(multihash bool) (header *updateHeader) {
    _, metaHash, _, _ := getTestMetadata().serializeAndHash()
    return &updateHeader{
        UpdateLookup: *getTestUpdateLookup(),
        multihash:    multihash,
        metaHash:     metaHash,
    }
}

func compareUpdateHeader(a, b *updateHeader) bool {
    return compareUpdateLookup(&a.UpdateLookup, &b.UpdateLookup) &&
        a.multihash == b.multihash &&
        bytes.Equal(a.metaHash, b.metaHash)
}

func TestUpdateHeaderSerializer(t *testing.T) {
    header := getTestUpdateHeader(true)
    serializedHeader := make([]byte, updateHeaderLength)
    if err := header.binaryPut(serializedHeader); err != nil {
        t.Fatal(err)
    }
    compareByteSliceToExpectedHex(t, "serializedHeader", serializedHeader, serializedUpdateHeaderMultihashHex)

    // trigger incorrect slice length error passing a slice that is 1 byte too big
    if err := header.binaryPut(make([]byte, updateHeaderLength+1)); err == nil {
        t.Fatal("Expected updateHeader.binaryPut to fail since supplied slice is of incorrect length")
    }

    // trigger invalid metaHash error
    header.metaHash = nil
    if err := header.binaryPut(serializedHeader); err == nil {
        t.Fatal("Expected updateHeader.binaryPut to fail metaHash is of incorrect length")
    }
}

func TestUpdateHeaderDeserializer(t *testing.T) {
    originalUpdate := getTestUpdateHeader(true)
    serializedData, _ := hexutil.Decode(serializedUpdateHeaderMultihashHex)
    var retrievedUpdate updateHeader
    if err := retrievedUpdate.binaryGet(serializedData); err != nil {
        t.Fatal(err)
    }
    if !compareUpdateHeader(originalUpdate, &retrievedUpdate) {
        t.Fatalf("Expected deserialized structure to equal the original")
    }

    // mess with source slice to test length checks
    serializedData = []byte{1, 2, 3}
    if err := retrievedUpdate.binaryGet(serializedData); err == nil {
        t.Fatal("Expected retrievedUpdate.binaryGet, since passed slice is too small")
    }

}