github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/swarm/storage/mru/updateheader_test.go (about)

     1  
     2  //<developer>
     3  //    <name>linapex 曹一峰</name>
     4  //    <email>linapex@163.com</email>
     5  //    <wx>superexc</wx>
     6  //    <qqgroup>128148617</qqgroup>
     7  //    <url>https://jsq.ink</url>
     8  //    <role>pku engineer</role>
     9  //    <date>2019-03-16 12:09:50</date>
    10  //</624342684076609536>
    11  
    12  package mru
    13  
    14  import (
    15  	"bytes"
    16  	"testing"
    17  
    18  	"github.com/ethereum/go-ethereum/common/hexutil"
    19  )
    20  
    21  const serializedUpdateHeaderMultihashHex = "0x4f000000da070000fb0ed7efa696bdb0b54cd75554cc3117ffc891454317df7dd6fefad978e2f2fbf74a10ce8f26ffc8bfaa07c3031a34b2c61f517955e7deb1592daccf96c69cf001"
    22  
    23  func getTestUpdateHeader(multihash bool) (header *updateHeader) {
    24  	_, metaHash, _, _ := getTestMetadata().serializeAndHash()
    25  	return &updateHeader{
    26  		UpdateLookup: *getTestUpdateLookup(),
    27  		multihash:    multihash,
    28  		metaHash:     metaHash,
    29  	}
    30  }
    31  
    32  func compareUpdateHeader(a, b *updateHeader) bool {
    33  	return compareUpdateLookup(&a.UpdateLookup, &b.UpdateLookup) &&
    34  		a.multihash == b.multihash &&
    35  		bytes.Equal(a.metaHash, b.metaHash)
    36  }
    37  
    38  func TestUpdateHeaderSerializer(t *testing.T) {
    39  	header := getTestUpdateHeader(true)
    40  	serializedHeader := make([]byte, updateHeaderLength)
    41  	if err := header.binaryPut(serializedHeader); err != nil {
    42  		t.Fatal(err)
    43  	}
    44  	compareByteSliceToExpectedHex(t, "serializedHeader", serializedHeader, serializedUpdateHeaderMultihashHex)
    45  
    46  //
    47  	if err := header.binaryPut(make([]byte, updateHeaderLength+1)); err == nil {
    48  		t.Fatal("Expected updateHeader.binaryPut to fail since supplied slice is of incorrect length")
    49  	}
    50  
    51  //
    52  	header.metaHash = nil
    53  	if err := header.binaryPut(serializedHeader); err == nil {
    54  		t.Fatal("Expected updateHeader.binaryPut to fail metaHash is of incorrect length")
    55  	}
    56  }
    57  
    58  func TestUpdateHeaderDeserializer(t *testing.T) {
    59  	originalUpdate := getTestUpdateHeader(true)
    60  	serializedData, _ := hexutil.Decode(serializedUpdateHeaderMultihashHex)
    61  	var retrievedUpdate updateHeader
    62  	if err := retrievedUpdate.binaryGet(serializedData); err != nil {
    63  		t.Fatal(err)
    64  	}
    65  	if !compareUpdateHeader(originalUpdate, &retrievedUpdate) {
    66  		t.Fatalf("Expected deserialized structure to equal the original")
    67  	}
    68  
    69  //
    70  	serializedData = []byte{1, 2, 3}
    71  	if err := retrievedUpdate.binaryGet(serializedData); err == nil {
    72  		t.Fatal("Expected retrievedUpdate.binaryGet, since passed slice is too small")
    73  	}
    74  
    75  }
    76