/*
**
** Copyright 2013, Jules White
**
**
*/
package org.magnum.soda.server.wamp.test;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.io.IOException;
import java.util.UUID;
import org.junit.Test;
import org.magnum.soda.server.wamp.ClientId;
import org.magnum.soda.server.wamp.WampServer;
import org.magnum.soda.server.wamp.WampServerListener;
import org.magnum.soda.server.wamp.common.Channel;
import org.magnum.soda.server.wamp.messages.MessageMapper;
import org.magnum.soda.server.wamp.messages.PublishMessage;
import org.magnum.soda.server.wamp.messages.SubscribeMessage;
import org.mockito.ArgumentCaptor;
public class WampServerTest {
@Test
public void testClientConnect() throws Exception {
WampServerListener listener = mock(WampServerListener.class);
Channel chnld = mock(Channel.class);
WampServer server = new WampServer();
server.addListener(listener);
server.addClient(chnld);
ArgumentCaptor<ClientId> captor = ArgumentCaptor.forClass(ClientId.class);
verify(chnld).handle(any(String.class));
verify(listener).clientConnected(captor.capture());
}
@Test
public void testClientDisonnect() throws Exception {
WampServerListener listener = mock(WampServerListener.class);
Channel chnld = mock(Channel.class);
WampServer server = new WampServer();
server.addListener(listener);
server.addClient(chnld);
ArgumentCaptor<ClientId> captor = ArgumentCaptor.forClass(ClientId.class);
verify(chnld).handle(any(String.class));
verify(listener).clientConnected(captor.capture());
String topic = UUID.randomUUID().toString();
SubscribeMessage msg = new SubscribeMessage(topic);
ClientId clientId = captor.getValue();
server.handleIncomingMessage(clientId, MessageMapper.toJson(msg));
verify(listener).clientSubscribedToTopic(clientId, topic);
doThrow(new IOException()).when(chnld).handle(any(String.class));
PublishMessage pub = new PublishMessage(topic);
String json = MessageMapper.toJson(pub);
server.handleIncomingMessage(clientId, json);
verify(listener).clientDisconnected(clientId);
}
@Test
public void testPubSub() throws Exception {
WampServerListener listener = mock(WampServerListener.class);
Channel chnld = mock(Channel.class);
WampServer server = new WampServer();
server.addListener(listener);
server.addClient(chnld);
ArgumentCaptor<ClientId> captor = ArgumentCaptor.forClass(ClientId.class);
verify(listener).clientConnected(captor.capture());
ClientId clientId = captor.getValue();
String topic = UUID.randomUUID().toString();
SubscribeMessage msg = new SubscribeMessage(topic);
server.handleIncomingMessage(clientId, MessageMapper.toJson(msg));
verify(listener).clientSubscribedToTopic(clientId, topic);
PublishMessage pub = new PublishMessage(topic);
String json = MessageMapper.toJson(pub);
server.handleIncomingMessage(clientId, json);
//should be twice due to the welcome msg
verify(chnld,times(2)).handle(any(String.class));
}
}