1package app
2
3import (
4 "context"
5 "os"
6 "testing"
7
8 "github.com/bnema/vev/internal/adapters/webterm"
9 "github.com/bnema/vev/internal/platform"
10 "github.com/stretchr/testify/require"
11)
12
13func TestWebControlTokenLifetime(t *testing.T) {
14 t.Setenv("XDG_STATE_HOME", t.TempDir())
15 ctx, cancel := context.WithCancel(t.Context())
16 defer cancel()
17 token, err := webterm.NewToken()
18 require.NoError(t, err)
19 settings, err := webterm.ParseSettings("", "https://terminal.example.internal")
20 require.NoError(t, err)
21 server, err := webterm.NewServer(ctx, settings, token, func(context.Context, *webterm.Terminal) error { return nil })
22 require.NoError(t, err)
23 listener, err := startWebControl(ctx, server, settings)
24 require.NoError(t, err)
25 defer listener.Close()
26 got, err := webControlRequest(ctx, false)
27 require.NoError(t, err)
28 require.Equal(t, token, got.Token)
29 require.Equal(t, settings, got.Settings)
30 renewed, err := webControlRequest(ctx, true)
31 require.NoError(t, err)
32 require.NotEqual(t, token, renewed.Token)
33 require.Equal(t, settings, renewed.Settings)
34 got, err = webControlRequest(ctx, false)
35 require.NoError(t, err)
36 require.Equal(t, renewed, got)
37 _, err = os.Stat(platform.StateDir())
38 require.True(t, os.IsNotExist(err), "control must not persist a credential")
39}