295 lines
12 KiB
Java
295 lines
12 KiB
Java
package uulm.teamname.marvelous.server.lobbymanager;
|
|
|
|
import org.junit.jupiter.api.BeforeEach;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.mockito.ArgumentCaptor;
|
|
import org.mockito.MockedStatic;
|
|
import uulm.teamname.marvelous.gamelibrary.events.Event;
|
|
import uulm.teamname.marvelous.gamelibrary.events.EventBuilder;
|
|
import uulm.teamname.marvelous.gamelibrary.events.EventType;
|
|
import uulm.teamname.marvelous.gamelibrary.messages.BasicMessage;
|
|
|
|
import org.java_websocket.WebSocket;
|
|
import uulm.teamname.marvelous.gamelibrary.messages.ParticipantType;
|
|
import uulm.teamname.marvelous.gamelibrary.messages.server.EventMessage;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.HashSet;
|
|
import java.util.List;
|
|
import java.util.function.BiConsumer;
|
|
|
|
import static org.mockito.Mockito.*;
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
import static org.assertj.core.api.Assertions.*;
|
|
|
|
class LobbyConnectionTest {
|
|
@BeforeEach
|
|
void setUp() {
|
|
|
|
}
|
|
|
|
|
|
BiConsumer<WebSocket, BasicMessage> sendMessageCallback;
|
|
BiConsumer<WebSocket, String> sendErrorCallback;
|
|
|
|
WebSocket player1, player2, spectator;
|
|
|
|
Participant player1Participant, player2Participant, spectatorParticipant;
|
|
|
|
LobbyConnection connection;
|
|
|
|
@BeforeEach
|
|
void beforeEach() {
|
|
sendMessageCallback = mock(BiConsumer.class);
|
|
sendErrorCallback = mock(BiConsumer.class);
|
|
|
|
// player1 = mock(WebSocket.class);
|
|
// player2 = mock(WebSocket.class);
|
|
// spectator = mock(WebSocket.class);
|
|
//
|
|
// player1Participant = new Participant(player1, ParticipantType.PlayerOne, "Player1");
|
|
// player2Participant = new Participant(player2, ParticipantType.PlayerTwo, "Player2");
|
|
// spectatorParticipant = new Participant(spectator, ParticipantType.Spectator, "Spectator");
|
|
//
|
|
// connection = new LobbyConnection("/AwesomeGame", sendMessageCallback, sendErrorCallback);
|
|
}
|
|
|
|
/*
|
|
|
|
@Test
|
|
void lobbyIsFullTest() {
|
|
assertThat(connection.isFull()).isFalse();
|
|
connection.addPlayer1(player1Participant);
|
|
assertThat(connection.isFull()).isFalse();
|
|
connection.addPlayer2(player2Participant);
|
|
assertThat(connection.isFull()).isTrue();
|
|
}
|
|
|
|
@Test
|
|
void lobbyIsFullTestTwo() {
|
|
assertThat(connection.isFull()).isFalse();
|
|
connection.addPlayer2(player2Participant);
|
|
assertThat(connection.isFull()).isFalse();
|
|
connection.addSpectator(spectatorParticipant);
|
|
assertThat(connection.isFull()).isFalse();
|
|
connection.addPlayer1(player1Participant);
|
|
assertThat(connection.isFull()).isTrue();
|
|
}
|
|
|
|
@Test
|
|
void addPlayerOneTest(){
|
|
var websocket = mock(WebSocket.class);
|
|
|
|
Participant playerOne = new Participant(websocket, ParticipantType.PlayerOne, "PlayerOne");
|
|
|
|
assertThat(connection.addPlayer1(playerOne)).isTrue();
|
|
assertThat(connection.hasPlayer1()).isTrue();
|
|
assertThat(connection.addPlayer1(playerOne)).isFalse();
|
|
}
|
|
|
|
@Test
|
|
void addPlayerTwoTest(){
|
|
var websocket = mock(WebSocket.class);
|
|
|
|
Participant playerTwo = new Participant(websocket, ParticipantType.PlayerTwo, "PlayerTwo");
|
|
|
|
assertThat(connection.addPlayer2(playerTwo)).isTrue();
|
|
assertThat(connection.hasPlayer2()).isTrue();
|
|
assertThat(connection.addPlayer2(playerTwo)).isFalse();
|
|
}
|
|
|
|
@Test
|
|
void addPlayerTest(){
|
|
var websocket = mock(WebSocket.class);
|
|
|
|
Participant playerOne = new Participant(websocket, ParticipantType.PlayerOne, "PlayerOne");
|
|
Participant playerTwo = new Participant(websocket, ParticipantType.PlayerTwo, "PlayerTwo");
|
|
Participant spectator = new Participant(websocket, ParticipantType.Spectator,"Spectator");
|
|
|
|
assertThat(connection.addPlayer(playerOne)).isTrue();
|
|
assertThat(connection.addPlayer(playerTwo)).isTrue();
|
|
assertThat(connection.addPlayer(spectator)).isFalse();
|
|
assertThat(connection.contains(playerOne)).isTrue();
|
|
assertThat(connection.contains(playerTwo)).isTrue();
|
|
assertThat(connection.contains(spectator)).isFalse();
|
|
}
|
|
|
|
@Test
|
|
void addSpectatorTest(){
|
|
var websocket = mock(WebSocket.class);
|
|
|
|
Participant playerOne = new Participant(websocket, ParticipantType.PlayerOne, "PlayerOne");
|
|
Participant playerTwo = new Participant(websocket, ParticipantType.PlayerTwo, "PlayerTwo");
|
|
Participant spectator = new Participant(websocket, ParticipantType.Spectator,"Spectator");
|
|
|
|
assertThat(connection.addSpectator(playerOne)).isFalse();
|
|
assertThat(connection.addSpectator(playerTwo)).isFalse();
|
|
assertThat(connection.addSpectator(spectator)).isTrue();
|
|
assertThat(connection.contains(playerOne)).isFalse();
|
|
assertThat(connection.contains(playerTwo)).isFalse();
|
|
assertThat(connection.contains(spectator)).isTrue();
|
|
}
|
|
|
|
@Test
|
|
void addOneSpectatorAndOnePlayer(){
|
|
var websocket = mock(WebSocket.class);
|
|
|
|
Participant playerOne = new Participant(websocket, ParticipantType.PlayerOne, "PlayerOne");
|
|
Participant spectator = new Participant(websocket, ParticipantType.Spectator,"Spectator");
|
|
|
|
assertThat(connection.addPlayer(playerOne)).isTrue();
|
|
assertThat(connection.addSpectator(spectator)).isTrue();
|
|
assertThat(connection.contains(playerOne)).isTrue();
|
|
assertThat(connection.contains(spectator)).isTrue();
|
|
}
|
|
|
|
@Test
|
|
void removeParticipantTest(){
|
|
var websocket = mock(WebSocket.class);
|
|
|
|
Participant playerOne = new Participant(websocket, ParticipantType.PlayerOne, "PlayerOne");
|
|
Participant playerTwo = new Participant(websocket, ParticipantType.PlayerTwo, "PlayerTwo");
|
|
Participant spectator = new Participant(websocket, ParticipantType.Spectator,"Spectator");
|
|
|
|
connection.addPlayer(playerOne);
|
|
connection.addPlayer(playerTwo);
|
|
connection.addSpectator(spectator);
|
|
|
|
assertThat(connection.removeParticipant(spectator)).isTrue();
|
|
assertThat(connection.removeParticipant(playerOne)).isTrue();
|
|
assertThat(connection.removeParticipant(playerOne)).isFalse();
|
|
assertThat(connection.removeParticipant(playerTwo)).isTrue();
|
|
}
|
|
|
|
@Test
|
|
void sendMessageTest(){
|
|
var webSocket = mock(WebSocket.class);
|
|
var participant = new Participant(webSocket, ParticipantType.PlayerOne, "playerOne");
|
|
var event = new Event[]{
|
|
new EventBuilder(EventType.PauseStartEvent).buildGameEvent(),
|
|
new EventBuilder(EventType.MoveEvent).buildGameEvent()
|
|
};
|
|
|
|
var message = new EventMessage();
|
|
message.messages = event;
|
|
|
|
connection.sendEvents(participant, event);
|
|
verify(sendMessageCallback).accept(participant.getConnection(), message);
|
|
}
|
|
|
|
@Test
|
|
void broadcastEventTest(){
|
|
var player1 = mock(WebSocket.class);
|
|
var player2 = mock(WebSocket.class);
|
|
var spectator1 = mock(WebSocket.class);
|
|
var spectator2 = mock(WebSocket.class);
|
|
|
|
Participant playerOne = new Participant(player1, ParticipantType.PlayerOne, "playerOne");
|
|
Participant playerTwo = new Participant(player2, ParticipantType.PlayerTwo, "playerTwo");
|
|
Participant spectatorOne = new Participant(spectator1, ParticipantType.Spectator, "spectatorOne");
|
|
Participant spectatorTwo = new Participant(spectator2, ParticipantType.Spectator, "spectatorTwo");
|
|
|
|
connection.addPlayer(playerOne);
|
|
connection.addPlayer(playerTwo);
|
|
connection.addSpectator(spectatorOne);
|
|
connection.addSpectator(spectatorTwo);
|
|
|
|
var events = new Event[]{
|
|
new EventBuilder(EventType.PauseStartEvent).buildGameEvent(),
|
|
new EventBuilder(EventType.MoveEvent).buildGameEvent()
|
|
};
|
|
|
|
var message = new EventMessage();
|
|
message.messages = events;
|
|
|
|
connection.broadcastEvents(events);
|
|
|
|
verify(sendMessageCallback).accept(playerOne.getConnection(), message);
|
|
verify(sendMessageCallback).accept(playerTwo.getConnection(), message);
|
|
verify(sendMessageCallback).accept(spectatorOne.getConnection(), message);
|
|
verify(sendMessageCallback).accept(spectatorTwo.getConnection(), message);
|
|
}
|
|
|
|
@Test
|
|
void broadcastEventsListToArrayTest(){
|
|
var player1 = mock(WebSocket.class);
|
|
var player2 = mock(WebSocket.class);
|
|
var spectatorSocket = mock(WebSocket.class);
|
|
|
|
Participant playerOne = new Participant(player1, ParticipantType.PlayerOne, "playerOne");
|
|
Participant playerTwo = new Participant(player2, ParticipantType.PlayerTwo, "playerTwo");
|
|
Participant spectator = new Participant(spectatorSocket, ParticipantType.Spectator, "spectator");
|
|
|
|
connection.addPlayer(playerOne);
|
|
connection.addPlayer(playerTwo);
|
|
connection.addSpectator(spectator);
|
|
|
|
var events = new ArrayList<Event>();
|
|
events.add(new EventBuilder(EventType.PauseStartEvent).buildGameEvent());
|
|
events.add(new EventBuilder(EventType.MoveEvent).buildGameEvent());
|
|
|
|
connection.broadcastEvents(events);
|
|
|
|
var message = new EventMessage();
|
|
message.messages = events.toArray(new Event[0]);
|
|
|
|
verify(sendMessageCallback).accept(playerOne.getConnection(), message);
|
|
verify(sendMessageCallback).accept(playerTwo.getConnection(), message);
|
|
verify(sendMessageCallback).accept(spectator.getConnection(), message);
|
|
}
|
|
|
|
@Test
|
|
void hashCodeTest() {
|
|
var hashSet = new HashSet<LobbyConnection>();
|
|
LobbyConnection connection = new LobbyConnection("yay", null, null);
|
|
hashSet.add(connection);
|
|
assertThat(hashSet).containsOnly(connection);
|
|
connection.addPlayer1(mock(Participant.class));
|
|
assertThat(hashSet).containsOnly(connection);
|
|
var spectator = new Participant(null, ParticipantType.Spectator, "SomeSpectator");
|
|
connection.addSpectator(spectator);
|
|
assertThat(hashSet).containsOnly(connection);
|
|
}
|
|
|
|
@Test
|
|
void broadcastToAllExceptTest(){
|
|
var player1 = mock(WebSocket.class);
|
|
var player2 = mock(WebSocket.class);
|
|
var spectator1 = mock(WebSocket.class);
|
|
var spectator2 = mock(WebSocket.class);
|
|
|
|
Participant playerOne = new Participant(player1, ParticipantType.PlayerOne, "playerOne");
|
|
Participant playerTwo = new Participant(player2, ParticipantType.PlayerTwo, "playerTwo");
|
|
Participant spectatorOne = new Participant(spectator1, ParticipantType.Spectator, "spectatorOne");
|
|
Participant spectatorTwo = new Participant(spectator2, ParticipantType.Spectator, "spectatorTwo");
|
|
|
|
connection.addPlayer(playerOne);
|
|
connection.addPlayer(playerTwo);
|
|
connection.addSpectator(spectatorOne);
|
|
connection.addSpectator(spectatorTwo);
|
|
|
|
var events = new Event[]{
|
|
new EventBuilder(EventType.PauseStartEvent).buildGameEvent(),
|
|
new EventBuilder(EventType.MoveEvent).buildGameEvent()
|
|
};
|
|
|
|
var message = new EventMessage();
|
|
message.messages = events;
|
|
|
|
connection.broadcastToAllExcept(playerTwo, events);
|
|
|
|
verify(sendMessageCallback).accept(playerOne.getConnection(), message);
|
|
//playerTwo is the only one who doesn't receive the message
|
|
verify(sendMessageCallback, never()).accept(playerTwo.getConnection(), message);
|
|
verify(sendMessageCallback).accept(spectatorOne.getConnection(), message);
|
|
verify(sendMessageCallback).accept(spectatorTwo.getConnection(), message);
|
|
}
|
|
|
|
@Test
|
|
void terminateTest(){
|
|
assertThat(connection.isActive()).isFalse();
|
|
connection.terminateConnection();
|
|
assertThat(connection.isActive()).isTrue();
|
|
} */
|
|
}
|