Server/Server/src/test/java/uulm/teamname/marvelous/server/lobby/pipelining/PlayerFilterSegmentTest.java

119 lines
4.6 KiB
Java

package uulm.teamname.marvelous.server.lobby.pipelining;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import uulm.teamname.marvelous.gamelibrary.IntVector2;
import uulm.teamname.marvelous.gamelibrary.entities.EntityID;
import uulm.teamname.marvelous.gamelibrary.entities.EntityType;
import uulm.teamname.marvelous.gamelibrary.events.Event;
import uulm.teamname.marvelous.gamelibrary.messages.ParticipantType;
import uulm.teamname.marvelous.gamelibrary.requests.Request;
import uulm.teamname.marvelous.gamelibrary.requests.RequestBuilder;
import uulm.teamname.marvelous.gamelibrary.requests.RequestType;
import uulm.teamname.marvelous.server.lobbymanager.Participant;
import uulm.teamname.marvelous.server.netconnector.Client;
import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicBoolean;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.assertj.core.api.Assertions.*;
class PlayerFilterSegmentTest {
PlayerFilterSegment segment;
AtomicBoolean abort;
@BeforeEach
void beforeEach() {
segment = new PlayerFilterSegment();
abort = new AtomicBoolean(false);
}
@Test
void validRequestsRemainUntouched() {
var participant = new Participant(mock(Client.class), null, ParticipantType.PlayerOne, false);
var requests = new Request[] {
new RequestBuilder(RequestType.MeleeAttackRequest)
.withOriginField(new IntVector2(1, 4))
.withTargetField(new IntVector2(2, 4))
.withOriginEntity(new EntityID(EntityType.P1, 3))
.buildCharacterRequest(),
new RequestBuilder(RequestType.MeleeAttackRequest)
.withOriginField(new IntVector2(2, 4))
.withTargetField(new IntVector2(3, 5))
.withOriginEntity(new EntityID(EntityType.P1, 3))
.withTargetEntity(new EntityID(EntityType.P2, 3))
.withValue(14)
.buildCharacterRequest()
};
var packet = new Packet(requests, participant);
var carrier = new ArrayList<Event>();
assertThatNoException().isThrownBy(() -> segment.processRequests(packet, carrier, abort));
assertThat(packet.toArray(new Request[0]))
.isEqualTo(requests);
assertThat(carrier).isEmpty();
assertThat(abort).isFalse();
}
@Test
void invalidRequestsTriggerAbort() {
var participant = new Participant(mock(Client.class), null, ParticipantType.PlayerOne, false);
var requests = new Request[] {
new RequestBuilder(RequestType.MeleeAttackRequest)
.withOriginField(new IntVector2(1, 4))
.withTargetField(new IntVector2(2, 4))
.withOriginEntity(new EntityID(EntityType.P2, 3))
.buildCharacterRequest(),
new RequestBuilder(RequestType.MeleeAttackRequest)
.withOriginField(new IntVector2(2, 4))
.withTargetField(new IntVector2(3, 5))
.withOriginEntity(new EntityID(EntityType.P2, 3))
.withTargetEntity(new EntityID(EntityType.P1, 3))
.withValue(14)
.buildCharacterRequest()
};
var packet = new Packet(requests, participant);
var carrier = new ArrayList<Event>();
assertThatNoException().isThrownBy(() -> segment.processRequests(packet, carrier, abort));
assertThat(packet.toArray(new Request[0]))
.isEqualTo(requests);
assertThat(carrier).isEmpty();
assertThat(abort).isTrue();
}
@Test
void gameRequestsRemainUntouched() {
var participant = new Participant(mock(Client.class), null, ParticipantType.PlayerOne, false);
var requests = new Request[] {
new RequestBuilder(RequestType.Req).buildGameRequest(),
new RequestBuilder(RequestType.EndRoundRequest).buildGameRequest(),
new RequestBuilder(RequestType.DisconnectRequest).buildGameRequest()
};
var packet = new Packet(requests, participant);
var carrier = new ArrayList<Event>();
assertThatNoException().isThrownBy(() -> segment.processRequests(packet, carrier, abort));
assertThat(packet.toArray(new Request[0]))
.isEqualTo(requests);
assertThat(carrier).isEmpty();
assertThat(abort).isFalse();
}
}