fix(stealth): hide concealed players from server ping
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
package games.dmg.spigotstealth;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class ServerListPingVisibilityTest {
|
||||
@Test
|
||||
void publicPlayerCountNeverBecomesNegative() {
|
||||
ServerListPingVisibility.Snapshot adjusted = ServerListPingVisibility.adjust(
|
||||
0, 100, List.of(), Set.of(UUID.randomUUID()));
|
||||
|
||||
assertEquals(0, adjusted.playersOnline());
|
||||
}
|
||||
|
||||
@Test
|
||||
void ordinaryPlayersRemainCountedAndSampled() {
|
||||
UUID firstId = UUID.randomUUID();
|
||||
UUID secondId = UUID.randomUUID();
|
||||
|
||||
ServerListPingVisibility.Snapshot adjusted = ServerListPingVisibility.adjust(
|
||||
2, 100, List.of(firstId, secondId), Set.of());
|
||||
|
||||
assertEquals(2, adjusted.playersOnline());
|
||||
assertEquals(List.of(firstId, secondId), adjusted.samplePlayerIds());
|
||||
}
|
||||
|
||||
@Test
|
||||
void excludesConcealedPlayersFromPublicCountAndSampleWithoutChangingMaximum() {
|
||||
UUID visibleId = UUID.randomUUID();
|
||||
UUID concealedId = UUID.randomUUID();
|
||||
|
||||
ServerListPingVisibility.Snapshot adjusted = ServerListPingVisibility.adjust(
|
||||
2, 100, List.of(visibleId, concealedId), Set.of(concealedId));
|
||||
|
||||
assertEquals(1, adjusted.playersOnline());
|
||||
assertEquals(100, adjusted.playersMaximum());
|
||||
assertEquals(List.of(visibleId), adjusted.samplePlayerIds());
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,35 @@
|
||||
package games.dmg.spigotstealth;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class StealthSessionServiceTest {
|
||||
@Test
|
||||
void reportsOnlyCurrentlyConcealedPlayerIdsForPublicPresentation() {
|
||||
UUID concealedId = UUID.randomUUID();
|
||||
UUID staleId = UUID.randomUUID();
|
||||
try (StealthStateManager manager = manager()) {
|
||||
manager.update(state -> state
|
||||
.withPlayer(unlocked(concealedId).withSession(true, false))
|
||||
.withPlayer(unlocked(staleId).withSession(false, true)))
|
||||
.join();
|
||||
QualifyingInvisibilityService progression = new QualifyingInvisibilityService(
|
||||
manager, Duration.ofHours(8), System::nanoTime, ignored -> { });
|
||||
StealthSessionService sessions = new StealthSessionService(manager, progression);
|
||||
sessions.login(concealedId, "Hidden");
|
||||
|
||||
assertEquals(Set.of(concealedId), sessions.concealedPlayerIds());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void unlockedQualifyingDisconnectPreparesAndConsumesOneConcealedLogin() {
|
||||
UUID playerId = UUID.randomUUID();
|
||||
|
||||
Reference in New Issue
Block a user