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"
|
||||
"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())
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user