File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -194,16 +194,18 @@ func (w *webSocketClient) Close() error {
194194 if w .conn == nil {
195195 return nil
196196 }
197- err := w .conn .WriteMessage (closeMessage , formatCloseMessage (closeNormalClosure , "" ))
198- if err != nil {
199- return fmt .Errorf ("failed to send closure message: %w" , err )
200- }
201- err = w .UnsubscribeAll ()
197+ err := w .UnsubscribeAll ()
202198 if err != nil {
203199 return fmt .Errorf ("failed to unsubscribe: %w" , err )
204200 }
205201 w .Lock ()
206202 defer w .Unlock ()
203+
204+ err = w .conn .WriteMessage (closeMessage , formatCloseMessage (closeNormalClosure , "" ))
205+ if err != nil {
206+ return fmt .Errorf ("failed to send closure message: %w" , err )
207+ }
208+
207209 w .isClosing = true
208210 close (w .errChan )
209211 return w .conn .Close ()
Original file line number Diff line number Diff line change @@ -242,6 +242,49 @@ func TestSubscriptionConnectionParams(t *testing.T) {
242242 }
243243}
244244
245+ func TestSubscriptionClose (t * testing.T ) {
246+ _ = `# @genqlient
247+ subscription count { count }`
248+
249+ ctx := context .Background ()
250+ server := server .RunServer ()
251+ defer server .Close ()
252+
253+ cases := []struct {
254+ name string
255+ unsub bool
256+ }{
257+ {
258+ name : "unsubscribed_manually" ,
259+ unsub : true ,
260+ },
261+ {
262+ name : "unsubscribed_automatically" ,
263+ unsub : false ,
264+ },
265+ }
266+
267+ for _ , tc := range cases {
268+ t .Run (tc .name , func (t * testing.T ) {
269+ wsClient := newRoundtripWebSocketClient (t , server .URL )
270+
271+ _ , err := wsClient .Start (ctx )
272+ require .NoError (t , err )
273+
274+ _ , subscriptionID , err := count (ctx , wsClient )
275+ require .NoError (t , err )
276+
277+ if tc .unsub {
278+ err = wsClient .Unsubscribe (subscriptionID )
279+ require .NoError (t , err )
280+ }
281+
282+ err = wsClient .Close ()
283+ require .NoError (t , err )
284+ })
285+ }
286+ }
287+
245288func TestServerError (t * testing.T ) {
246289 _ = `# @genqlient
247290 query failingQuery { fail me { id } }`
You can’t perform that action at this time.
0 commit comments