github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/swarm/storage/mru/metadata_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 // 10 // 11 // 12 // 13 // 14 // 15 // 16 // 17 // 18 // 19 // 20 // 21 // 22 // 23 // 24 package mru 25 26 import ( 27 "testing" 28 29 "github.com/ethereum/go-ethereum/common/hexutil" 30 ) 31 32 func compareByteSliceToExpectedHex(t *testing.T, variableName string, actualValue []byte, expectedHex string) { 33 if hexutil.Encode(actualValue) != expectedHex { 34 t.Fatalf("%s: Expected %s to be %s, got %s", t.Name(), variableName, expectedHex, hexutil.Encode(actualValue)) 35 } 36 } 37 38 func getTestMetadata() *ResourceMetadata { 39 return &ResourceMetadata{ 40 Name: "world news report, every hour, on the hour", 41 StartTime: Timestamp{ 42 Time: 1528880400, 43 }, 44 Frequency: 3600, 45 Owner: newCharlieSigner().Address(), 46 } 47 } 48 49 func TestMetadataSerializerDeserializer(t *testing.T) { 50 metadata := *getTestMetadata() 51 52 rootAddr, metaHash, chunkData, err := metadata.serializeAndHash() // 53 if err != nil { 54 t.Fatal(err) 55 } 56 const expectedRootAddr = "0xfb0ed7efa696bdb0b54cd75554cc3117ffc891454317df7dd6fefad978e2f2fb" 57 const expectedMetaHash = "0xf74a10ce8f26ffc8bfaa07c3031a34b2c61f517955e7deb1592daccf96c69cf0" 58 const expectedChunkData = "0x00004f0010dd205b00000000100e0000000000002a776f726c64206e657773207265706f72742c20657665727920686f75722c206f6e2074686520686f7572876a8936a7cd0b79ef0735ad0896c1afe278781c" 59 60 compareByteSliceToExpectedHex(t, "rootAddr", rootAddr, expectedRootAddr) 61 compareByteSliceToExpectedHex(t, "metaHash", metaHash, expectedMetaHash) 62 compareByteSliceToExpectedHex(t, "chunkData", chunkData, expectedChunkData) 63 64 recoveredMetadata := ResourceMetadata{} 65 recoveredMetadata.binaryGet(chunkData) 66 67 if recoveredMetadata != metadata { 68 t.Fatalf("Expected that the recovered metadata equals the marshalled metadata") 69 } 70 71 // 72 backup := make([]byte, len(chunkData)) 73 copy(backup, chunkData) 74 75 chunkData = []byte{1, 2, 3} 76 if err := recoveredMetadata.binaryGet(chunkData); err == nil { 77 t.Fatal("Expected binaryGet to fail since chunk is too small") 78 } 79 80 // 81 chunkData = make([]byte, len(backup)) 82 copy(chunkData, backup) 83 84 // 85 chunkData[0] = 7 86 chunkData[1] = 9 87 88 if err := recoveredMetadata.binaryGet(chunkData); err == nil { 89 t.Fatal("Expected binaryGet to fail since prefix bytes are not zero") 90 } 91 92 // 93 chunkData = make([]byte, len(backup)) 94 copy(chunkData, backup) 95 96 // 97 chunkData[2] = 255 98 chunkData[3] = 44 99 if err := recoveredMetadata.binaryGet(chunkData); err == nil { 100 t.Fatal("Expected binaryGet to fail since header length does not match") 101 } 102 103 // 104 chunkData = make([]byte, len(backup)) 105 copy(chunkData, backup) 106 107 // 108 chunkData[20] = 255 109 if err := recoveredMetadata.binaryGet(chunkData); err == nil { 110 t.Fatal("Expected binaryGet to fail since name length is incorrect") 111 } 112 113 // 114 chunkData = make([]byte, len(backup)) 115 copy(chunkData, backup) 116 117 // 118 chunkData[20] = 3 119 if err := recoveredMetadata.binaryGet(chunkData); err == nil { 120 t.Fatal("Expected binaryGet to fail since name length is too small") 121 } 122 } 123 124 func TestMetadataSerializerLengthCheck(t *testing.T) { 125 metadata := *getTestMetadata() 126 127 // 128 serializedMetadata := make([]byte, 4) 129 130 if err := metadata.binaryPut(serializedMetadata); err == nil { 131 t.Fatal("Expected metadata.binaryPut to fail, since target slice is too small") 132 } 133 134 }