updateheader_test.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package mru
  2. import (
  3. "bytes"
  4. "testing"
  5. "github.com/ethereum/go-ethereum/common/hexutil"
  6. )
  7. const serializedUpdateHeaderMultihashHex = "0x4f000000da070000fb0ed7efa696bdb0b54cd75554cc3117ffc891454317df7dd6fefad978e2f2fbf74a10ce8f26ffc8bfaa07c3031a34b2c61f517955e7deb1592daccf96c69cf001"
  8. func getTestUpdateHeader(multihash bool) (header *updateHeader) {
  9. _, metaHash, _, _ := getTestMetadata().serializeAndHash()
  10. return &updateHeader{
  11. UpdateLookup: *getTestUpdateLookup(),
  12. multihash: multihash,
  13. metaHash: metaHash,
  14. }
  15. }
  16. func compareUpdateHeader(a, b *updateHeader) bool {
  17. return compareUpdateLookup(&a.UpdateLookup, &b.UpdateLookup) &&
  18. a.multihash == b.multihash &&
  19. bytes.Equal(a.metaHash, b.metaHash)
  20. }
  21. func TestUpdateHeaderSerializer(t *testing.T) {
  22. header := getTestUpdateHeader(true)
  23. serializedHeader := make([]byte, updateHeaderLength)
  24. if err := header.binaryPut(serializedHeader); err != nil {
  25. t.Fatal(err)
  26. }
  27. compareByteSliceToExpectedHex(t, "serializedHeader", serializedHeader, serializedUpdateHeaderMultihashHex)
  28. // trigger incorrect slice length error passing a slice that is 1 byte too big
  29. if err := header.binaryPut(make([]byte, updateHeaderLength+1)); err == nil {
  30. t.Fatal("Expected updateHeader.binaryPut to fail since supplied slice is of incorrect length")
  31. }
  32. // trigger invalid metaHash error
  33. header.metaHash = nil
  34. if err := header.binaryPut(serializedHeader); err == nil {
  35. t.Fatal("Expected updateHeader.binaryPut to fail metaHash is of incorrect length")
  36. }
  37. }
  38. func TestUpdateHeaderDeserializer(t *testing.T) {
  39. originalUpdate := getTestUpdateHeader(true)
  40. serializedData, _ := hexutil.Decode(serializedUpdateHeaderMultihashHex)
  41. var retrievedUpdate updateHeader
  42. if err := retrievedUpdate.binaryGet(serializedData); err != nil {
  43. t.Fatal(err)
  44. }
  45. if !compareUpdateHeader(originalUpdate, &retrievedUpdate) {
  46. t.Fatalf("Expected deserialized structure to equal the original")
  47. }
  48. // mess with source slice to test length checks
  49. serializedData = []byte{1, 2, 3}
  50. if err := retrievedUpdate.binaryGet(serializedData); err == nil {
  51. t.Fatal("Expected retrievedUpdate.binaryGet, since passed slice is too small")
  52. }
  53. }