mirror of
https://github.com/golang/go.git
synced 2025-05-05 15:43:04 +00:00
playground/socket: deflake test, remove sleep
Fixes golang/go#18275 Change-Id: Iedb0a21a3fe0b383a2e51fc92076d7fd005d71e6 Reviewed-on: https://go-review.googlesource.com/34277 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
a888bfdffa
commit
7d72743fce
@ -175,7 +175,7 @@ func startProcess(id, body string, dest chan<- *Message, opt *Options) *process
|
|||||||
)
|
)
|
||||||
go func() {
|
go func() {
|
||||||
defer close(done)
|
defer close(done)
|
||||||
for m := range buffer(limiter(out, p)) {
|
for m := range buffer(limiter(out, p), time.After) {
|
||||||
m.Id = id
|
m.Id = id
|
||||||
dest <- m
|
dest <- m
|
||||||
}
|
}
|
||||||
@ -259,7 +259,8 @@ func limiter(in <-chan *Message, p killer) <-chan *Message {
|
|||||||
// coalesced; when a message of a different kind is received, any buffered
|
// coalesced; when a message of a different kind is received, any buffered
|
||||||
// messages are flushed. When the given channel is closed, buffer flushes the
|
// messages are flushed. When the given channel is closed, buffer flushes the
|
||||||
// remaining buffered messages and closes the returned channel.
|
// remaining buffered messages and closes the returned channel.
|
||||||
func buffer(in <-chan *Message) <-chan *Message {
|
// The timeAfter func should be time.After. It exists for testing.
|
||||||
|
func buffer(in <-chan *Message, timeAfter func(time.Duration) <-chan time.Time) <-chan *Message {
|
||||||
out := make(chan *Message)
|
out := make(chan *Message)
|
||||||
go func() {
|
go func() {
|
||||||
defer close(out)
|
defer close(out)
|
||||||
@ -292,7 +293,7 @@ func buffer(in <-chan *Message) <-chan *Message {
|
|||||||
flush()
|
flush()
|
||||||
kind = m.Kind
|
kind = m.Kind
|
||||||
if tc == nil {
|
if tc == nil {
|
||||||
tc = time.After(msgDelay)
|
tc = timeAfter(msgDelay)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
buf = append(buf, m.Body...)
|
buf = append(buf, m.Body...)
|
||||||
|
@ -10,24 +10,28 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestBuffer(t *testing.T) {
|
func TestBuffer(t *testing.T) {
|
||||||
|
afterChan := make(chan time.Time)
|
||||||
ch := make(chan *Message)
|
ch := make(chan *Message)
|
||||||
go func() {
|
go func() {
|
||||||
ch <- &Message{Kind: "err", Body: "a"}
|
ch <- &Message{Kind: "err", Body: "a"}
|
||||||
ch <- &Message{Kind: "err", Body: "b"}
|
ch <- &Message{Kind: "err", Body: "b"}
|
||||||
ch <- &Message{Kind: "out", Body: "1"}
|
ch <- &Message{Kind: "out", Body: "1"}
|
||||||
ch <- &Message{Kind: "out", Body: "2"}
|
ch <- &Message{Kind: "out", Body: "2"}
|
||||||
time.Sleep(msgDelay * 2)
|
afterChan <- time.Time{} // value itself doesn't matter
|
||||||
ch <- &Message{Kind: "out", Body: "3"}
|
ch <- &Message{Kind: "out", Body: "3"}
|
||||||
ch <- &Message{Kind: "out", Body: "4"}
|
ch <- &Message{Kind: "out", Body: "4"}
|
||||||
close(ch)
|
close(ch)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
var ms []*Message
|
var ms []*Message
|
||||||
for m := range buffer(ch) {
|
timeAfter := func(d time.Duration) <-chan time.Time {
|
||||||
|
return afterChan
|
||||||
|
}
|
||||||
|
for m := range buffer(ch, timeAfter) {
|
||||||
ms = append(ms, m)
|
ms = append(ms, m)
|
||||||
}
|
}
|
||||||
if len(ms) != 3 {
|
if len(ms) != 3 {
|
||||||
t.Fatalf("got %v messages, want 2", len(ms))
|
t.Fatalf("got %v messages, want 3", len(ms))
|
||||||
}
|
}
|
||||||
if g, w := ms[0].Body, "ab"; g != w {
|
if g, w := ms[0].Body, "ab"; g != w {
|
||||||
t.Errorf("message 0 body = %q, want %q", g, w)
|
t.Errorf("message 0 body = %q, want %q", g, w)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user