mirror of
https://github.com/Quad4-Software/Reticulum-Go
synced 2026-08-29 23:48:44 -04:00
67 lines
1.8 KiB
Go
67 lines
1.8 KiB
Go
// SPDX-License-Identifier: Apache-2.0
|
|
// Copyright (c) 2024-2026 Quad4.io
|
|
|
|
package resource
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
)
|
|
|
|
func identityEncrypt(plain []byte) ([]byte, error) {
|
|
return append([]byte(nil), plain...), nil
|
|
}
|
|
|
|
func TestPrepareOutboundSplitsLargePayload(t *testing.T) {
|
|
body := bytes.Repeat([]byte("abcdefgh"), (MaxEfficientSize/8)+64)
|
|
res, err := New(body, false)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := res.PrepareOutboundForLink(identityEncrypt, 200); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !res.IsSplit() {
|
|
t.Fatal("expected split resource")
|
|
}
|
|
if res.GetSegmentIndex() != 1 {
|
|
t.Fatalf("segment index: got %d want 1", res.GetSegmentIndex())
|
|
}
|
|
if res.GetTotalSegments() < 2 {
|
|
t.Fatalf("total segments: got %d want >= 2", res.GetTotalSegments())
|
|
}
|
|
adv := NewResourceAdvertisement(res)
|
|
if adv == nil || !adv.Split {
|
|
t.Fatal("advertisement missing split flag")
|
|
}
|
|
if adv.SegmentIndex != 1 || adv.TotalSegments != res.GetTotalSegments() {
|
|
t.Fatalf("adv segments: i=%d l=%d", adv.SegmentIndex, adv.TotalSegments)
|
|
}
|
|
orig := res.GetOriginalHash()
|
|
|
|
if err := res.PrepareNextOutboundSegment(identityEncrypt, 200); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if res.GetSegmentIndex() != 2 {
|
|
t.Fatalf("segment index after next: got %d want 2", res.GetSegmentIndex())
|
|
}
|
|
if !bytes.Equal(res.GetOriginalHash(), orig) {
|
|
t.Fatal("original hash changed across segments")
|
|
}
|
|
}
|
|
|
|
func TestPrepareOutboundSmallNotSplit(t *testing.T) {
|
|
res, err := New([]byte("small"), false)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := res.PrepareOutboundForLink(identityEncrypt, 200); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if res.IsSplit() {
|
|
t.Fatal("small resource should not split")
|
|
}
|
|
if res.GetTotalSegments() != 1 || res.GetSegmentIndex() != 1 {
|
|
t.Fatalf("segments: i=%d l=%d", res.GetSegmentIndex(), res.GetTotalSegments())
|
|
}
|
|
}
|