aboutsummaryrefslogtreecommitdiffstats
path: root/swarm/storage/mru/updateheader_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'swarm/storage/mru/updateheader_test.go')
-rw-r--r--swarm/storage/mru/updateheader_test.go64
1 files changed, 64 insertions, 0 deletions
diff --git a/swarm/storage/mru/updateheader_test.go b/swarm/storage/mru/updateheader_test.go
new file mode 100644
index 000000000..b1f505989
--- /dev/null
+++ b/swarm/storage/mru/updateheader_test.go
@@ -0,0 +1,64 @@
+package mru
+
+import (
+ "bytes"
+ "testing"
+
+ "github.com/ethereum/go-ethereum/common/hexutil"
+)
+
+const serializedUpdateHeaderMultihashHex = "0x4f000000da070000fb0ed7efa696bdb0b54cd75554cc3117ffc891454317df7dd6fefad978e2f2fbf74a10ce8f26ffc8bfaa07c3031a34b2c61f517955e7deb1592daccf96c69cf001"
+
+func getTestUpdateHeader(multihash bool) (header *updateHeader) {
+ _, metaHash, _, _ := getTestMetadata().serializeAndHash()
+ return &updateHeader{
+ UpdateLookup: *getTestUpdateLookup(),
+ multihash: multihash,
+ metaHash: metaHash,
+ }
+}
+
+func compareUpdateHeader(a, b *updateHeader) bool {
+ return compareUpdateLookup(&a.UpdateLookup, &b.UpdateLookup) &&
+ a.multihash == b.multihash &&
+ bytes.Equal(a.metaHash, b.metaHash)
+}
+
+func TestUpdateHeaderSerializer(t *testing.T) {
+ header := getTestUpdateHeader(true)
+ serializedHeader := make([]byte, updateHeaderLength)
+ if err := header.binaryPut(serializedHeader); err != nil {
+ t.Fatal(err)
+ }
+ compareByteSliceToExpectedHex(t, "serializedHeader", serializedHeader, serializedUpdateHeaderMultihashHex)
+
+ // trigger incorrect slice length error passing a slice that is 1 byte too big
+ if err := header.binaryPut(make([]byte, updateHeaderLength+1)); err == nil {
+ t.Fatal("Expected updateHeader.binaryPut to fail since supplied slice is of incorrect length")
+ }
+
+ // trigger invalid metaHash error
+ header.metaHash = nil
+ if err := header.binaryPut(serializedHeader); err == nil {
+ t.Fatal("Expected updateHeader.binaryPut to fail metaHash is of incorrect length")
+ }
+}
+
+func TestUpdateHeaderDeserializer(t *testing.T) {
+ originalUpdate := getTestUpdateHeader(true)
+ serializedData, _ := hexutil.Decode(serializedUpdateHeaderMultihashHex)
+ var retrievedUpdate updateHeader
+ if err := retrievedUpdate.binaryGet(serializedData); err != nil {
+ t.Fatal(err)
+ }
+ if !compareUpdateHeader(originalUpdate, &retrievedUpdate) {
+ t.Fatalf("Expected deserialized structure to equal the original")
+ }
+
+ // mess with source slice to test length checks
+ serializedData = []byte{1, 2, 3}
+ if err := retrievedUpdate.binaryGet(serializedData); err == nil {
+ t.Fatal("Expected retrievedUpdate.binaryGet, since passed slice is too small")
+ }
+
+}