forked from mirror/go-ethereum
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.1 KiB
65 lines
2.1 KiB
6 years ago
|
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")
|
||
|
}
|
||
|
|
||
|
}
|