/*
**
** Copyright 2013, Jules White
**
**
*/
package org.magnum.soda.server.wamp.test;
import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.junit.Test;
import org.magnum.soda.msg.Msg;
import org.magnum.soda.protocol.generic.DefaultProtocol;
import org.magnum.soda.proxy.ObjRef;
import org.magnum.soda.server.wamp.ClientId;
import org.magnum.soda.server.wamp.ClientIdFactory;
import org.magnum.soda.server.wamp.SourceHonestyFilter;
import org.magnum.soda.server.wamp.messages.PublishMessage;
import org.magnum.soda.server.wamp.messages.SubscribeMessage;
import org.magnum.soda.svc.InvocationInfo;
import org.magnum.soda.svc.ObjInvocationMsg;
import org.magnum.soda.transport.MsgContainer;
import com.fasterxml.jackson.databind.ObjectMapper;
public class SourceHonestyFilterTest {
@Test
public void testDuplicateSubscriberDetection() throws Exception {
DefaultProtocol p1 = new DefaultProtocol();
SourceHonestyFilter filter = new SourceHonestyFilter(p1);
ClientIdFactory fact = new ClientIdFactory();
ClientId c1 = fact.getNext();
ClientId c2 = fact.getNext();
assertNotNull(filter.filterSubscribe(c1, new SubscribeMessage(c1.toString())));
filter.clientSubscribedToTopic(c1, c1.toString());
assertNotNull(filter.filterSubscribe(c2, new SubscribeMessage(c2.toString())));
filter.clientSubscribedToTopic(c2, c2.toString());
assertNull(filter.filterSubscribe(c1, new SubscribeMessage(c2.toString())));
assertNull(filter.filterSubscribe(c2, new SubscribeMessage(c1.toString())));
}
@Test
public void testFilteringHonesty() throws Exception {
DefaultProtocol p1 = new DefaultProtocol();
SourceHonestyFilter filter = new SourceHonestyFilter(p1);
ClientIdFactory fact = new ClientIdFactory();
ClientId c1 = fact.getNext();
ClientId c2 = fact.getNext();
filter.clientSubscribedToTopic(c1, c1.toString());
filter.clientSubscribedToTopic(c2, c2.toString());
ObjInvocationMsg msg = new ObjInvocationMsg();
msg.setSource(c1.toString());
InvocationInfo i = new InvocationInfo();
i.setParameters(new Object[]{});
i.setMethod("a");
msg.setTargetObjectId(ObjRef.fromObjUri("ws://asdf#1"));
msg.setInvocation(i);
MsgContainer mc = p1.outbound(msg);
PublishMessage m1 = new PublishMessage(c1.toString());
m1.setPayload(mc);
assertEquals(m1, filter.filterPublish(c1, m1));
assertNull(filter.filterPublish(c2, m1));
assertEquals(m1, filter.filterPublish(c1, m1));
msg.setSource(c2.toString());
mc = p1.outbound(msg);
m1.setPayload(mc);
assertNull(filter.filterPublish(c1, m1));
assertEquals(m1, filter.filterPublish(c2, m1));
}
}