summaryrefslogtreecommitdiffstats
path: root/katzenpost/dispatcher/frame_test.go
blob: 21c84bac793116191c158c1448e912a497706b58 (plain) (blame)
1
2
3
4
5
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
package dispatcher

import (
	"bytes"
	"testing"
	"time"
)

func TestSplitAndReassembleEnvelope(t *testing.T) {
	encoded := bytes.Repeat([]byte("yamn-envelope\n"), 900)
	payloads, err := SplitEnvelope(encoded)
	if err != nil {
		t.Fatal(err)
	}
	if len(payloads) < 2 {
		t.Fatal("expected multiple frames")
	}

	reassembler := NewReassembler(time.Minute)
	var result []byte
	for _, payload := range payloads {
		if len(payload) > MaxSphinxPayload {
			t.Fatalf("payload exceeds limit: %d", len(payload))
		}
		frame, err := DecodeFrame(payload)
		if err != nil {
			t.Fatal(err)
		}
		assembled, complete, err := reassembler.Add(frame)
		if err != nil {
			t.Fatal(err)
		}
		if complete {
			result = assembled
		}
	}
	if !bytes.Equal(result, encoded) {
		t.Fatal("reassembled envelope differs")
	}
}

func TestDecodeFrameRejectsOversizedPayload(t *testing.T) {
	if _, err := DecodeFrame(make([]byte, MaxSphinxPayload+1)); err == nil {
		t.Fatal("expected oversized payload rejection")
	}
}