github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/swarm/storage/mru/lookup_test.go (about)

     1  
     2  //此源码被清华学神尹成大魔王专业翻译分析并修改
     3  //尹成QQ77025077
     4  //尹成微信18510341407
     5  //尹成所在QQ群721929980
     6  //尹成邮箱 yinc13@mails.tsinghua.edu.cn
     7  //尹成毕业于清华大学,微软区块链领域全球最有价值专家
     8  //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620
     9  package mru
    10  
    11  import (
    12  	"bytes"
    13  	"testing"
    14  
    15  	"github.com/ethereum/go-ethereum/common/hexutil"
    16  )
    17  
    18  func getTestUpdateLookup() *UpdateLookup {
    19  	metadata := *getTestMetadata()
    20  	rootAddr, _, _, _ := metadata.serializeAndHash()
    21  	return &UpdateLookup{
    22  		period:   79,
    23  		version:  2010,
    24  		rootAddr: rootAddr,
    25  	}
    26  }
    27  
    28  func compareUpdateLookup(a, b *UpdateLookup) bool {
    29  	return a.version == b.version &&
    30  		a.period == b.period &&
    31  		bytes.Equal(a.rootAddr, b.rootAddr)
    32  }
    33  
    34  func TestUpdateLookupUpdateAddr(t *testing.T) {
    35  	ul := getTestUpdateLookup()
    36  	updateAddr := ul.UpdateAddr()
    37  	compareByteSliceToExpectedHex(t, "updateAddr", updateAddr, "0x8fbc8d4777ef6da790257eda80ab4321fabd08cbdbe67e4e3da6caca386d64e0")
    38  }
    39  
    40  func TestUpdateLookupSerializer(t *testing.T) {
    41  	serializedUpdateLookup := make([]byte, updateLookupLength)
    42  	ul := getTestUpdateLookup()
    43  	if err := ul.binaryPut(serializedUpdateLookup); err != nil {
    44  		t.Fatal(err)
    45  	}
    46  	compareByteSliceToExpectedHex(t, "serializedUpdateLookup", serializedUpdateLookup, "0x4f000000da070000fb0ed7efa696bdb0b54cd75554cc3117ffc891454317df7dd6fefad978e2f2fb")
    47  
    48  //
    49  	serializedUpdateLookup = make([]byte, updateLookupLength+7)
    50  	if err := ul.binaryPut(serializedUpdateLookup); err == nil {
    51  		t.Fatalf("Expected UpdateLookup.binaryPut to fail when receiving slice has a length != %d", updateLookupLength)
    52  	}
    53  
    54  //
    55  	ul.rootAddr = []byte{1, 2, 3, 4}
    56  	serializedUpdateLookup = make([]byte, updateLookupLength)
    57  	if err := ul.binaryPut(serializedUpdateLookup); err == nil {
    58  		t.Fatal("Expected UpdateLookup.binaryPut to fail when rootAddr is not of the correct size")
    59  	}
    60  }
    61  
    62  func TestUpdateLookupDeserializer(t *testing.T) {
    63  	serializedUpdateLookup, _ := hexutil.Decode("0x4f000000da070000fb0ed7efa696bdb0b54cd75554cc3117ffc891454317df7dd6fefad978e2f2fb")
    64  	var recoveredUpdateLookup UpdateLookup
    65  	if err := recoveredUpdateLookup.binaryGet(serializedUpdateLookup); err != nil {
    66  		t.Fatal(err)
    67  	}
    68  	originalUpdateLookup := *getTestUpdateLookup()
    69  	if !compareUpdateLookup(&originalUpdateLookup, &recoveredUpdateLookup) {
    70  		t.Fatalf("Expected recovered UpdateLookup to match")
    71  	}
    72  
    73  //
    74  	serializedUpdateLookup = make([]byte, updateLookupLength+4)
    75  	if err := recoveredUpdateLookup.binaryGet(serializedUpdateLookup); err == nil {
    76  		t.Fatalf("Expected UpdateLookup.binaryGet to fail when source slice has a length != %d", updateLookupLength)
    77  	}
    78  }
    79  
    80  func TestUpdateLookupSerializeDeserialize(t *testing.T) {
    81  	serializedUpdateLookup := make([]byte, updateLookupLength)
    82  	originalUpdateLookup := getTestUpdateLookup()
    83  	if err := originalUpdateLookup.binaryPut(serializedUpdateLookup); err != nil {
    84  		t.Fatal(err)
    85  	}
    86  	var recoveredUpdateLookup UpdateLookup
    87  	if err := recoveredUpdateLookup.binaryGet(serializedUpdateLookup); err != nil {
    88  		t.Fatal(err)
    89  	}
    90  	if !compareUpdateLookup(originalUpdateLookup, &recoveredUpdateLookup) {
    91  		t.Fatalf("Expected recovered UpdateLookup to match")
    92  	}
    93  }