fix: honor global flag --debug
Co-authored-by: Roberto Abdelkader Martínez Pérez <robertomartinezp@gmail.com>
This commit is contained in:
@@ -52,23 +52,30 @@ func handlerBuilder(route model.Route) http.Handler {
|
||||
data.Handlers.Add(h)
|
||||
defer data.Handlers.Remove(h.ID)
|
||||
|
||||
stdOutR, stdOutW, err := os.Pipe()
|
||||
defer stdOutW.Close()
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
stdErrR, stdErrW, err := os.Pipe()
|
||||
defer stdErrW.Close()
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
if route.Debug {
|
||||
var stdOutR, stdOutW *os.File
|
||||
stdOutR, stdOutW, err = os.Pipe()
|
||||
defer stdOutW.Close()
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
var stdErrR, stdErrW *os.File
|
||||
stdErrR, stdErrW, err = os.Pipe()
|
||||
defer stdErrW.Close()
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
go logStream(h.ID, "stdout", stdOutR)
|
||||
go logStream(h.ID, "stderr", stdErrR)
|
||||
|
||||
err = spawner(h, stdOutW, stdErrW)
|
||||
} else {
|
||||
err = spawner(h, nil, nil)
|
||||
}
|
||||
|
||||
go logStream(h.ID, "stdout", stdOutR)
|
||||
go logStream(h.ID, "stderr", stdErrR)
|
||||
|
||||
err = spawner(h, stdOutW, stdErrW)
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// +build !race
|
||||
|
||||
/*
|
||||
* Copyright 2019 Banco Bilbao Vizcaya Argentaria, S.A.
|
||||
*
|
||||
@@ -200,16 +202,16 @@ func TestHandlerBuilderRemovesHandlerWhenDone(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestHandlerBuilderLogToLogHandler(t *testing.T) {
|
||||
func TestHandlerBuilderLogToLogHandlerWhenDebugIsEnabled(t *testing.T) {
|
||||
data.Handlers = data.New()
|
||||
route := model.Route{}
|
||||
route := model.Route{Debug: true}
|
||||
var got string
|
||||
|
||||
logHandler = new(bytes.Buffer)
|
||||
|
||||
spawner = func(h *model.Handler, out io.Writer, er io.Writer) error {
|
||||
out.Write([]byte("this is stdout"))
|
||||
er.Write([]byte("this is stderr"))
|
||||
_, _ = out.Write([]byte("this is stdout"))
|
||||
_, _ = er.Write([]byte("this is stderr"))
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -229,3 +231,34 @@ func TestHandlerBuilderLogToLogHandler(t *testing.T) {
|
||||
t.Errorf("Stderr not preserved. Actual: %+q", got)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func TestHandlerBuilderDoesNotLogToLogHandlerWhenDebugIsDisabled(t *testing.T) {
|
||||
data.Handlers = data.New()
|
||||
route := model.Route{Debug: false}
|
||||
|
||||
logHandler = new(bytes.Buffer)
|
||||
|
||||
spawner = func(h *model.Handler, out io.Writer, er io.Writer) error {
|
||||
if out != nil {
|
||||
_, _ = out.Write([]byte("this is stdout"))
|
||||
}
|
||||
if er != nil {
|
||||
_, _ = er.Write([]byte("this is stderr"))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
handlerBuilder(route).ServeHTTP(nil, nil)
|
||||
|
||||
// NOTE: logStream will write stdout and stderr contents eventually.
|
||||
// We do not have any control the goroutines running logStream, thus we
|
||||
// cannot use a synchronization primitive to wait for them. Sorry.
|
||||
time.Sleep(1 * time.Second)
|
||||
|
||||
size := logHandler.(*bytes.Buffer).Len()
|
||||
if size != 0 {
|
||||
t.Error("Something was logged to stderr with debug=false")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,13 +34,20 @@ var Server = http.Server{
|
||||
Handler: mux.New(),
|
||||
}
|
||||
|
||||
var DebugEndpoints bool
|
||||
|
||||
// Run finishes configuring Server and runs ListenAndServe on it
|
||||
func Run(bindAddr string, wg *sync.WaitGroup, certFile, keyFile, cliCaFile string, cliAuth bool) {
|
||||
func Run(bindAddr string, wg *sync.WaitGroup, certFile, keyFile, cliCaFile string, cliAuth, debug bool) {
|
||||
|
||||
Server = http.Server{
|
||||
Addr: bindAddr,
|
||||
Handler: mux.New(),
|
||||
}
|
||||
|
||||
if debug {
|
||||
Routes.SetDebug()
|
||||
}
|
||||
|
||||
listener, err := net.Listen("tcp", bindAddr)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
@@ -27,6 +27,7 @@ import (
|
||||
type safeRouteList struct {
|
||||
rs []model.Route
|
||||
m *sync.RWMutex
|
||||
globalDebug bool
|
||||
}
|
||||
|
||||
var Routes safeRouteList = New()
|
||||
@@ -38,9 +39,14 @@ func New() safeRouteList {
|
||||
}
|
||||
}
|
||||
|
||||
func (srl *safeRouteList) SetDebug() {
|
||||
srl.globalDebug = true
|
||||
}
|
||||
|
||||
func (srl *safeRouteList) Append(r model.Route) model.Route {
|
||||
srl.m.Lock()
|
||||
r.Index = len(srl.rs)
|
||||
r.Debug = srl.globalDebug || r.Debug
|
||||
srl.rs = append(srl.rs, r)
|
||||
srl.m.Unlock()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user