MCPcopy Index your code
hub / github.com/coder/coder / TestNewServer_Signal

Function TestNewServer_Signal

agent/agentssh/agentssh_test.go:258–405  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

256}
257
258func TestNewServer_Signal(t *testing.T) {
259 t.Parallel()
260
261 t.Run("Stdout", func(t *testing.T) {
262 t.Parallel()
263
264 ctx := context.Background()
265 logger := testutil.Logger(t)
266 s, err := agentssh.NewServer(ctx, logger, prometheus.NewRegistry(), afero.NewMemMapFs(), agentexec.DefaultExecer, nil)
267 require.NoError(t, err)
268 defer s.Close()
269 err = s.UpdateHostSigner(42)
270 assert.NoError(t, err)
271
272 ln, err := net.Listen("tcp", "127.0.0.1:0")
273 require.NoError(t, err)
274
275 done := make(chan struct{})
276 go func() {
277 defer close(done)
278 err := s.Serve(ln)
279 assert.Error(t, err) // Server is closed.
280 }()
281 defer func() {
282 err := s.Close()
283 require.NoError(t, err)
284 <-done
285 }()
286
287 c := sshClient(t, ln.Addr().String())
288
289 sess, err := c.NewSession()
290 require.NoError(t, err)
291 r, err := sess.StdoutPipe()
292 require.NoError(t, err)
293
294 // Perform multiple sleeps since the interrupt signal doesn't propagate to
295 // the process group, this lets us exit early.
296 sleeps := strings.Repeat("sleep 1 && ", int(testutil.WaitMedium.Seconds()))
297 err = sess.Start(fmt.Sprintf("echo hello && %s echo bye", sleeps))
298 require.NoError(t, err)
299
300 sc := bufio.NewScanner(r)
301 for sc.Scan() {
302 t.Log(sc.Text())
303 if strings.Contains(sc.Text(), "hello") {
304 break
305 }
306 }
307 require.NoError(t, sc.Err())
308
309 err = sess.Signal(ssh.SIGKILL)
310 require.NoError(t, err)
311
312 // Assumption, signal propagates and the command exists, closing stdout.
313 for sc.Scan() {
314 t.Log(sc.Text())
315 require.NotContains(t, sc.Text(), "bye")

Callers

nothing calls this directly

Calls 15

CloseMethod · 0.95
UpdateHostSignerMethod · 0.95
ServeMethod · 0.95
LoggerFunction · 0.92
NewServerFunction · 0.92
NewFunction · 0.92
sshClientFunction · 0.85
NewSessionMethod · 0.80
LogMethod · 0.80
ErrMethod · 0.80
RunMethod · 0.65
ListenMethod · 0.65

Tested by

no test coverage detected