github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/swarm/storage/mru/lookup_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  //</624342683149668352>
    11  
    12  package mru
    13  
    14  import (
    15  	"bytes"
    16  	"testing"
    17  
    18  	"github.com/ethereum/go-ethereum/common/hexutil"
    19  )
    20  
    21  func getTestUpdateLookup() *UpdateLookup {
    22  	metadata := *getTestMetadata()
    23  	rootAddr, _, _, _ := metadata.serializeAndHash()
    24  	return &UpdateLookup{
    25  		period:   79,
    26  		version:  2010,
    27  		rootAddr: rootAddr,
    28  	}
    29  }
    30  
    31  func compareUpdateLookup(a, b *UpdateLookup) bool {
    32  	return a.version == b.version &&
    33  		a.period == b.period &&
    34  		bytes.Equal(a.rootAddr, b.rootAddr)
    35  }
    36  
    37  func TestUpdateLookupUpdateAddr(t *testing.T) {
    38  	ul := getTestUpdateLookup()
    39  	updateAddr := ul.UpdateAddr()
    40  	compareByteSliceToExpectedHex(t, "updateAddr", updateAddr, "0x8fbc8d4777ef6da790257eda80ab4321fabd08cbdbe67e4e3da6caca386d64e0")
    41  }
    42  
    43  func TestUpdateLookupSerializer(t *testing.T) {
    44  	serializedUpdateLookup := make([]byte, updateLookupLength)
    45  	ul := getTestUpdateLookup()
    46  	if err := ul.binaryPut(serializedUpdateLookup); err != nil {
    47  		t.Fatal(err)
    48  	}
    49  	compareByteSliceToExpectedHex(t, "serializedUpdateLookup", serializedUpdateLookup, "0x4f000000da070000fb0ed7efa696bdb0b54cd75554cc3117ffc891454317df7dd6fefad978e2f2fb")
    50  
    51  //
    52  	serializedUpdateLookup = make([]byte, updateLookupLength+7)
    53  	if err := ul.binaryPut(serializedUpdateLookup); err == nil {
    54  		t.Fatalf("Expected UpdateLookup.binaryPut to fail when receiving slice has a length != %d", updateLookupLength)
    55  	}
    56  
    57  //
    58  	ul.rootAddr = []byte{1, 2, 3, 4}
    59  	serializedUpdateLookup = make([]byte, updateLookupLength)
    60  	if err := ul.binaryPut(serializedUpdateLookup); err == nil {
    61  		t.Fatal("Expected UpdateLookup.binaryPut to fail when rootAddr is not of the correct size")
    62  	}
    63  }
    64  
    65  func TestUpdateLookupDeserializer(t *testing.T) {
    66  	serializedUpdateLookup, _ := hexutil.Decode("0x4f000000da070000fb0ed7efa696bdb0b54cd75554cc3117ffc891454317df7dd6fefad978e2f2fb")
    67  	var recoveredUpdateLookup UpdateLookup
    68  	if err := recoveredUpdateLookup.binaryGet(serializedUpdateLookup); err != nil {
    69  		t.Fatal(err)
    70  	}
    71  	originalUpdateLookup := *getTestUpdateLookup()
    72  	if !compareUpdateLookup(&originalUpdateLookup, &recoveredUpdateLookup) {
    73  		t.Fatalf("Expected recovered UpdateLookup to match")
    74  	}
    75  
    76  //
    77  	serializedUpdateLookup = make([]byte, updateLookupLength+4)
    78  	if err := recoveredUpdateLookup.binaryGet(serializedUpdateLookup); err == nil {
    79  		t.Fatalf("Expected UpdateLookup.binaryGet to fail when source slice has a length != %d", updateLookupLength)
    80  	}
    81  }
    82  
    83  func TestUpdateLookupSerializeDeserialize(t *testing.T) {
    84  	serializedUpdateLookup := make([]byte, updateLookupLength)
    85  	originalUpdateLookup := getTestUpdateLookup()
    86  	if err := originalUpdateLookup.binaryPut(serializedUpdateLookup); err != nil {
    87  		t.Fatal(err)
    88  	}
    89  	var recoveredUpdateLookup UpdateLookup
    90  	if err := recoveredUpdateLookup.binaryGet(serializedUpdateLookup); err != nil {
    91  		t.Fatal(err)
    92  	}
    93  	if !compareUpdateLookup(originalUpdateLookup, &recoveredUpdateLookup) {
    94  		t.Fatalf("Expected recovered UpdateLookup to match")
    95  	}
    96  }
    97