From b0722078365e21f1af1aef274f3a5dfdb783d512 Mon Sep 17 00:00:00 2001 From: Alexander Menzhinsky Date: Mon, 20 Feb 2017 00:52:05 +0300 Subject: [PATCH] Add graceful stop --- echo_go18.go | 25 +++++++++++++++++++++++++ echo_go18_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 echo_go18.go create mode 100644 echo_go18_test.go diff --git a/echo_go18.go b/echo_go18.go new file mode 100644 index 000000000..32cdfaf29 --- /dev/null +++ b/echo_go18.go @@ -0,0 +1,25 @@ +// +build go1.8 + +package echo + +import ( + c "context" +) + +// Close immediately stops server +// equivalent of func (*http.Server) Close() error +func (e *Echo) Close() error { + if err := e.TLSServer.Close(); err != nil { + return err + } + return e.Server.Close() +} + +// Shutdown stops server gracefully +// equivalent of func (*http.Server) Shutdown(ctx context.Context) error +func (e *Echo) Shutdown(ctx c.Context) error { + if err := e.TLSServer.Shutdown(ctx); err != nil { + return err + } + return e.Server.Shutdown(ctx) +} diff --git a/echo_go18_test.go b/echo_go18_test.go new file mode 100644 index 000000000..1191c6438 --- /dev/null +++ b/echo_go18_test.go @@ -0,0 +1,30 @@ +// +build go1.8 + +package echo + +import ( + "testing" + "time" + + "github.com/stretchr/testify/assert" +) + +func TestEchoClose(t *testing.T) { + e := New() + errCh := make(chan error) + + go func() { + errCh <- e.Start(":0") + }() + + time.Sleep(200 * time.Millisecond) + + if err := e.Close(); err != nil { + t.Fatal(err) + } + + assert.NoError(t, e.Close()) + + err := <-errCh + assert.Equal(t, err.Error(), "http: Server closed") +}