FatalOnError cancels parent context

This commit is contained in:
Quentin McGaw
2020-05-02 13:05:09 +00:00
parent 41168f88cd
commit 8e77842f1e
3 changed files with 18 additions and 15 deletions

View File

@@ -49,7 +49,11 @@ func main() { //nolint:gocognit
} }
paramsReader := params.NewReader(logger) paramsReader := params.NewReader(logger)
fmt.Println(splash.Splash(paramsReader)) fmt.Println(splash.Splash(paramsReader))
e := env.New(logger)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
e := env.New(logger, cancel)
client := network.NewClient(15 * time.Second) client := network.NewClient(15 * time.Second)
// Create configurators // Create configurators
fileManager := files.NewFileManager() fileManager := files.NewFileManager()
@@ -63,8 +67,6 @@ func main() { //nolint:gocognit
windscribeConf := windscribe.NewConfigurator(fileManager) windscribeConf := windscribe.NewConfigurator(fileManager)
tinyProxyConf := tinyproxy.NewConfigurator(fileManager, logger) tinyProxyConf := tinyproxy.NewConfigurator(fileManager, logger)
shadowsocksConf := shadowsocks.NewConfigurator(fileManager, logger) shadowsocksConf := shadowsocks.NewConfigurator(fileManager, logger)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
streamMerger := command.NewStreamMerger() streamMerger := command.NewStreamMerger()
e.PrintVersion(ctx, "OpenVPN", ovpnConf.Version) e.PrintVersion(ctx, "OpenVPN", ovpnConf.Version)

9
internal/env/env.go vendored
View File

@@ -2,7 +2,6 @@ package env
import ( import (
"context" "context"
"os"
"github.com/qdm12/golibs/logging" "github.com/qdm12/golibs/logging"
) )
@@ -14,20 +13,20 @@ type Env interface {
type env struct { type env struct {
logger logging.Logger logger logging.Logger
osExit func(n int) cancelContext func()
} }
func New(logger logging.Logger) Env { func New(logger logging.Logger, cancelContext context.CancelFunc) Env {
return &env{ return &env{
logger: logger, logger: logger,
osExit: os.Exit, cancelContext: cancelContext,
} }
} }
func (e *env) FatalOnError(err error) { func (e *env) FatalOnError(err error) {
if err != nil { if err != nil {
e.logger.Error(err) e.logger.Error(err)
e.osExit(1) e.cancelContext()
} }
} }

View File

@@ -23,7 +23,7 @@ func Test_FatalOnError(t *testing.T) {
t.Run(name, func(t *testing.T) { t.Run(name, func(t *testing.T) {
t.Parallel() t.Parallel()
var logged string var logged string
var exitCode int var canceled bool
mockCtrl := gomock.NewController(t) mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish() defer mockCtrl.Finish()
logger := mock_logging.NewMockLogger(mockCtrl) logger := mock_logging.NewMockLogger(mockCtrl)
@@ -32,15 +32,17 @@ func Test_FatalOnError(t *testing.T) {
logged = err.Error() logged = err.Error()
}).Times(1) }).Times(1)
} }
osExit := func(n int) { exitCode = n } e := &env{
e := &env{logger, osExit} logger: logger,
cancelContext: func() { canceled = true },
}
e.FatalOnError(tc.err) e.FatalOnError(tc.err)
if tc.err != nil { if tc.err != nil {
assert.Equal(t, logged, tc.err.Error()) assert.Equal(t, logged, tc.err.Error())
assert.Equal(t, exitCode, 1) assert.True(t, canceled)
} else { } else {
assert.Empty(t, logged) assert.Empty(t, logged)
assert.Zero(t, exitCode) assert.False(t, canceled)
} }
}) })
} }