|
@@ -0,0 +1,153 @@
|
|
|
+package io_writer_to_logger
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "io"
|
|
|
+ "strings"
|
|
|
+ "testing"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+func TestLogger1(t *testing.T) {
|
|
|
+ tc := []string{
|
|
|
+ "hello",
|
|
|
+ "gensoukyo",
|
|
|
+ "satori",
|
|
|
+ "koishi",
|
|
|
+ "cirno",
|
|
|
+ "reimu",
|
|
|
+ }
|
|
|
+ lines := make([]string, 0)
|
|
|
+ lw := NewWriterLogWrapper(func(msg string) {
|
|
|
+ t.Log("[OUT] new line: ", msg)
|
|
|
+ lines = append(lines, msg)
|
|
|
+ })
|
|
|
+ waitCh := make(chan int)
|
|
|
+ go func() {
|
|
|
+ lw.Run()
|
|
|
+ waitCh <- 0
|
|
|
+ }()
|
|
|
+ t.Log("[LOG] writing...")
|
|
|
+ for _, v := range tc {
|
|
|
+ writeLineTest(t, lw, v)
|
|
|
+ }
|
|
|
+ t.Log("[LOG] closing...")
|
|
|
+ _ = lw.Close()
|
|
|
+ t.Log("[LOG] verifying...")
|
|
|
+ verifyStringArray(t, tc, lines)
|
|
|
+ t.Log("[LOG] wait for routine exit...")
|
|
|
+ <-waitCh
|
|
|
+ t.Log("[LOG] done.")
|
|
|
+}
|
|
|
+
|
|
|
+func writeLineTest(t *testing.T, w io.Writer, a ...interface{}) {
|
|
|
+ t.Log("[LOG] write line")
|
|
|
+ _, err := fmt.Fprintln(w, a...)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("[ERR] failed to write line: %v", err)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func writeTest(t *testing.T, w io.Writer, a ...interface{}) {
|
|
|
+ t.Log("[LOG] write")
|
|
|
+ _, err := fmt.Fprint(w, a...)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("[ERR] failed to write line: %v", err)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func verifyStringArray(t *testing.T, ref, data []string) {
|
|
|
+ if len(ref) != len(data) {
|
|
|
+ t.Fatalf("[ERR] len(ref) != len(data), ref: %d, data: %d", len(ref), len(data))
|
|
|
+ }
|
|
|
+ for i, v := range ref {
|
|
|
+ if v != data[i] {
|
|
|
+ t.Fatalf("[ERR] ref[%d] != data[%d], ref: %s, data: %s", i, i, ref, data)
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestLogger2(t *testing.T) {
|
|
|
+ tc := [][]string{
|
|
|
+ {"hello"},
|
|
|
+ {"gensou", "kyo"},
|
|
|
+ {"sat", "ori"},
|
|
|
+ {"koishi"},
|
|
|
+ {"cirn", "o"},
|
|
|
+ {"r", "eimu"},
|
|
|
+ }
|
|
|
+ lines := make([]string, 0)
|
|
|
+ lw := NewWriterLogWrapper(func(msg string) {
|
|
|
+ t.Log("[OUT] new line: ", msg)
|
|
|
+ lines = append(lines, msg)
|
|
|
+ })
|
|
|
+ waitCh := make(chan int)
|
|
|
+ go func() {
|
|
|
+ lw.Run()
|
|
|
+ waitCh <- 0
|
|
|
+ }()
|
|
|
+ t.Log("[LOG] writing...")
|
|
|
+ for _, v1 := range tc {
|
|
|
+ l := len(v1)
|
|
|
+ for i, v2 := range v1 {
|
|
|
+ if i == l-1 {
|
|
|
+ writeLineTest(t, lw, v2)
|
|
|
+ } else {
|
|
|
+ writeTest(t, lw, v2)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ t.Log("[LOG] closing...")
|
|
|
+ _ = lw.Close()
|
|
|
+ t.Log("[LOG] verifying...")
|
|
|
+ verifyString2DArray(t, tc, lines)
|
|
|
+ t.Log("[LOG] wait for routine exit...")
|
|
|
+ <-waitCh
|
|
|
+ t.Log("[LOG] done.")
|
|
|
+}
|
|
|
+
|
|
|
+func verifyString2DArray(t *testing.T, ref [][]string, data []string) {
|
|
|
+ if len(ref) != len(data) {
|
|
|
+ t.Fatalf("[ERR] len(ref) != len(data), ref: %d, data: %d", len(ref), len(data))
|
|
|
+ }
|
|
|
+ for i, v := range ref {
|
|
|
+ na := strings.Join(v, "")
|
|
|
+ if na != data[i] {
|
|
|
+ t.Fatalf("[ERR] ref[%d] != data[%d], ref: %s, data: %s", i, i, ref, data)
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestLogger3(t *testing.T) {
|
|
|
+ verify := []string{
|
|
|
+ "hello",
|
|
|
+ "test",
|
|
|
+ "foo",
|
|
|
+ "bar",
|
|
|
+ }
|
|
|
+ lines := make([]string, 0)
|
|
|
+ lw := NewWriterLogWrapper(func(msg string) {
|
|
|
+ t.Log("[OUT] new line: ", msg)
|
|
|
+ lines = append(lines, msg)
|
|
|
+ })
|
|
|
+ waitCh := make(chan int)
|
|
|
+ go func() {
|
|
|
+ lw.Run()
|
|
|
+ waitCh <- 0
|
|
|
+ }()
|
|
|
+ t.Log("[LOG] writing...")
|
|
|
+ writeTest(t, lw, "hel")
|
|
|
+ writeLineTest(t, lw, "lo")
|
|
|
+ writeLineTest(t, lw, "test")
|
|
|
+ writeLineTest(t, lw, "foo")
|
|
|
+ writeTest(t, lw, "bar")
|
|
|
+ time.Sleep(time.Second)
|
|
|
+ t.Log("[LOG] closing...")
|
|
|
+ _ = lw.Close()
|
|
|
+ time.Sleep(time.Second)
|
|
|
+ t.Log("[LOG] verifying...")
|
|
|
+ verifyStringArray(t, verify, lines)
|
|
|
+ t.Log("[LOG] wait for routine exit...")
|
|
|
+ <-waitCh
|
|
|
+ t.Log("[LOG] done.")
|
|
|
+}
|