FatalOnError cancels parent context
This commit is contained in:
@@ -49,7 +49,11 @@ func main() { //nolint:gocognit
|
||||
}
|
||||
paramsReader := params.NewReader(logger)
|
||||
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)
|
||||
// Create configurators
|
||||
fileManager := files.NewFileManager()
|
||||
@@ -63,8 +67,6 @@ func main() { //nolint:gocognit
|
||||
windscribeConf := windscribe.NewConfigurator(fileManager)
|
||||
tinyProxyConf := tinyproxy.NewConfigurator(fileManager, logger)
|
||||
shadowsocksConf := shadowsocks.NewConfigurator(fileManager, logger)
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
streamMerger := command.NewStreamMerger()
|
||||
|
||||
e.PrintVersion(ctx, "OpenVPN", ovpnConf.Version)
|
||||
|
||||
9
internal/env/env.go
vendored
9
internal/env/env.go
vendored
@@ -2,7 +2,6 @@ package env
|
||||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
|
||||
"github.com/qdm12/golibs/logging"
|
||||
)
|
||||
@@ -14,20 +13,20 @@ type Env interface {
|
||||
|
||||
type env struct {
|
||||
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{
|
||||
logger: logger,
|
||||
osExit: os.Exit,
|
||||
cancelContext: cancelContext,
|
||||
}
|
||||
}
|
||||
|
||||
func (e *env) FatalOnError(err error) {
|
||||
if err != nil {
|
||||
e.logger.Error(err)
|
||||
e.osExit(1)
|
||||
e.cancelContext()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
12
internal/env/env_test.go
vendored
12
internal/env/env_test.go
vendored
@@ -23,7 +23,7 @@ func Test_FatalOnError(t *testing.T) {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
var logged string
|
||||
var exitCode int
|
||||
var canceled bool
|
||||
mockCtrl := gomock.NewController(t)
|
||||
defer mockCtrl.Finish()
|
||||
logger := mock_logging.NewMockLogger(mockCtrl)
|
||||
@@ -32,15 +32,17 @@ func Test_FatalOnError(t *testing.T) {
|
||||
logged = err.Error()
|
||||
}).Times(1)
|
||||
}
|
||||
osExit := func(n int) { exitCode = n }
|
||||
e := &env{logger, osExit}
|
||||
e := &env{
|
||||
logger: logger,
|
||||
cancelContext: func() { canceled = true },
|
||||
}
|
||||
e.FatalOnError(tc.err)
|
||||
if tc.err != nil {
|
||||
assert.Equal(t, logged, tc.err.Error())
|
||||
assert.Equal(t, exitCode, 1)
|
||||
assert.True(t, canceled)
|
||||
} else {
|
||||
assert.Empty(t, logged)
|
||||
assert.Zero(t, exitCode)
|
||||
assert.False(t, canceled)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user