From c67e612737dc0810319965599bbbccea904d7315 Mon Sep 17 00:00:00 2001 From: Aitor Perez Cedres Date: Thu, 9 Feb 2023 10:29:41 +0000 Subject: [PATCH] Add a test case for usage of closed connection After 2d55559, we are setting some fields to nil in the shutdown sequence. We have to ensure that the library does not panic as a consequence, after the connection is closed. Signed-off-by: Aitor Perez Cedres --- client_test.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/client_test.go b/client_test.go index 815de15..e5a0154 100644 --- a/client_test.go +++ b/client_test.go @@ -288,7 +288,41 @@ func TestOpen(t *testing.T) { if c, err := Open(rwc, defaultConfig()); err != nil { t.Fatalf("could not create connection: %v (%s)", c, err) } +} + +func TestOpenClose_ShouldNotPanic(t *testing.T) { + rwc, srv := newSession(t) + t.Cleanup(func() { + _ = rwc.Close() + }) + + go func() { + srv.connectionOpen() + srv.connectionClose() + }() + + c, err := Open(rwc, defaultConfig()) + if err != nil { + t.Fatalf("could not create connection: %v (%s)", c, err) + } + + if err := c.Close(); err != nil { + t.Fatalf("could not close connection: %s", err) + } + defer func() { + if r := recover(); r != nil { + t.Fatalf("creating a channel on a closed connection should not panic: %s", r) + } + }() + + ch, err := c.Channel() + if ch != nil { + t.Fatalf("creating a channel on a closed connection should not succeed: %v, (%s)", ch, err) + } + if err != ErrClosed { + t.Fatalf("error should be closed: %s", err) + } } func TestChannelOpen(t *testing.T) {