github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/swarm/storage/mru/update_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 16 const serializedUpdateHex = "0x490034004f000000da070000fb0ed7efa696bdb0b54cd75554cc3117ffc891454317df7dd6fefad978e2f2fbf74a10ce8f26ffc8bfaa07c3031a34b2c61f517955e7deb1592daccf96c69cf000456c20717565206c6565206d7563686f207920616e6461206d7563686f2c207665206d7563686f20792073616265206d7563686f" 17 const serializedUpdateMultihashHex = "0x490022004f000000da070000fb0ed7efa696bdb0b54cd75554cc3117ffc891454317df7dd6fefad978e2f2fbf74a10ce8f26ffc8bfaa07c3031a34b2c61f517955e7deb1592daccf96c69cf0011b200102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1c1e1f20" 18 19 func getTestResourceUpdate() *resourceUpdate { 20 return &resourceUpdate{ 21 updateHeader: *getTestUpdateHeader(false), 22 data: []byte("El que lee mucho y anda mucho, ve mucho y sabe mucho"), 23 } 24 } 25 26 func getTestResourceUpdateMultihash() *resourceUpdate { 27 return &resourceUpdate{ 28 updateHeader: *getTestUpdateHeader(true), 29 data: []byte{0x1b, 0x20, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 28, 30, 31, 32}, 30 } 31 } 32 33 func compareResourceUpdate(a, b *resourceUpdate) bool { 34 return compareUpdateHeader(&a.updateHeader, &b.updateHeader) && 35 bytes.Equal(a.data, b.data) 36 } 37 38 func TestResourceUpdateSerializer(t *testing.T) { 39 var serializedUpdateLength = len(serializedUpdateHex)/2 - 1 // 40 update := getTestResourceUpdate() 41 serializedUpdate := make([]byte, serializedUpdateLength) 42 if err := update.binaryPut(serializedUpdate); err != nil { 43 t.Fatal(err) 44 } 45 compareByteSliceToExpectedHex(t, "serializedUpdate", serializedUpdate, serializedUpdateHex) 46 47 // 48 update.data = nil 49 if err := update.binaryPut(serializedUpdate); err == nil { 50 t.Fatal("Expected resourceUpdate.binaryPut to fail since update does not contain data") 51 } 52 53 // 54 update.data = make([]byte, 10000) 55 if err := update.binaryPut(serializedUpdate); err == nil { 56 t.Fatal("Expected resourceUpdate.binaryPut to fail since update is too big") 57 } 58 59 // 60 update.data = make([]byte, 1) 61 if err := update.binaryPut(serializedUpdate); err == nil { 62 t.Fatal("Expected resourceUpdate.binaryPut to fail since passed slice is not of the appropriate size") 63 } 64 65 // 66 var serializedUpdateMultihashLength = len(serializedUpdateMultihashHex)/2 - 1 // 67 update = getTestResourceUpdateMultihash() 68 serializedUpdate = make([]byte, serializedUpdateMultihashLength) 69 if err := update.binaryPut(serializedUpdate); err != nil { 70 t.Fatal(err) 71 } 72 compareByteSliceToExpectedHex(t, "serializedUpdate", serializedUpdate, serializedUpdateMultihashHex) 73 74 // 75 update.data[1] = 79 76 if err := update.binaryPut(serializedUpdate); err == nil { 77 t.Fatal("Expected resourceUpdate.binaryPut to fail since data contains an invalid multihash") 78 } 79 80 }