test: logStream() behaves correctly like a good kiddo
Co-authored-by: Roberto Abdelkader Martínez Pérez <robertomartinezp@gmail.com>
This commit is contained in:
@@ -20,6 +20,7 @@ import (
|
|||||||
"bufio"
|
"bufio"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
@@ -31,6 +32,7 @@ import (
|
|||||||
|
|
||||||
var spawner = spawn.Spawn
|
var spawner = spawn.Spawn
|
||||||
var idGenerator = uuid.NewUUID
|
var idGenerator = uuid.NewUUID
|
||||||
|
var logHandler io.Writer = os.Stdout
|
||||||
|
|
||||||
func handlerBuilder(route model.Route) http.Handler {
|
func handlerBuilder(route model.Route) http.Handler {
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
@@ -77,7 +79,7 @@ func handlerBuilder(route model.Route) http.Handler {
|
|||||||
|
|
||||||
func logStream(handlerId string, streamName string, stream *os.File) {
|
func logStream(handlerId string, streamName string, stream *os.File) {
|
||||||
defer stream.Close()
|
defer stream.Close()
|
||||||
execLog := log.New(os.Stdout, "", log.Ldate|log.Ltime|log.LUTC|log.Lmicroseconds)
|
execLog := log.New(logHandler, "", log.Ldate|log.Ltime|log.LUTC|log.Lmicroseconds)
|
||||||
scanner := bufio.NewScanner(stream)
|
scanner := bufio.NewScanner(stream)
|
||||||
for scanner.Scan() {
|
for scanner.Scan() {
|
||||||
execLog.Printf("%s %s: %s", handlerId, streamName, scanner.Text())
|
execLog.Printf("%s %s: %s", handlerId, streamName, scanner.Text())
|
||||||
|
|||||||
@@ -17,12 +17,15 @@
|
|||||||
package mux
|
package mux
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
|
|
||||||
@@ -197,50 +200,32 @@ func TestHandlerBuilderRemovesHandlerWhenDone(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// func TestCreateLogMsgAdsPrefixInfo(t *testing.T) {
|
func TestHandlerBuilderLogToLogHandler(t *testing.T) {
|
||||||
// expected := "FOO"
|
data.Handlers = data.New()
|
||||||
|
route := model.Route{}
|
||||||
|
var got string
|
||||||
|
|
||||||
// msg := createLogMsg(expected, bytes.Buffer{}, bytes.Buffer{})
|
logHandler = new(bytes.Buffer)
|
||||||
|
|
||||||
// if msg.Prefix != expected {
|
spawner = func(h *model.Handler, out io.Writer, er io.Writer) error {
|
||||||
// t.Errorf("LogMsg doesn't contain expected Prefix. Expected: %s, got: %s", expected, msg.Prefix)
|
out.Write([]byte("this is stdout"))
|
||||||
// }
|
er.Write([]byte("this is stderr"))
|
||||||
// }
|
|
||||||
|
|
||||||
// func TestCreateLogMsgAdsStdOutInfo(t *testing.T) {
|
return nil
|
||||||
// expected := "FOO\nBAR"
|
}
|
||||||
// out := bytes.Buffer{}
|
|
||||||
// out.WriteString(expected)
|
|
||||||
|
|
||||||
// msg := createLogMsg("", out, bytes.Buffer{})
|
handlerBuilder(route).ServeHTTP(nil, nil)
|
||||||
|
|
||||||
// if strings.Join(msg.Messages, "\n") != expected {
|
// NOTE: logStream will write stdout and stderr contents eventually.
|
||||||
// t.Errorf("LogMsg doesn't contain expected payload. Expected: %s, got: %s", expected, msg.Prefix)
|
// 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)
|
||||||
|
|
||||||
// func TestCreateLogMsgAdsStdErrInfo(t *testing.T) {
|
got = logHandler.(*bytes.Buffer).String()
|
||||||
// expected := "FOO\nBAR"
|
if ! strings.Contains(got, "this is stdout") {
|
||||||
// err := bytes.Buffer{}
|
t.Errorf("Stdout not preserved. Actual: %+q", got)
|
||||||
// err.WriteString(expected)
|
}
|
||||||
|
if ! strings.Contains(got, "this is stderr") {
|
||||||
// msg := createLogMsg("", bytes.Buffer{}, err)
|
t.Errorf("Stderr not preserved. Actual: %+q", got)
|
||||||
|
}
|
||||||
// if strings.Join(msg.Messages, "\n") != expected {
|
}
|
||||||
// t.Errorf("LogMsg doesn't contain expected payload. Expected: %s, got: %s", expected, msg.Prefix)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// func TestCreateLogMsgAdsStdOutAndStdErrInfo(t *testing.T) {
|
|
||||||
// expected := "FOO\nBAR\nFOO BAZ"
|
|
||||||
// out := bytes.Buffer{}
|
|
||||||
// out.WriteString("FOO\nBAR\n")
|
|
||||||
// err := bytes.Buffer{}
|
|
||||||
// err.WriteString("FOO BAZ")
|
|
||||||
|
|
||||||
// msg := createLogMsg("", out, err)
|
|
||||||
|
|
||||||
// if strings.Join(msg.Messages, "\n") != expected {
|
|
||||||
// t.Errorf("LogMsg doesn't contain expected payload. Expected: %s, got: %s", expected, msg.Prefix)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|||||||
Reference in New Issue
Block a user