/usr/share/gocode/src/github.com/hashicorp/serf/serf/coalesce_user_test.go is in golang-github-hashicorp-serf-dev 0.7.0~ds1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | package serf
import (
"reflect"
"testing"
"time"
)
func TestUserEventCoalesce_Basic(t *testing.T) {
outCh := make(chan Event, 64)
shutdownCh := make(chan struct{})
defer close(shutdownCh)
c := &userEventCoalescer{
events: make(map[string]*latestUserEvents),
}
inCh := coalescedEventCh(outCh, shutdownCh,
5*time.Millisecond, 5*time.Millisecond, c)
send := []Event{
UserEvent{
LTime: 1,
Name: "foo",
Coalesce: true,
},
UserEvent{
LTime: 2,
Name: "foo",
Coalesce: true,
},
UserEvent{
LTime: 2,
Name: "bar",
Payload: []byte("test1"),
Coalesce: true,
},
UserEvent{
LTime: 2,
Name: "bar",
Payload: []byte("test2"),
Coalesce: true,
},
}
for _, e := range send {
inCh <- e
}
var gotFoo, gotBar1, gotBar2 bool
timeout := time.After(10 * time.Millisecond)
USEREVENTFORLOOP:
for {
select {
case e := <-outCh:
ue := e.(UserEvent)
switch ue.Name {
case "foo":
if ue.LTime != 2 {
t.Fatalf("bad ltime for foo %#v", ue)
}
gotFoo = true
case "bar":
if ue.LTime != 2 {
t.Fatalf("bad ltime for bar %#v", ue)
}
if reflect.DeepEqual(ue.Payload, []byte("test1")) {
gotBar1 = true
}
if reflect.DeepEqual(ue.Payload, []byte("test2")) {
gotBar2 = true
}
}
case <-timeout:
break USEREVENTFORLOOP
}
}
if !gotFoo || !gotBar1 || !gotBar2 {
t.Fatalf("missing messages %v %v %v", gotFoo, gotBar1, gotBar2)
}
}
func TestUserEventCoalesce_passThrough(t *testing.T) {
cases := []struct {
e Event
handle bool
}{
{UserEvent{Coalesce: false}, false},
{UserEvent{Coalesce: true}, true},
{MemberEvent{Type: EventMemberJoin}, false},
{MemberEvent{Type: EventMemberLeave}, false},
{MemberEvent{Type: EventMemberFailed}, false},
}
for _, tc := range cases {
c := &userEventCoalescer{}
if tc.handle != c.Handle(tc.e) {
t.Fatalf("bad: %#v", tc.e)
}
}
}
|