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 103 104 105 106 107 108
|
package utils
import (
"testing"
"time"
"github.com/NeowayLabs/wabbit"
)
func TestBroadcast(t *testing.T) {
spread := NewErrBroadcast()
r := make(chan wabbit.Error)
spread.Add(r)
go func() {
spread.Write(NewError(1337, "teste", true, true))
}()
select {
case <-time.After(5 * time.Second):
t.Errorf("Broadcast not working....")
return
case v := <-r:
if v == nil {
t.Errorf("Invalid value for err...")
return
}
if v.Code() != 1337 || v.Reason() != "teste" {
t.Errorf("Broadcast not working...")
return
}
}
}
func TestBroadcastDelete(t *testing.T) {
tests := []struct {
name string
listener int
placement int
}{
{
name: "delete from zero listener",
listener: 0,
},
{
name: "delete from one listener",
listener: 1,
placement: 0,
},
{
name: "delete the first from 64 listeners",
listener: 64,
placement: 0,
},
{
name: "delete the middle from 64 listeners",
listener: 64,
placement: 31,
},
{
name: "delete the last from 64 listeners",
listener: 64,
placement: 63,
},
{
name: "delete out of bound from 64 listeners",
listener: 64,
placement: 64,
},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
spread := NewErrBroadcast()
del := make(chan wabbit.Error)
for i := 0; i < tc.listener; i++ {
if i == tc.placement {
spread.Add(del)
} else {
spread.Add(make(chan wabbit.Error))
}
}
if tc.placement < tc.listener {
i, ok := spread.findIndex(del)
if !ok || i != tc.placement {
t.Errorf("add failed")
}
}
spread.Delete(del)
_, ok := spread.findIndex(del)
if ok {
t.Errorf("delete failed")
}
if tc.placement < tc.listener {
got, want := len(spread.listeners), tc.listener-1
if got != want {
t.Errorf("unexpected listner size:\n- want: %d\n- got: %d",
want, got)
}
}
})
}
}
|