package observer import ( "fmt" "github.com/stretchr/testify/assert" "loafle.com/overflow/agent_api/messages" "testing" "time" ) type Test struct { Id string } func TestAddNotifyObserver(t *testing.T) { // others package notify call go func() { time.Sleep(1 * time.Second) Notify("test", Test{Id: "test"}) }() ch := make(chan interface{}, 0) Add("test", ch) dd := <-ch bb := dd.(Test) assert.Equal(t, "test", bb.Id) } func TestRemoveObserver(t *testing.T) { ch := make(chan interface{}, 0) Add("test", ch) err := Remove("test", ch) assert.Equal(t, nil, err) } // +build ignore func TestMultiAddObserver(t *testing.T) { ch1 := make(chan interface{}, 0) ch2 := make(chan interface{}, 0) ch3 := make(chan interface{}, 0) ch4 := make(chan interface{}, 0) ch5 := make(chan interface{}, 0) go func() { d := <-ch1 dd := d.(Test) assert.Equal(t, dd.Id, "test") }() go func() { d := <-ch2 dd := d.(Test) assert.Equal(t, dd.Id, "test") }() go func() { d := <-ch3 dd := d.(Test) assert.Equal(t, dd.Id, "test") }() go func() { d := <-ch4 dd := d.(Test) assert.Equal(t, dd.Id, "test") }() go func() { d := <-ch4 dd := d.(Test) assert.Equal(t, dd.Id, "test") }() Add("test", ch1) Add("test", ch2) Add("test", ch3) Add("test", ch4) Add("test", ch5) // others package notify call go func() { time.Sleep(1 * time.Second) Notify("test", Test{Id: "test"}) time.Sleep(2 * time.Second) Remove(messages.CRAWLER_ADD, ch1) Remove("test", ch2) Remove("test", ch3) Remove("test", ch4) Remove("test", ch5) }() time.Sleep(1 * time.Second) } func TestStringNotify(t *testing.T) { ch := make(chan interface{}, 0) Add("test", ch) go func() { data := <-ch str := data.(string) fmt.Println(str) }() Notify("test", "testsetasetaset") time.Sleep(1 * time.Second) }