From 4e011d95d112bcadcee5dbcaf372b9152a08e093 Mon Sep 17 00:00:00 2001 From: ywb Date: Tue, 18 Apr 2023 16:23:20 +0800 Subject: [PATCH] fix: fast fail , not closing the websocket connection --- hrp/boomer.go | 4 ++++ hrp/runner.go | 32 +++++++++++++++++++------------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/hrp/boomer.go b/hrp/boomer.go index 4e3ecef5..0f35e34d 100644 --- a/hrp/boomer.go +++ b/hrp/boomer.go @@ -361,6 +361,10 @@ func (b *HRPBoomer) convertBoomerTask(testcase *TestCase, rendezvousList []*Rend } mutex.Unlock() + defer func() { + sessionRunner.releaseResources() + }() + startTime := time.Now() for _, step := range testcase.TestSteps { // TODO: parse step struct diff --git a/hrp/runner.go b/hrp/runner.go index d81a3022..dbb3b6b3 100644 --- a/hrp/runner.go +++ b/hrp/runner.go @@ -488,6 +488,11 @@ func (r *SessionRunner) Start(givenVars map[string]interface{}) error { // update config variables with given variables r.InitWithParameters(givenVars) + defer func() { + // close session resource after all steps done or fast fail + r.releaseResources() + }() + // run step in sequential order for _, step := range r.caseRunner.testCase.TestSteps { // TODO: parse step struct @@ -563,19 +568,6 @@ func (r *SessionRunner) Start(givenVars map[string]interface{}) error { } } - // close websocket connection after all steps done - defer func() { - for _, wsConn := range r.wsConnMap { - if wsConn != nil { - log.Info().Str("testcase", config.Name).Msg("websocket disconnected") - err := wsConn.Close() - if err != nil { - log.Error().Err(err).Msg("websocket disconnection failed") - } - } - } - }() - log.Info().Str("testcase", config.Name).Msg("run testcase end") return nil } @@ -646,3 +638,17 @@ func (r *SessionRunner) GetSummary() (*TestCaseSummary, error) { return caseSummary, nil } + +// releaseResources releases resources used by session runner +func (r *SessionRunner) releaseResources() { + // close websocket connections + for _, wsConn := range r.wsConnMap { + if wsConn != nil { + log.Info().Str("testcase", r.caseRunner.testCase.Config.Name).Msg("websocket disconnected") + err := wsConn.Close() + if err != nil { + log.Error().Err(err).Msg("websocket disconnection failed") + } + } + } +}