package com.jenjinstudios.server.message; import com.jenjinstudios.core.MessageIO; import com.jenjinstudios.core.io.Message; import com.jenjinstudios.core.io.MessageRegistry; import com.jenjinstudios.server.net.AuthServer; import com.jenjinstudios.server.net.ClientHandler; import com.jenjinstudios.server.net.User; import com.jenjinstudios.server.sql.Authenticator; import com.jenjinstudios.server.sql.LoginException; import org.mockito.Mockito; import org.testng.annotations.Test; import static org.mockito.Matchers.anyLong; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; /** * @author Caleb Brinkman */ public class ExecutableLoginRequestTest { @Test @SuppressWarnings("unchecked") public void testMessageExecution() throws Exception { Message message = MessageRegistry.getInstance().createMessage("LoginRequest"); message.setArgument("username", "foo"); message.setArgument("password", "bar"); User user = new User(); user.setUsername("foo"); user.setUsername("bar"); user.setLoggedIn(true); ClientHandler clientHandler = mock(ClientHandler.class); AuthServer server = mock(AuthServer.class); ServerMessageFactory serverMessageFactory = new ServerMessageFactory(); Authenticator authenticator = mock(Authenticator.class); MessageIO messageIO = mock(MessageIO.class); when(server.getAuthenticator()).thenReturn(authenticator); when(server.getCycleStartTime()).thenReturn(12345l); when(authenticator.logInUser("foo", "bar")).thenReturn(user); when(clientHandler.getServer()).thenReturn(server); when(clientHandler.getMessageFactory()).thenReturn(serverMessageFactory); when(clientHandler.getMessageIO()).thenReturn(messageIO); ExecutableLoginRequest executableLoginRequest = new ExecutableLoginRequest(clientHandler, message); executableLoginRequest.runImmediate(); executableLoginRequest.runDelayed(); Mockito.verify(clientHandler).setLoggedInTime(anyLong()); } @Test @SuppressWarnings("unchecked") public void testFailedLogin() throws Exception { Message message = MessageRegistry.getInstance().createMessage("LoginRequest"); message.setArgument("username", "foo-dapoo"); message.setArgument("password", "bar"); User user = new User(); user.setUsername("foo"); user.setUsername("bar"); user.setLoggedIn(true); ClientHandler clientHandler = mock(ClientHandler.class); AuthServer server = mock(AuthServer.class); ServerMessageFactory serverMessageFactory = new ServerMessageFactory(); Authenticator authenticator = mock(Authenticator.class); MessageIO messageIO = mock(MessageIO.class); when(server.getAuthenticator()).thenReturn(authenticator); when(server.getCycleStartTime()).thenReturn(12345l); when(authenticator.logInUser("foo", "bar")).thenReturn(user); when(authenticator.logInUser("foo-dapoo", "bar")).thenThrow(new LoginException("Nope")); when(clientHandler.getServer()).thenReturn(server); when(clientHandler.getMessageFactory()).thenReturn(serverMessageFactory); when(clientHandler.getMessageIO()).thenReturn(messageIO); ExecutableLoginRequest executableLoginRequest = new ExecutableLoginRequest(clientHandler, message); executableLoginRequest.runImmediate(); executableLoginRequest.runDelayed(); Mockito.verify(clientHandler, Mockito.never()).setLoggedInTime(anyLong()); } }