func TestClientInvalidPackets(t *testing.T) { c := New() // state not connecting err := c.processConnack(packet.NewConnackPacket()) assert.NoError(t, err) c.state.set(clientConnecting) // missing future err = c.processSuback(packet.NewSubackPacket()) assert.NoError(t, err) // missing future err = c.processUnsuback(packet.NewUnsubackPacket()) assert.NoError(t, err) // missing future err = c.processPubrel(0) assert.NoError(t, err) // missing future err = c.processPubackAndPubcomp(0) assert.NoError(t, err) }
func TestServiceUnsubscribe(t *testing.T) { unsubscribe := packet.NewUnsubscribePacket() unsubscribe.Topics = []string{"test"} unsubscribe.PacketID = 1 unsuback := packet.NewUnsubackPacket() unsuback.PacketID = 1 broker := tools.NewFlow(). Receive(connectPacket()). Send(connackPacket()). Receive(unsubscribe). Send(unsuback). Receive(disconnectPacket()). End() done, port := fakeBroker(t, broker) online := make(chan struct{}) offline := make(chan struct{}) s := NewService() s.OnlineCallback = func(resumed bool) { assert.False(t, resumed) close(online) } s.OfflineCallback = func() { close(offline) } s.Start(NewConfig("tcp://localhost:" + port)) <-online s.Unsubscribe("test").Wait() s.Stop(true) <-offline <-done }
func TestClientUnsubscribe(t *testing.T) { unsubscribe := packet.NewUnsubscribePacket() unsubscribe.Topics = []string{"test"} unsubscribe.PacketID = 1 unsuback := packet.NewUnsubackPacket() unsuback.PacketID = 1 broker := tools.NewFlow(). Receive(connectPacket()). Send(connackPacket()). Receive(unsubscribe). Send(unsuback). Receive(disconnectPacket()). End() done, port := fakeBroker(t, broker) c := New() c.Callback = errorCallback(t) future, err := c.Connect(NewConfig("tcp://localhost:" + port)) assert.NoError(t, err) assert.NoError(t, future.Wait()) assert.False(t, future.SessionPresent) assert.Equal(t, packet.ConnectionAccepted, future.ReturnCode) unsubscribeFuture, err := c.Unsubscribe("test") assert.NoError(t, err) assert.NoError(t, unsubscribeFuture.Wait()) err = c.Disconnect() assert.NoError(t, err) <-done }