pkg.re/essentialkaos/ek.10@v12.41.0+incompatible/events/events_test.go (about) 1 package events 2 3 // ////////////////////////////////////////////////////////////////////////////////// // 4 // // 5 // Copyright (c) 2022 ESSENTIAL KAOS // 6 // Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0> // 7 // // 8 // ////////////////////////////////////////////////////////////////////////////////// // 9 10 import ( 11 "sync/atomic" 12 "testing" 13 "time" 14 15 . "pkg.re/essentialkaos/check.v1" 16 ) 17 18 // ////////////////////////////////////////////////////////////////////////////////// // 19 20 type EventsSuite struct{} 21 22 // ////////////////////////////////////////////////////////////////////////////////// // 23 24 func Test(t *testing.T) { TestingT(t) } 25 26 // ////////////////////////////////////////////////////////////////////////////////// // 27 28 var _ = Suite(&EventsSuite{}) 29 30 var counter uint32 31 32 // ////////////////////////////////////////////////////////////////////////////////// // 33 34 func (s *EventsSuite) TestBasicErrors(c *C) { 35 var d *Dispatcher 36 37 c.Assert(d.AddHandler("test", basicTestHandler), NotNil) 38 c.Assert(d.RemoveHandler("test", basicTestHandler), NotNil) 39 c.Assert(d.Dispatch("test", nil), NotNil) 40 c.Assert(d.HasHandler("test", nil), Equals, false) 41 c.Assert(d.DispatchAndWait("test", nil), NotNil) 42 43 c.Assert(validateArguments(d, "test", basicTestHandler, true), NotNil) 44 45 d = NewDispatcher() 46 47 c.Assert(d.AddHandler("test", basicTestHandler), IsNil) 48 c.Assert(d.AddHandler("test", basicTestHandler), NotNil) 49 c.Assert(d.RemoveHandler("test", basicTestHandler), IsNil) 50 c.Assert(d.RemoveHandler("test", basicTestHandler), NotNil) 51 52 c.Assert(d.Dispatch("unknown", basicTestHandler), NotNil) 53 c.Assert(d.DispatchAndWait("unknown", basicTestHandler), NotNil) 54 55 c.Assert(validateArguments(d, "", basicTestHandler, true), NotNil) 56 c.Assert(validateArguments(d, "test", nil, true), NotNil) 57 } 58 59 func (s *EventsSuite) TestDispatch(c *C) { 60 counter = 0 61 62 d := NewDispatcher() 63 64 c.Assert(d.AddHandler("test", asyncTestHandler1), IsNil) 65 c.Assert(d.AddHandler("test", asyncTestHandler2), IsNil) 66 c.Assert(d.HasHandler("test", asyncTestHandler1), Equals, true) 67 c.Assert(d.HasHandler("test", asyncTestHandler2), Equals, true) 68 69 c.Assert(d.Dispatch("test", uint32(3)), IsNil) 70 71 time.Sleep(15 * time.Millisecond) 72 73 c.Assert(atomic.LoadUint32(&counter), Equals, uint32(7)) 74 } 75 76 func (s *EventsSuite) TestDispatchAndWait(c *C) { 77 counter = 0 78 79 d := NewDispatcher() 80 81 c.Assert(d.AddHandler("test", asyncTestHandler1), IsNil) 82 c.Assert(d.AddHandler("test", asyncTestHandler2), IsNil) 83 c.Assert(d.HasHandler("test", asyncTestHandler1), Equals, true) 84 c.Assert(d.HasHandler("test", asyncTestHandler2), Equals, true) 85 86 c.Assert(d.DispatchAndWait("test", uint32(5)), IsNil) 87 88 c.Assert(atomic.LoadUint32(&counter), Equals, uint32(11)) 89 } 90 91 // ////////////////////////////////////////////////////////////////////////////////// // 92 93 func basicTestHandler(payload interface{}) { 94 return 95 } 96 97 func asyncTestHandler1(payload interface{}) { 98 atomic.AddUint32(&counter, payload.(uint32)) 99 } 100 101 func asyncTestHandler2(payload interface{}) { 102 atomic.AddUint32(&counter, payload.(uint32)+1) 103 }