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  }