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  }