package events import ( "strings" "testing" "time" ) func TestLogWriterLines(t *testing.T) { lbus := NewLogBus(16) ch, unsub := lbus.Subscribe() defer unsub() w := NewLogWriter(lbus) if _, err := w.Write([]byte("first line\nsecond line\n")); err != nil { t.Fatalf("Write: %v", err) } first := receiveOne(t, ch) ll, ok := first.(LogLine) if !ok { t.Fatalf("got %T, want LogLine", first) } if ll.Text != "first line" || ll.Level != "log" { t.Fatalf("unexpected first line: %+v", ll) } second := receiveOne(t, ch) if ll, ok := second.(LogLine); !ok || ll.Text != "second line" { t.Fatalf("unexpected second line: %+v", second) } } func TestLogWriterPartialLine(t *testing.T) { lbus := NewLogBus(16) ch, unsub := lbus.Subscribe() defer unsub() w := NewLogWriter(lbus) if _, err := w.Write([]byte("partial")); err != nil { t.Fatalf("Write: %v", err) } select { case got := <-ch: t.Fatalf("partial line should not be published yet, got %#v", got) case <-time.After(150 * time.Millisecond): } if _, err := w.Write([]byte(" line\n")); err != nil { t.Fatalf("Write: %v", err) } got := receiveOne(t, ch) ll, ok := got.(LogLine) if !ok || ll.Text != "partial line" { t.Fatalf("unexpected: %#v", got) } } func TestLogWriterMultiSplit(t *testing.T) { lbus := NewLogBus(16) ch, unsub := lbus.Subscribe() defer unsub() w := NewLogWriter(lbus) if _, err := w.Write([]byte("line1\nline2\nline3\n")); err != nil { t.Fatalf("Write: %v", err) } var texts []string for i := 0; i < 3; i++ { ev := receiveOne(t, ch) texts = append(texts, ev.(LogLine).Text) } if strings.Join(texts, ",") != "line1,line2,line3" { t.Fatalf("got %v", texts) } }