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