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  }