github.com/TIBCOSoftware/flogo-lib@v0.5.9/engine/channels/channels_test.go (about)

     1  package channels
     2  
     3  import (
     4  	"testing"
     5  	"github.com/stretchr/testify/assert"
     6  	"time"
     7  	"fmt"
     8  )
     9  
    10  func TestNew_Started(t *testing.T) {
    11  	channels = map[string]*channelImpl{}
    12  	active = true
    13  	channel, err := New("test1", 5)
    14  	assert.Nil(t, channel)
    15  	assert.NotNil(t, err)
    16  }
    17  
    18  func TestNew(t *testing.T) {
    19  	channels = map[string]*channelImpl{}
    20  	active = false
    21  	channel, err := New("test1", 5)
    22  	assert.Nil(t, err)
    23  	assert.NotNil(t, channel)
    24  }
    25  
    26  func TestNewDup(t *testing.T) {
    27  	channels = map[string]*channelImpl{}
    28  	active = false
    29  	channel, err := New("test1", 5)
    30  	assert.Nil(t, err)
    31  	assert.NotNil(t, channel)
    32  	channel, err = New("test1", 5)
    33  	assert.Nil(t, channel)
    34  	assert.NotNil(t, err)
    35  }
    36  
    37  func TestChannel_Name(t *testing.T) {
    38  	channels = map[string]*channelImpl{}
    39  	active = false
    40  	channel, err := New("test1", 5)
    41  	assert.Nil(t, err)
    42  	cImpl := channel.(*channelImpl)
    43  	assert.Equal(t, "test1", cImpl.name)
    44  }
    45  
    46  func TestStart(t *testing.T) {
    47  	channels = map[string]*channelImpl{}
    48  	channel, err := New("test1", 5)
    49  	assert.Nil(t, err)
    50  	assert.NotNil(t, channel)
    51  	Start()
    52  	defer Stop()
    53  	assert.True(t, active)
    54  
    55  	channel2, err2 := New("test2", 5)
    56  	assert.NotNil(t, err2)
    57  	assert.Nil(t, channel2)
    58  
    59  	cImpl := channel.(*channelImpl)
    60  	assert.True(t, cImpl.active)
    61  }
    62  
    63  
    64  func TestChannel_Publish(t *testing.T) {
    65  	channels = map[string]*channelImpl{}
    66  	channel, err := New("test1", 1)
    67  	assert.Nil(t, err)
    68  	assert.NotNil(t, channel)
    69  
    70  	channel.Publish(1)
    71  
    72  	cImpl := channel.(*channelImpl)
    73  
    74  	select {
    75  	case msg := <-cImpl.ch:
    76  		assert.Equal(t,1,msg )
    77  	default:
    78  		assert.Fail(t, "no message received")
    79  	}
    80  }
    81  
    82  func TestChannel_PublishNoWait(t *testing.T) {
    83  	channels = map[string]*channelImpl{}
    84  	channel, err := New("test1", 1)
    85  	assert.Nil(t, err)
    86  	assert.NotNil(t, channel)
    87  
    88  	channel.Publish(1)
    89  	sent := channel.PublishNoWait(2)
    90  
    91  	assert.False(t, sent)
    92  }
    93  
    94  func TestChannel_AddListenerStarted(t *testing.T) {
    95  	channels = map[string]*channelImpl{}
    96  	channel, err := New("test1", 1)
    97  	assert.Nil(t, err)
    98  	assert.NotNil(t, channel)
    99  
   100  	cImpl := channel.(*channelImpl)
   101  	cImpl.Start()
   102  
   103  	err = cImpl.RegisterCallback(func(msg interface{}) {
   104  		//dummy
   105  	})
   106  	assert.NotNil(t, err)
   107  }
   108  
   109  
   110  func TestChannel_AddListener(t *testing.T) {
   111  	channels = map[string]*channelImpl{}
   112  	channel, err := New("test1", 1)
   113  	assert.Nil(t, err)
   114  	assert.NotNil(t, channel)
   115  
   116  	cImpl := channel.(*channelImpl)
   117  
   118  	err = cImpl.RegisterCallback(func(msg interface{}) {
   119  		//dummy
   120  	})
   121  	assert.Equal(t, 1, len(cImpl.callbacks))
   122  }
   123  
   124  type cbTester struct {
   125  	called int
   126  	val interface{}
   127  }
   128  
   129  func (cbt *cbTester)onMessage(msg interface{})  {
   130  	cbt.called++
   131  	cbt.val = msg
   132  	fmt.Printf("HERE\n")
   133  }
   134  
   135  
   136  func TestChannel_Callback(t *testing.T) {
   137  	channels = map[string]*channelImpl{}
   138  	channel, err := New("test1", 1)
   139  	assert.Nil(t, err)
   140  	assert.NotNil(t, channel)
   141  
   142  	cImpl := channel.(*channelImpl)
   143  
   144  	cbt := &cbTester{}
   145  	err = cImpl.RegisterCallback(cbt.onMessage)
   146  	Start()
   147  
   148  	channel.Publish(22)
   149  	time.Sleep(100 *time.Millisecond)
   150  	assert.Equal(t, 1, cbt.called)
   151  	assert.Equal(t, 22, cbt.val)
   152  }