1package daemon
2
3import (
4 "testing"
5
6 "github.com/bnema/vev/internal/ports"
7 "github.com/stretchr/testify/require"
8)
9
10func TestBackSessionUsesClientPreviousRouteAfterSnapshotPublication(t *testing.T) {
11 d, source, ac, _ := newManualSessionWithPTYs(t, nil)
12 transport := &closeTrackingTransport{}
13 ac.replaceTransport(transport)
14 rc := d.attachCoordinator(source, nil, ac, true)
15 token := source.attachmentToken(ac, transport)
16 token.lease = rc.attachmentLease(ac)
17 ac.publishAttachmentCapability(token)
18 effect, admitted := ac.beginAttachmentEffect(token)
19 require.True(t, admitted)
20 defer effect.End()
21 token.effect = effect
22 ac.setRouteSnapshot(ports.RecentRouteSnapshot{
23 Generation: 5,
24 Active: ports.RouteRef{Key: 9, Generation: 5},
25 Previous: ports.RouteRef{Key: 7, Generation: 3},
26 Entries: []ports.RecentRouteEntry{{
27 Key: 7, Generation: 3, Name: "previous", Kind: ports.RouteKindLocal,
28 }},
29 })
30
31 require.NoError(t, d.backSessionForAttachment(token))
32 frames := transport.Sends()
33 require.NotEmpty(t, frames)
34 var action ports.RouteNavigationAction
35 found := false
36 for _, frame := range frames {
37 if frame.Type != ports.MsgNavigateRecentRoute {
38 continue
39 }
40 var err error
41 action, err = ports.UnmarshalRouteNavigationAction(frame.Payload)
42 require.NoError(t, err)
43 found = true
44 }
45 require.True(t, found)
46 require.Equal(t, ports.RouteNavigationAction{SnapshotGeneration: 5, Key: 7, Generation: 3}, action)
47}