1package daemonmux
2
3import (
4 "bytes"
5 "context"
6 "testing"
7 "time"
8
9 "github.com/bnema/vev/internal/protocol/wire"
10 "github.com/stretchr/testify/require"
11)
12
13// TestLogicalRawEnvelopeRelay proves a logical connection carries opaque
14// envelopes byte-for-byte in both directions without decoding them.
15func TestLogicalRawEnvelopeRelay(t *testing.T) {
16 broker, daemon := newPairedPumps(t, DefaultMuxCeilings())
17 acceptor := newDaemonAcceptor(daemon, 0)
18 acceptor.startBare(1, time.Now().Add(5*time.Second))
19 ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
20 defer cancel()
21 conn, err := mustConnector(t, broker).Open(ctx, controlRequest(1))
22 require.NoError(t, err)
23 defer conn.Close()
24 require.NoError(t, acceptor.wait(1, time.Now().Add(5*time.Second)))
25
26 payload := []byte{0xff, 0, 0x80, 7}
27 require.NoError(t, conn.SendEnvelope(payload))
28 status, ok := daemon.Engine().Status(conn.Ref().Physical)
29 require.True(t, ok)
30 peer := newMuxTransport(newMuxStreamPipe(daemon, conn.Ref().Physical, daemon.Ceilings().StreamChunkLimit, status.Done))
31 defer peer.Close()
32 got, err := peer.Recv()
33 require.NoError(t, err)
34 require.Equal(t, payload, got.Payload)
35
36 large := bytes.Repeat([]byte{0xfe}, 2048)
37 require.NoError(t, peer.Send(wire.Envelope{Payload: large}))
38 gotPayload, err := conn.RecvEnvelope()
39 require.NoError(t, err)
40 require.Equal(t, large, gotPayload)
41}