summaryrefslogtreecommitdiffstats
path: root/katzenpost/dispatcher/frame_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'katzenpost/dispatcher/frame_test.go')
-rw-r--r--katzenpost/dispatcher/frame_test.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/katzenpost/dispatcher/frame_test.go b/katzenpost/dispatcher/frame_test.go
new file mode 100644
index 0000000..21c84ba
--- /dev/null
+++ b/katzenpost/dispatcher/frame_test.go
@@ -0,0 +1,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")
+ }
+}