github.com/influx6/npkg@v0.8.8/natomic/signal_test.go (about) 1 package natomic 2 3 import ( 4 "sync/atomic" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestRespondGroupAtom(t *testing.T) { 11 var group ResponderGroup 12 13 var started = make(chan struct{}, 1) 14 group.Start(started) 15 <-started 16 17 require.True(t, group.running()) 18 19 var signals signalDelivery 20 require.NoError(t, group.AddGuaranteed(&signals, started)) 21 <-started 22 23 var atom = NewAtom(&group) 24 atom.Set(1) 25 require.Equal(t, 1, atom.Read()) 26 27 group.Close() 28 29 require.Equal(t, int(signals.event), 1) 30 } 31 32 func TestRespondGroup(t *testing.T) { 33 var group ResponderGroup 34 require.False(t, group.running()) 35 36 var started = make(chan struct{}, 1) 37 group.Start(started) 38 <-started 39 require.True(t, group.running()) 40 41 var signals signalDelivery 42 require.NoError(t, group.AddGuaranteed(&signals, started)) 43 <-started 44 45 require.Len(t, group.responders, 1) 46 47 var _, added = group.responders[&signals] 48 require.True(t, added) 49 50 group.Respond(event{}) 51 group.Respond(event{}) 52 group.Respond(event{}) 53 group.Respond(event{}) 54 55 require.Equal(t, int(signals.event), 4) 56 57 group.Close() 58 59 _, added = group.responders[&signals] 60 require.False(t, added) 61 } 62 63 type event struct{} 64 65 func (event) Target() string { 66 return "target" 67 } 68 69 func (event) Source() string { 70 return "cli" 71 } 72 73 func (event) Type() string { 74 return "event" 75 } 76 77 type signalDelivery struct { 78 event int64 79 } 80 81 func (s *signalDelivery) Respond(_ Signal) { 82 atomic.AddInt64(&s.event, 1) 83 }