MCPcopy Create free account
hub / github.com/coder/coder / TestServer_X11

Function TestServer_X11

agent/agentssh/x11_test.go:29–130  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

27)
28
29func TestServer_X11(t *testing.T) {
30 t.Parallel()
31 if runtime.GOOS != "linux" {
32 t.Skip("X11 forwarding is only supported on Linux")
33 }
34
35 ctx := testutil.Context(t, testutil.WaitShort)
36 logger := testutil.Logger(t)
37 fs := afero.NewMemMapFs()
38
39 // Use in-process networking for X11 forwarding.
40 inproc := testutil.NewInProcNet()
41
42 // Create server config with custom X11 listener.
43 cfg := &agentssh.Config{
44 X11Net: inproc,
45 }
46
47 s, err := agentssh.NewServer(ctx, logger, prometheus.NewRegistry(), fs, agentexec.DefaultExecer, cfg)
48 require.NoError(t, err)
49 defer s.Close()
50 err = s.UpdateHostSigner(42)
51 assert.NoError(t, err)
52
53 ln, err := net.Listen("tcp", "127.0.0.1:0")
54 require.NoError(t, err)
55
56 done := make(chan struct{})
57 go func() {
58 defer close(done)
59 err := s.Serve(ln)
60 assert.Error(t, err) // Server is closed.
61 }()
62
63 c := sshClient(t, ln.Addr().String())
64
65 sess, err := c.NewSession()
66 require.NoError(t, err)
67
68 wantScreenNumber := 1
69 reply, err := sess.SendRequest("x11-req", true, gossh.Marshal(ssh.X11{
70 AuthProtocol: "MIT-MAGIC-COOKIE-1",
71 AuthCookie: hex.EncodeToString([]byte("cookie")),
72 ScreenNumber: uint32(wantScreenNumber),
73 }))
74 require.NoError(t, err)
75 assert.True(t, reply)
76
77 // Want: ~DISPLAY=localhost:10.1
78 out, err := sess.Output("echo DISPLAY=$DISPLAY")
79 require.NoError(t, err)
80
81 sc := bufio.NewScanner(bytes.NewReader(out))
82 displayNumber := -1
83 for sc.Scan() {
84 line := strings.TrimSpace(sc.Text())
85 t.Log(line)
86 if strings.HasPrefix(line, "DISPLAY=") {

Callers

nothing calls this directly

Calls 15

CloseMethod · 0.95
UpdateHostSignerMethod · 0.95
ServeMethod · 0.95
DialMethod · 0.95
ContextFunction · 0.92
LoggerFunction · 0.92
NewInProcNetFunction · 0.92
NewServerFunction · 0.92
NewAddrFunction · 0.92
RequireReceiveFunction · 0.92
sshClientFunction · 0.85
SkipMethod · 0.80

Tested by

no test coverage detected