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" "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())
+26 -41
View File
@@ -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)
// }
// }