func TestClientKeepAlive(t *testing.T) { connect := connectPacket() connect.KeepAlive = 0 pingreq := packet.NewPingreqPacket() pingresp := packet.NewPingrespPacket() broker := tools.NewFlow(). Receive(connect). Send(connackPacket()). Receive(pingreq). Send(pingresp). Receive(pingreq). Send(pingresp). Receive(disconnectPacket()). End() done, port := fakeBroker(t, broker) c := New() c.Callback = errorCallback(t) var reqCounter int32 var respCounter int32 c.Logger = func(message string) { if strings.Contains(message, "Pingreq") { atomic.AddInt32(&reqCounter, 1) } else if strings.Contains(message, "Pingresp") { atomic.AddInt32(&respCounter, 1) } } config := NewConfig("tcp://localhost:" + port) config.KeepAlive = "100ms" future, err := c.Connect(config) assert.NoError(t, err) assert.NoError(t, future.Wait()) assert.False(t, future.SessionPresent) assert.Equal(t, packet.ConnectionAccepted, future.ReturnCode) <-time.After(250 * time.Millisecond) err = c.Disconnect() assert.NoError(t, err) assert.Equal(t, int32(2), atomic.LoadInt32(&reqCounter)) assert.Equal(t, int32(2), atomic.LoadInt32(&respCounter)) <-done }
func TestClientExpectedConnack(t *testing.T) { broker := tools.NewFlow(). Receive(connectPacket()). Send(packet.NewPingrespPacket()). End() done, port := fakeBroker(t, broker) wait := make(chan struct{}) c := New() c.Callback = func(msg *packet.Message, err error) { assert.Nil(t, msg) assert.Equal(t, ErrClientExpectedConnack, err) close(wait) } future, err := c.Connect(NewConfig("tcp://localhost:" + port)) assert.NoError(t, err) assert.Equal(t, ErrFutureCanceled, future.Wait()) <-done <-wait }