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:
pancho horrillo
2020-12-15 17:17:17 +01:00
parent 6ec9b54670
commit 58fae53e2e
2 changed files with 29 additions and 42 deletions
+3 -1
View File
@@ -20,6 +20,7 @@ import (
"bufio"
"log"
"net/http"
"io"
"os"
"github.com/google/uuid"
@@ -31,6 +32,7 @@ import (
var spawner = spawn.Spawn
var idGenerator = uuid.NewUUID
var logHandler io.Writer = os.Stdout
func handlerBuilder(route model.Route) http.Handler {
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) {
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)
for scanner.Scan() {
execLog.Printf("%s %s: %s", handlerId, streamName, scanner.Text())
+26 -41
View File
@@ -17,12 +17,15 @@
package mux
import (
"bytes"
"errors"
"io"
"net/http"
"net/http/httptest"
"reflect"
"strings"
"testing"
"time"
"github.com/google/uuid"
@@ -197,50 +200,32 @@ func TestHandlerBuilderRemovesHandlerWhenDone(t *testing.T) {
}
}
// func TestCreateLogMsgAdsPrefixInfo(t *testing.T) {
// expected := "FOO"
func TestHandlerBuilderLogToLogHandler(t *testing.T) {
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 {
// t.Errorf("LogMsg doesn't contain expected Prefix. Expected: %s, got: %s", expected, msg.Prefix)
// }
// }
spawner = func(h *model.Handler, out io.Writer, er io.Writer) error {
out.Write([]byte("this is stdout"))
er.Write([]byte("this is stderr"))
// func TestCreateLogMsgAdsStdOutInfo(t *testing.T) {
// expected := "FOO\nBAR"
// out := bytes.Buffer{}
// out.WriteString(expected)
return nil
}
// msg := createLogMsg("", out, bytes.Buffer{})
handlerBuilder(route).ServeHTTP(nil, nil)
// if strings.Join(msg.Messages, "\n") != expected {
// t.Errorf("LogMsg doesn't contain expected payload. Expected: %s, got: %s", expected, msg.Prefix)
// }
// }
// 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)
// func TestCreateLogMsgAdsStdErrInfo(t *testing.T) {
// expected := "FOO\nBAR"
// err := bytes.Buffer{}
// err.WriteString(expected)
// msg := createLogMsg("", bytes.Buffer{}, err)
// 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)
// }
// }
got = logHandler.(*bytes.Buffer).String()
if ! strings.Contains(got, "this is stdout") {
t.Errorf("Stdout not preserved. Actual: %+q", got)
}
if ! strings.Contains(got, "this is stderr") {
t.Errorf("Stderr not preserved. Actual: %+q", got)
}
}