/**
* Copyright 2007-2015, Kaazing Corporation. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kaazing.k3po.pcap.converter.internal;
import org.jmock.Mockery;
import org.junit.Test;
import org.kaazing.k3po.pcap.converter.internal.author.ConversationId;
import org.kaazing.k3po.pcap.converter.internal.author.RptScriptCreator;
import org.kaazing.k3po.pcap.converter.internal.author.SupportedProtocol;
import org.kaazing.k3po.pcap.converter.internal.author.coordinator.Coordinator;
import org.kaazing.k3po.pcap.converter.internal.author.coordinator.CoordinatorFactory;
import org.kaazing.k3po.pcap.converter.internal.author.emitter.Emitter;
import org.kaazing.k3po.pcap.converter.internal.author.emitter.EmitterFactory;
import org.kaazing.k3po.pcap.converter.internal.packet.Packet;
import org.kaazing.k3po.pcap.converter.internal.utils.PacketUtil;
public class RptScriptCreatorTest {
private final String ip1 = "111.111.111.111";
private final String ip2 = "222.222.222.222";
private final String ip3 = "333.333.333.333";
private final int port1 = 1;
private final int port2 = 2;
private final int port3 = 3;
@Test
public void testAddNonSupportedProtocolPacket() {
final Mockery context = new Mockery();
final EmitterFactory emitterFactory = context.mock(EmitterFactory.class);
final CoordinatorFactory coordinatorFactory = context.mock(CoordinatorFactory.class);
final Emitter creatorNote = context.mock(Emitter.class);
final Packet p1 = PacketUtil.createBasicPacket(ip1, ip2, port1, port2);
final Emitter dummyEmitter = context.mock(Emitter.class, "dummyEmitter");
context.checking(new RptScriptCreatorExpectations() {
{
willInitCreator(emitterFactory, creatorNote, dummyEmitter);
}
});
RptScriptCreator creator = new RptScriptCreator(emitterFactory, coordinatorFactory);
creator.addPacketToScripts(p1);
context.assertIsSatisfied();
}
@Test
public void testAddTcpPacket() {
final Mockery context = new Mockery();
final EmitterFactory emitterFactory = context.mock(EmitterFactory.class);
final CoordinatorFactory coordinatorFactory = context.mock(CoordinatorFactory.class);
final Emitter creatorNote = context.mock(Emitter.class);
final Packet p1 = PacketUtil.createBasicTcpPacket(ip1, ip2, port1, port2);
final Coordinator coord1 = context.mock(Coordinator.class);
final Emitter dummyEmitter = context.mock(Emitter.class, "dummyEmitter");
context.checking(new RptScriptCreatorExpectations() {
{
willInitCreator(emitterFactory, creatorNote, dummyEmitter);
oneOf(coordinatorFactory).getCoordinator(with(equal(new ConversationId(p1, SupportedProtocol.TCP))));
will(returnValue(coord1));
allowing(coord1).isFinished();
will(returnValue(false));
oneOf(coord1).startScript(p1);
}
});
RptScriptCreator creator = new RptScriptCreator(emitterFactory, coordinatorFactory);
creator.addPacketToScripts(p1);
context.assertIsSatisfied();
}
@Test
public void testConductTcpConversation() {
final Mockery context = new Mockery();
final EmitterFactory emitterFactory = context.mock(EmitterFactory.class);
final CoordinatorFactory coordinatorFactory = context.mock(CoordinatorFactory.class);
final Emitter creatorNote = context.mock(Emitter.class);
final Packet p1 = PacketUtil.createBasicTcpPacket(ip1, ip2, port1, port2);
final Packet p2 = PacketUtil.createBasicTcpPacket(ip1, ip2, port2, port1);
final Packet p3 = PacketUtil.createBasicTcpPacket(ip1, ip2, port1, port2);
final Coordinator coord1 = context.mock(Coordinator.class);
final Emitter dummyEmitter = context.mock(Emitter.class, "dummyEmitter");
context.checking(new RptScriptCreatorExpectations() {
{
willInitCreator(emitterFactory, creatorNote, dummyEmitter);
oneOf(coordinatorFactory).getCoordinator(with(equal(new ConversationId(p1, SupportedProtocol.TCP))));
will(returnValue(coord1));
allowing(coord1).isFinished();
will(returnValue(false));
oneOf(coord1).startScript(p1);
oneOf(coord1).conversation(p2);
oneOf(coord1).conversation(p3);
}
});
RptScriptCreator creator = new RptScriptCreator(emitterFactory, coordinatorFactory);
creator.addPacketToScripts(p1);
creator.addPacketToScripts(p2);
creator.addPacketToScripts(p3);
context.assertIsSatisfied();
}
@Test
public void testConductMultipleTcpConversation() {
final Mockery context = new Mockery();
final EmitterFactory emitterFactory = context.mock(EmitterFactory.class);
final CoordinatorFactory coordinatorFactory = context.mock(CoordinatorFactory.class);
final Emitter creatorNote = context.mock(Emitter.class);
final Packet p1 = PacketUtil.createBasicTcpPacket(ip1, ip2, port1, port2);
final Packet p2 = PacketUtil.createBasicTcpPacket(ip1, ip2, port2, port1);
final Packet p3 = PacketUtil.createBasicTcpPacket(ip1, ip1, port1, port2);
final Packet p4 = PacketUtil.createBasicTcpPacket(ip1, ip1, port1, port2);
final Packet p5 = PacketUtil.createBasicTcpPacket(ip3, ip2, port3, port2);
final Packet p6 = PacketUtil.createBasicTcpPacket(ip1, ip2, port1, port2);
final Coordinator coord1 = context.mock(Coordinator.class, "coord1");
final Coordinator coord2 = context.mock(Coordinator.class, "coord2");
final Coordinator coord3 = context.mock(Coordinator.class, "coord3");
final Emitter dummyEmitter = context.mock(Emitter.class, "dummyEmitter");
context.checking(new RptScriptCreatorExpectations() {
{
willInitCreator(emitterFactory, creatorNote, dummyEmitter);
oneOf(coordinatorFactory).getCoordinator(with(equal(new ConversationId(p1, SupportedProtocol.TCP))));
will(returnValue(coord1));
allowing(coord1).isFinished();
will(returnValue(false));
oneOf(coord1).startScript(p1);
oneOf(coord1).conversation(p2);
oneOf(coordinatorFactory).getCoordinator(with(equal(new ConversationId(p3, SupportedProtocol.TCP))));
will(returnValue(coord2));
allowing(coord2).isFinished();
will(returnValue(false));
oneOf(coord2).startScript(p3);
oneOf(coord2).conversation(p4);
oneOf(coordinatorFactory).getCoordinator(with(equal(new ConversationId(p5, SupportedProtocol.TCP))));
will(returnValue(coord3));
allowing(coord3).isFinished();
will(returnValue(false));
oneOf(coord3).startScript(p5);
oneOf(coord1).conversation(p6);
}
});
RptScriptCreator creator = new RptScriptCreator(emitterFactory, coordinatorFactory);
creator.addPacketToScripts(p1);
creator.addPacketToScripts(p2);
creator.addPacketToScripts(p3);
creator.addPacketToScripts(p4);
creator.addPacketToScripts(p5);
creator.addPacketToScripts(p6);
context.assertIsSatisfied();
}
@Test
public void testCommitToFile(){
final Mockery context = new Mockery();
final EmitterFactory emitterFactory = context.mock(EmitterFactory.class);
final CoordinatorFactory coordinatorFactory = context.mock(CoordinatorFactory.class);
final Emitter creatorNote = context.mock(Emitter.class);
final Packet p1 = PacketUtil.createBasicTcpPacket(ip1, ip2, port1, port2);
final Packet p2 = PacketUtil.createBasicTcpPacket(ip1, ip2, port2, port1);
final Packet p3 = PacketUtil.createBasicTcpPacket(ip1, ip1, port1, port2);
final Packet p4 = PacketUtil.createBasicTcpPacket(ip1, ip1, port1, port2);
final Packet p5 = PacketUtil.createBasicTcpPacket(ip3, ip2, port3, port2);
final Packet p6 = PacketUtil.createBasicTcpPacket(ip1, ip2, port1, port2);
final Coordinator coord1 = context.mock(Coordinator.class, "coord1");
final Coordinator coord2 = context.mock(Coordinator.class, "coord2");
final Coordinator coord3 = context.mock(Coordinator.class, "coord3");
final Emitter dummyEmitter = context.mock(Emitter.class, "dummyEmitter");
context.checking(new RptScriptCreatorExpectations() {
{
willInitCreator(emitterFactory, creatorNote, dummyEmitter);
oneOf(coordinatorFactory).getCoordinator(with(equal(new ConversationId(p1, SupportedProtocol.TCP))));
will(returnValue(coord1));
allowing(coord1).isFinished();
will(returnValue(false));
oneOf(coord1).startScript(p1);
oneOf(coord1).conversation(p2);
oneOf(coordinatorFactory).getCoordinator(with(equal(new ConversationId(p3, SupportedProtocol.TCP))));
will(returnValue(coord2));
allowing(coord2).isFinished();
will(returnValue(false));
oneOf(coord2).startScript(p3);
oneOf(coord2).conversation(p4);
oneOf(coordinatorFactory).getCoordinator(with(equal(new ConversationId(p5, SupportedProtocol.TCP))));
will(returnValue(coord3));
allowing(coord3).isFinished();
will(returnValue(false));
oneOf(coord3).startScript(p5);
oneOf(coord1).conversation(p6);
allowGettingScripts(coord1);
allowGettingScripts(coord2);
allowGettingScripts(coord3);
atLeast(1).of(coord1).commitToFile();
atLeast(1).of(coord2).commitToFile();
atLeast(1).of(coord3).commitToFile();
}
});
RptScriptCreator creator = new RptScriptCreator(emitterFactory, coordinatorFactory);
creator.addPacketToScripts(p1);
creator.addPacketToScripts(p2);
creator.addPacketToScripts(p3);
creator.addPacketToScripts(p4);
creator.addPacketToScripts(p5);
creator.addPacketToScripts(p6);
creator.commitToFile();
context.assertIsSatisfied();
}
}