MCPcopy Index your code
hub / github.com/docker/cli / TestPluginServer

Function TestPluginServer

cli-plugins/socket/socket_test.go:19–132  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

17)
18
19func TestPluginServer(t *testing.T) {
20 t.Run("connection closes with EOF when server closes", func(t *testing.T) {
21 called := make(chan struct{})
22 srv, err := NewPluginServer(func(_ net.Conn) { close(called) })
23 assert.NilError(t, err)
24 assert.Assert(t, srv != nil, "returned nil server but no error")
25
26 addr, err := net.ResolveUnixAddr("unix", srv.Addr().String())
27 assert.NilError(t, err, "failed to resolve server address")
28
29 conn, err := net.DialUnix("unix", nil, addr)
30 assert.NilError(t, err, "failed to dial returned server")
31 defer conn.Close()
32
33 done := make(chan error, 1)
34 go func() {
35 _, err := conn.Read(make([]byte, 1))
36 done <- err
37 }()
38
39 select {
40 case <-called:
41 case <-time.After(10 * time.Millisecond):
42 t.Fatal("handler not called")
43 }
44
45 srv.Close()
46
47 select {
48 case err := <-done:
49 if !errors.Is(err, io.EOF) {
50 t.Fatalf("expected EOF error, got: %v", err)
51 }
52 case <-time.After(10 * time.Millisecond):
53 }
54 })
55
56 t.Run("allows reconnects", func(t *testing.T) {
57 var calls atomic.Int32
58 h := func(_ net.Conn) {
59 calls.Add(1)
60 }
61
62 srv, err := NewPluginServer(h)
63 assert.NilError(t, err)
64 defer srv.Close()
65
66 assert.Check(t, srv.Addr() != nil, "returned nil addr but no error")
67
68 addr, err := net.ResolveUnixAddr("unix", srv.Addr().String())
69 assert.NilError(t, err, "failed to resolve server address")
70
71 waitForCalls := func(n int) {
72 poll.WaitOn(t, func(t poll.LogT) poll.Result {
73 if calls.Load() == int32(n) {
74 return poll.Success()
75 }
76 return poll.Continue("waiting for handler to be called")

Callers

nothing calls this directly

Calls 6

AddrMethod · 0.95
CloseMethod · 0.95
NewPluginServerFunction · 0.85
StringMethod · 0.65
ReadMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…