record_test.go 1.31 KB
Newer Older
1 2 3 4
package record

import "testing"

tavit ohanian's avatar
tavit ohanian committed
5
var testPayloadType = []byte("/p2p/test/record/payload-type")
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51

type testPayload struct {
	unmarshalPayloadCalled bool
}

func (p *testPayload) Domain() string {
	return "testing"
}

func (p *testPayload) Codec() []byte {
	return testPayloadType
}

func (p *testPayload) MarshalRecord() ([]byte, error) {
	return []byte("hello"), nil
}

func (p *testPayload) UnmarshalRecord(bytes []byte) error {
	p.unmarshalPayloadCalled = true
	return nil
}

func TestUnmarshalPayload(t *testing.T) {
	t.Run("fails if payload type is unregistered", func(t *testing.T) {
		_, err := unmarshalRecordPayload([]byte("unknown type"), []byte{})
		if err != ErrPayloadTypeNotRegistered {
			t.Error("Expected error when unmarshalling payload with unregistered payload type")
		}
	})

	t.Run("calls UnmarshalRecord on concrete Record type", func(t *testing.T) {
		RegisterType(&testPayload{})

		payload, err := unmarshalRecordPayload(testPayloadType, []byte{})
		if err != nil {
			t.Errorf("unexpected error unmarshalling registered payload type: %v", err)
		}
		typedPayload, ok := payload.(*testPayload)
		if !ok {
			t.Error("expected unmarshalled payload to be of the correct type")
		}
		if !typedPayload.unmarshalPayloadCalled {
			t.Error("expected UnmarshalRecord to be called on concrete Record instance")
		}
	})
}