/*
* Created by Andrey Cherkashin (acherkashin)
* http://acherkashin.me
*
* License
* Copyright (c) 2015 Andrey Cherkashin
* The project released under the MIT license: http://opensource.org/licenses/MIT
*/
package ragefist.packets;
import com.juniform.JUniformMutableObject;
import com.juniform.JUniformObject;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentMatcher;
import static org.mockito.Mockito.*;
import ragefist.core.distribution.DistributedServerController;
import ragefist.core.distribution.DistributedServerController.DistributedServerControllerAPI;
import ragefist.core.network.Connection;
public class PacketHandlerRPCTest
{
private DistributedServerController _controller;
private DistributedServerControllerAPI _controllerAPI;
private PacketHandlerRPC _packetHandler;
private class ObjectEqualityArgumentMatcher<T> extends ArgumentMatcher<T> {
T matchObject;
public ObjectEqualityArgumentMatcher(T thisObject) {
this.matchObject = thisObject;
}
@Override
public boolean matches(Object argument) {
return argument.equals(matchObject);
}
}
@Before
public void setUp() {
_controller = mock(DistributedServerController.class);
_packetHandler = new PacketHandlerRPC(_controllerAPI);
}
@Test
public void testExecuteNullRequest() {
ArgumentMatcher matcher = new ArgumentMatcher<JUniformObject>() {
@Override
public boolean matches(Object argument) {
JUniformObject object = (JUniformObject)argument;
boolean result =
object != null &&
object.getProperty("rs").toInteger() == 0 &&
object.getProperty("error").toString().equals("ERROR_UNKNOWN_ACTION")
;
if (result == false) System.out.println(object);
return result;
}
};
Connection connection = mock(Connection.class);
_packetHandler.handlePacket(JUniformObject.OBJECT_NIL, connection);
verify(connection, times(1)).sendPacket((JUniformObject)argThat(matcher));
}
@Test
public void testExecuteNoSequenceNumberRequest() {
JUniformMutableObject packet = JUniformMutableObject.newMap();
packet.setProperty("action", "ExecuteCode");
ArgumentMatcher matcher = new ArgumentMatcher<JUniformObject>() {
@Override
public boolean matches(Object argument) {
JUniformObject object = (JUniformObject)argument;
boolean result =
object != null &&
object.getProperty("rs").toInteger() == 0 &&
object.getProperty("error").toString().equals("ERROR_BAD_PACKET")
;
if (result == false) System.out.println(object);
return result;
}
};
Connection connection = mock(Connection.class);
_packetHandler.handlePacket(packet, connection);
verify(connection, times(1)).sendPacket((JUniformObject)argThat(matcher));
}
@Test
public void testExecuteNoDataRequest() {
JUniformMutableObject packet = JUniformMutableObject.newMap();
packet.setProperty("action", "ExecuteCode");
packet.setProperty("sq", 1);
ArgumentMatcher matcher = new ArgumentMatcher<JUniformObject>() {
@Override
public boolean matches(Object argument) {
JUniformObject object = (JUniformObject)argument;
boolean result =
object != null &&
object.getProperty("rs").toInteger() == 0 &&
object.getProperty("error").toString().equals("ERROR_BAD_DATA")
;
if (result == false) System.out.println(object);
return result;
}
};
Connection connection = mock(Connection.class);
_packetHandler.handlePacket(packet, connection);
verify(connection, times(1)).sendPacket((JUniformObject)argThat(matcher));
}
@Test
public void testExecuteNoDataEnvironmentRequest() {
JUniformMutableObject packet = JUniformMutableObject.newMap();
packet.setProperty("action", "ExecuteCode");
packet.setProperty("sq", 1);
packet.setProperty("data", JUniformMutableObject.newMap());
ArgumentMatcher matcher = new ArgumentMatcher<JUniformObject>() {
@Override
public boolean matches(Object argument) {
JUniformObject object = (JUniformObject)argument;
boolean result =
object != null &&
object.getProperty("rs").toInteger() == 0 &&
object.getProperty("error").toString().equals("ERROR_BAD_ENVIRONMENT")
;
if (result == false) System.out.println(object);
return result;
}
};
Connection connection = mock(Connection.class);
_packetHandler.handlePacket(packet, connection);
verify(connection, times(1)).sendPacket((JUniformObject)argThat(matcher));
}
}