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