iowrlog_test.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package io_writer_to_logger
  2. import (
  3. "fmt"
  4. "io"
  5. "strings"
  6. "testing"
  7. "time"
  8. )
  9. func TestLogger1(t *testing.T) {
  10. tc := []string{
  11. "hello",
  12. "gensoukyo",
  13. "satori",
  14. "koishi",
  15. "cirno",
  16. "reimu",
  17. }
  18. lines := make([]string, 0)
  19. lw := NewWriterLogWrapper(func(msg string) {
  20. t.Log("[OUT] new line: ", msg)
  21. lines = append(lines, msg)
  22. })
  23. waitCh := make(chan int)
  24. go func() {
  25. lw.Run()
  26. waitCh <- 0
  27. }()
  28. t.Log("[LOG] writing...")
  29. for _, v := range tc {
  30. writeLineTest(t, lw, v)
  31. }
  32. t.Log("[LOG] closing...")
  33. _ = lw.Close()
  34. t.Log("[LOG] verifying...")
  35. verifyStringArray(t, tc, lines)
  36. t.Log("[LOG] wait for routine exit...")
  37. <-waitCh
  38. t.Log("[LOG] done.")
  39. }
  40. func writeLineTest(t *testing.T, w io.Writer, a ...interface{}) {
  41. t.Log("[LOG] write line")
  42. _, err := fmt.Fprintln(w, a...)
  43. if err != nil {
  44. t.Fatalf("[ERR] failed to write line: %v", err)
  45. }
  46. }
  47. func writeTest(t *testing.T, w io.Writer, a ...interface{}) {
  48. t.Log("[LOG] write")
  49. _, err := fmt.Fprint(w, a...)
  50. if err != nil {
  51. t.Fatalf("[ERR] failed to write line: %v", err)
  52. }
  53. }
  54. func verifyStringArray(t *testing.T, ref, data []string) {
  55. if len(ref) != len(data) {
  56. t.Fatalf("[ERR] len(ref) != len(data), ref: %d, data: %d", len(ref), len(data))
  57. }
  58. for i, v := range ref {
  59. if v != data[i] {
  60. t.Fatalf("[ERR] ref[%d] != data[%d], ref: %s, data: %s", i, i, ref, data)
  61. }
  62. }
  63. }
  64. func TestLogger2(t *testing.T) {
  65. tc := [][]string{
  66. {"hello"},
  67. {"gensou", "kyo"},
  68. {"sat", "ori"},
  69. {"koishi"},
  70. {"cirn", "o"},
  71. {"r", "eimu"},
  72. }
  73. lines := make([]string, 0)
  74. lw := NewWriterLogWrapper(func(msg string) {
  75. t.Log("[OUT] new line: ", msg)
  76. lines = append(lines, msg)
  77. })
  78. waitCh := make(chan int)
  79. go func() {
  80. lw.Run()
  81. waitCh <- 0
  82. }()
  83. t.Log("[LOG] writing...")
  84. for _, v1 := range tc {
  85. l := len(v1)
  86. for i, v2 := range v1 {
  87. if i == l-1 {
  88. writeLineTest(t, lw, v2)
  89. } else {
  90. writeTest(t, lw, v2)
  91. }
  92. }
  93. }
  94. t.Log("[LOG] closing...")
  95. _ = lw.Close()
  96. t.Log("[LOG] verifying...")
  97. verifyString2DArray(t, tc, lines)
  98. t.Log("[LOG] wait for routine exit...")
  99. <-waitCh
  100. t.Log("[LOG] done.")
  101. }
  102. func verifyString2DArray(t *testing.T, ref [][]string, data []string) {
  103. if len(ref) != len(data) {
  104. t.Fatalf("[ERR] len(ref) != len(data), ref: %d, data: %d", len(ref), len(data))
  105. }
  106. for i, v := range ref {
  107. na := strings.Join(v, "")
  108. if na != data[i] {
  109. t.Fatalf("[ERR] ref[%d] != data[%d], ref: %s, data: %s", i, i, ref, data)
  110. }
  111. }
  112. }
  113. func TestLogger3(t *testing.T) {
  114. verify := []string{
  115. "hello",
  116. "test",
  117. "foo",
  118. "bar",
  119. }
  120. lines := make([]string, 0)
  121. lw := NewWriterLogWrapper(func(msg string) {
  122. t.Log("[OUT] new line: ", msg)
  123. lines = append(lines, msg)
  124. })
  125. waitCh := make(chan int)
  126. go func() {
  127. lw.Run()
  128. waitCh <- 0
  129. }()
  130. t.Log("[LOG] writing...")
  131. writeTest(t, lw, "hel")
  132. writeLineTest(t, lw, "lo")
  133. writeLineTest(t, lw, "test")
  134. writeLineTest(t, lw, "foo")
  135. writeTest(t, lw, "bar")
  136. time.Sleep(time.Second)
  137. t.Log("[LOG] closing...")
  138. _ = lw.Close()
  139. time.Sleep(time.Second)
  140. t.Log("[LOG] verifying...")
  141. verifyStringArray(t, verify, lines)
  142. t.Log("[LOG] wait for routine exit...")
  143. <-waitCh
  144. t.Log("[LOG] done.")
  145. }