FatalOnError cancels parent context
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
13
internal/env/env.go
vendored
13
internal/env/env.go
vendored
@@ -2,7 +2,6 @@ package env
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/qdm12/golibs/logging"
|
"github.com/qdm12/golibs/logging"
|
||||||
)
|
)
|
||||||
@@ -13,21 +12,21 @@ 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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
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.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)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user