mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-01-07 17:08:27 +01:00
Split Geolocation related queries to own test
This commit is contained in:
parent
952cac1fbf
commit
b49baa1275
@ -67,4 +67,14 @@ public class Ping extends DateObj<Double> {
|
|||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(serverUUID, average, min, max);
|
return Objects.hash(serverUUID, average, min, max);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Ping{" +
|
||||||
|
"serverUUID=" + serverUUID +
|
||||||
|
", average=" + average +
|
||||||
|
", min=" + min +
|
||||||
|
", max=" + max +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,19 +80,13 @@ public interface DatabaseTest extends DatabaseTestPreparer {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
default void testTPSSaving() {
|
default void testTPSSaving() {
|
||||||
Random r = new Random();
|
List<TPS> expected = RandomData.randomTPS();
|
||||||
|
|
||||||
List<TPS> expected = new ArrayList<>();
|
|
||||||
|
|
||||||
for (int i = 0; i < RandomData.randomInt(1, 5); i++) {
|
|
||||||
expected.add(new TPS(r.nextLong(), r.nextDouble(), r.nextInt(100000000), r.nextDouble(), r.nextLong(), r.nextInt(), r.nextInt(), r.nextLong()));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (TPS tps : expected) {
|
for (TPS tps : expected) {
|
||||||
execute(DataStoreQueries.storeTPS(serverUUID(), tps));
|
execute(DataStoreQueries.storeTPS(serverUUID(), tps));
|
||||||
}
|
}
|
||||||
|
|
||||||
commitTest();
|
forcePersistenceCheck();
|
||||||
|
|
||||||
assertEquals(expected, db().query(TPSQueries.fetchTPSDataOfServer(serverUUID())));
|
assertEquals(expected, db().query(TPSQueries.fetchTPSDataOfServer(serverUUID())));
|
||||||
}
|
}
|
||||||
@ -106,20 +100,6 @@ public interface DatabaseTest extends DatabaseTestPreparer {
|
|||||||
db().executeTransaction(new PlayerRegisterTransaction(player2UUID, () -> 123456789L, "Test"));
|
db().executeTransaction(new PlayerRegisterTransaction(player2UUID, () -> 123456789L, "Test"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
default void geoInformationIsStored() {
|
|
||||||
saveUserOne();
|
|
||||||
|
|
||||||
long time = System.currentTimeMillis();
|
|
||||||
|
|
||||||
GeoInfo expected = new GeoInfo("TestLocation", time);
|
|
||||||
saveGeoInfo(playerUUID, expected);
|
|
||||||
commitTest();
|
|
||||||
|
|
||||||
List<GeoInfo> result = db().query(GeoInfoQueries.fetchAllGeoInformation()).get(playerUUID);
|
|
||||||
assertEquals(Collections.singletonList(expected), result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
default void testNicknamesTable() {
|
default void testNicknamesTable() {
|
||||||
saveUserOne();
|
saveUserOne();
|
||||||
@ -127,7 +107,7 @@ public interface DatabaseTest extends DatabaseTestPreparer {
|
|||||||
Nickname expected = new Nickname("TestNickname", System.currentTimeMillis(), serverUUID());
|
Nickname expected = new Nickname("TestNickname", System.currentTimeMillis(), serverUUID());
|
||||||
db().executeTransaction(new NicknameStoreTransaction(playerUUID, expected, (uuid, name) -> false /* Not cached */));
|
db().executeTransaction(new NicknameStoreTransaction(playerUUID, expected, (uuid, name) -> false /* Not cached */));
|
||||||
db().executeTransaction(new NicknameStoreTransaction(playerUUID, expected, (uuid, name) -> true /* Cached */));
|
db().executeTransaction(new NicknameStoreTransaction(playerUUID, expected, (uuid, name) -> true /* Cached */));
|
||||||
commitTest();
|
forcePersistenceCheck();
|
||||||
|
|
||||||
List<Nickname> nicknames = db().query(NicknameQueries.fetchNicknameDataOfPlayer(playerUUID));
|
List<Nickname> nicknames = db().query(NicknameQueries.fetchNicknameDataOfPlayer(playerUUID));
|
||||||
assertEquals(1, nicknames.size());
|
assertEquals(1, nicknames.size());
|
||||||
@ -138,7 +118,7 @@ public interface DatabaseTest extends DatabaseTestPreparer {
|
|||||||
default void webUserIsRegistered() {
|
default void webUserIsRegistered() {
|
||||||
WebUser expected = new WebUser(TestConstants.PLAYER_ONE_NAME, "RandomGarbageBlah", 0);
|
WebUser expected = new WebUser(TestConstants.PLAYER_ONE_NAME, "RandomGarbageBlah", 0);
|
||||||
db().executeTransaction(new RegisterWebUserTransaction(expected));
|
db().executeTransaction(new RegisterWebUserTransaction(expected));
|
||||||
commitTest();
|
forcePersistenceCheck();
|
||||||
|
|
||||||
Optional<WebUser> found = db().query(WebUserQueries.fetchWebUser(TestConstants.PLAYER_ONE_NAME));
|
Optional<WebUser> found = db().query(WebUserQueries.fetchWebUser(TestConstants.PLAYER_ONE_NAME));
|
||||||
assertTrue(found.isPresent());
|
assertTrue(found.isPresent());
|
||||||
@ -163,7 +143,7 @@ public interface DatabaseTest extends DatabaseTestPreparer {
|
|||||||
String[] expected = {"Test", "Test2", "Test3"};
|
String[] expected = {"Test", "Test2", "Test3"};
|
||||||
saveWorlds(expected);
|
saveWorlds(expected);
|
||||||
|
|
||||||
commitTest();
|
forcePersistenceCheck();
|
||||||
|
|
||||||
Collection<String> result = db().query(LargeFetchQueries.fetchAllWorldNames()).get(serverUUID());
|
Collection<String> result = db().query(LargeFetchQueries.fetchAllWorldNames()).get(serverUUID());
|
||||||
assertEquals(new HashSet<>(Arrays.asList(expected)), result);
|
assertEquals(new HashSet<>(Arrays.asList(expected)), result);
|
||||||
@ -223,7 +203,7 @@ public interface DatabaseTest extends DatabaseTestPreparer {
|
|||||||
|
|
||||||
execute(DataStoreQueries.storeSession(session));
|
execute(DataStoreQueries.storeSession(session));
|
||||||
|
|
||||||
commitTest();
|
forcePersistenceCheck();
|
||||||
|
|
||||||
Map<UUID, List<Session>> sessions = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID));
|
Map<UUID, List<Session>> sessions = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID));
|
||||||
assertTrue(sessions.containsKey(serverUUID()));
|
assertTrue(sessions.containsKey(serverUUID()));
|
||||||
@ -250,7 +230,7 @@ public interface DatabaseTest extends DatabaseTestPreparer {
|
|||||||
|
|
||||||
execute(DataStoreQueries.storeSession(session));
|
execute(DataStoreQueries.storeSession(session));
|
||||||
|
|
||||||
commitTest();
|
forcePersistenceCheck();
|
||||||
|
|
||||||
Map<UUID, List<Session>> sessions = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID));
|
Map<UUID, List<Session>> sessions = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID));
|
||||||
List<Session> savedSessions = sessions.get(serverUUID());
|
List<Session> savedSessions = sessions.get(serverUUID());
|
||||||
@ -317,7 +297,7 @@ public interface DatabaseTest extends DatabaseTestPreparer {
|
|||||||
|
|
||||||
// Updates the name
|
// Updates the name
|
||||||
db().executeTransaction(new PlayerRegisterTransaction(playerUUID, () -> 0, "NewName"));
|
db().executeTransaction(new PlayerRegisterTransaction(playerUUID, () -> 0, "NewName"));
|
||||||
commitTest();
|
forcePersistenceCheck();
|
||||||
|
|
||||||
assertFalse(db().query(UserIdentifierQueries.fetchPlayerUUIDOf(TestConstants.PLAYER_ONE_NAME)).isPresent());
|
assertFalse(db().query(UserIdentifierQueries.fetchPlayerUUIDOf(TestConstants.PLAYER_ONE_NAME)).isPresent());
|
||||||
|
|
||||||
@ -334,7 +314,7 @@ public interface DatabaseTest extends DatabaseTestPreparer {
|
|||||||
for (int i = 0; i < random + 1; i++) {
|
for (int i = 0; i < random + 1; i++) {
|
||||||
db().executeTransaction(new KickStoreTransaction(playerUUID));
|
db().executeTransaction(new KickStoreTransaction(playerUUID));
|
||||||
}
|
}
|
||||||
commitTest();
|
forcePersistenceCheck();
|
||||||
OptionalAssert.equals(random + 2, db().query(BaseUserQueries.fetchBaseUserOfPlayer(playerUUID)).map(BaseUser::getTimesKicked));
|
OptionalAssert.equals(random + 2, db().query(BaseUserQueries.fetchBaseUserOfPlayer(playerUUID)).map(BaseUser::getTimesKicked));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -447,7 +427,7 @@ public interface DatabaseTest extends DatabaseTestPreparer {
|
|||||||
session.setPlayerKills(createKills());
|
session.setPlayerKills(createKills());
|
||||||
execute(DataStoreQueries.storeSession(session));
|
execute(DataStoreQueries.storeSession(session));
|
||||||
|
|
||||||
commitTest();
|
forcePersistenceCheck();
|
||||||
|
|
||||||
Map<UUID, List<Session>> sessions = db().query(SessionQueries.fetchSessionsOfServer(serverUUID()));
|
Map<UUID, List<Session>> sessions = db().query(SessionQueries.fetchSessionsOfServer(serverUUID()));
|
||||||
|
|
||||||
@ -521,7 +501,7 @@ public interface DatabaseTest extends DatabaseTestPreparer {
|
|||||||
session.setPlayerKills(expected);
|
session.setPlayerKills(expected);
|
||||||
execute(DataStoreQueries.storeSession(session));
|
execute(DataStoreQueries.storeSession(session));
|
||||||
|
|
||||||
commitTest();
|
forcePersistenceCheck();
|
||||||
|
|
||||||
Map<UUID, List<Session>> sessions = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID));
|
Map<UUID, List<Session>> sessions = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID));
|
||||||
List<Session> savedSessions = sessions.get(serverUUID());
|
List<Session> savedSessions = sessions.get(serverUUID());
|
||||||
@ -986,81 +966,6 @@ public interface DatabaseTest extends DatabaseTestPreparer {
|
|||||||
assertEquals(expected, result);
|
assertEquals(expected, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
default void serverGeolocationsAreCountedAppropriately() {
|
|
||||||
UUID firstUuid = UUID.randomUUID();
|
|
||||||
UUID secondUuid = UUID.randomUUID();
|
|
||||||
UUID thirdUuid = UUID.randomUUID();
|
|
||||||
UUID fourthUuid = UUID.randomUUID();
|
|
||||||
UUID fifthUuid = UUID.randomUUID();
|
|
||||||
UUID sixthUuid = UUID.randomUUID();
|
|
||||||
|
|
||||||
Database database = db();
|
|
||||||
|
|
||||||
database.executeTransaction(new PlayerServerRegisterTransaction(firstUuid, () -> 0L, "", serverUUID()));
|
|
||||||
database.executeTransaction(new PlayerServerRegisterTransaction(secondUuid, () -> 0L, "", serverUUID()));
|
|
||||||
database.executeTransaction(new PlayerServerRegisterTransaction(thirdUuid, () -> 0L, "", serverUUID()));
|
|
||||||
database.executeTransaction(new PlayerServerRegisterTransaction(fourthUuid, () -> 0L, "", serverUUID()));
|
|
||||||
database.executeTransaction(new PlayerServerRegisterTransaction(fifthUuid, () -> 0L, "", serverUUID()));
|
|
||||||
database.executeTransaction(new PlayerServerRegisterTransaction(sixthUuid, () -> 0L, "", serverUUID()));
|
|
||||||
|
|
||||||
saveGeoInfo(firstUuid, new GeoInfo("Norway", 0));
|
|
||||||
saveGeoInfo(firstUuid, new GeoInfo("Finland", 5));
|
|
||||||
saveGeoInfo(secondUuid, new GeoInfo("Sweden", 0));
|
|
||||||
saveGeoInfo(thirdUuid, new GeoInfo("Denmark", 0));
|
|
||||||
saveGeoInfo(fourthUuid, new GeoInfo("Denmark", 0));
|
|
||||||
saveGeoInfo(fifthUuid, new GeoInfo("Not Known", 0));
|
|
||||||
saveGeoInfo(sixthUuid, new GeoInfo("Local Machine", 0));
|
|
||||||
|
|
||||||
Map<String, Integer> got = database.query(GeoInfoQueries.serverGeolocationCounts(serverUUID()));
|
|
||||||
|
|
||||||
Map<String, Integer> expected = new HashMap<>();
|
|
||||||
// first user has a more recent connection from Finland so their country should be counted as Finland.
|
|
||||||
expected.put("Finland", 1);
|
|
||||||
expected.put("Sweden", 1);
|
|
||||||
expected.put("Not Known", 1);
|
|
||||||
expected.put("Local Machine", 1);
|
|
||||||
expected.put("Denmark", 2);
|
|
||||||
|
|
||||||
assertEquals(expected, got);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
default void networkGeolocationsAreCountedAppropriately() {
|
|
||||||
UUID firstUuid = UUID.randomUUID();
|
|
||||||
UUID secondUuid = UUID.randomUUID();
|
|
||||||
UUID thirdUuid = UUID.randomUUID();
|
|
||||||
UUID fourthUuid = UUID.randomUUID();
|
|
||||||
UUID fifthUuid = UUID.randomUUID();
|
|
||||||
UUID sixthUuid = UUID.randomUUID();
|
|
||||||
|
|
||||||
Database db = db();
|
|
||||||
db.executeTransaction(new PlayerRegisterTransaction(firstUuid, () -> 0L, ""));
|
|
||||||
db.executeTransaction(new PlayerRegisterTransaction(secondUuid, () -> 0L, ""));
|
|
||||||
db.executeTransaction(new PlayerRegisterTransaction(thirdUuid, () -> 0L, ""));
|
|
||||||
|
|
||||||
saveGeoInfo(firstUuid, new GeoInfo("Norway", 0));
|
|
||||||
saveGeoInfo(firstUuid, new GeoInfo("Finland", 5));
|
|
||||||
saveGeoInfo(secondUuid, new GeoInfo("Sweden", 0));
|
|
||||||
saveGeoInfo(thirdUuid, new GeoInfo("Denmark", 0));
|
|
||||||
saveGeoInfo(fourthUuid, new GeoInfo("Denmark", 0));
|
|
||||||
saveGeoInfo(fifthUuid, new GeoInfo("Not Known", 0));
|
|
||||||
saveGeoInfo(sixthUuid, new GeoInfo("Local Machine", 0));
|
|
||||||
|
|
||||||
Map<String, Integer> got = db.query(GeoInfoQueries.networkGeolocationCounts());
|
|
||||||
|
|
||||||
Map<String, Integer> expected = new HashMap<>();
|
|
||||||
// first user has a more recent connection from Finland so their country should be counted as Finland.
|
|
||||||
expected.put("Finland", 1);
|
|
||||||
expected.put("Sweden", 1);
|
|
||||||
expected.put("Not Known", 1);
|
|
||||||
expected.put("Local Machine", 1);
|
|
||||||
expected.put("Denmark", 2);
|
|
||||||
|
|
||||||
assertEquals(expected, got);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
default void bungeeInformationIsStored() {
|
default void bungeeInformationIsStored() {
|
||||||
Optional<Server> bungeeInfo = db().query(ServerQueries.fetchProxyServerInformation());
|
Optional<Server> bungeeInfo = db().query(ServerQueries.fetchProxyServerInformation());
|
||||||
@ -1070,7 +975,7 @@ public interface DatabaseTest extends DatabaseTestPreparer {
|
|||||||
Server bungeeCord = new Server(-1, bungeeUUID, "BungeeCord", "Random:1234", 20);
|
Server bungeeCord = new Server(-1, bungeeUUID, "BungeeCord", "Random:1234", 20);
|
||||||
db().executeTransaction(new StoreServerInformationTransaction(bungeeCord));
|
db().executeTransaction(new StoreServerInformationTransaction(bungeeCord));
|
||||||
|
|
||||||
commitTest();
|
forcePersistenceCheck();
|
||||||
|
|
||||||
bungeeCord.setId(2);
|
bungeeCord.setId(2);
|
||||||
|
|
||||||
@ -1092,55 +997,6 @@ public interface DatabaseTest extends DatabaseTestPreparer {
|
|||||||
assertEquals(1, serverInformation.values().stream().filter(Server::isProxy).count());
|
assertEquals(1, serverInformation.values().stream().filter(Server::isProxy).count());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
default void pingIsGroupedByGeolocationAppropriately() {
|
|
||||||
UUID firstUuid = UUID.randomUUID();
|
|
||||||
UUID secondUuid = UUID.randomUUID();
|
|
||||||
UUID thirdUuid = UUID.randomUUID();
|
|
||||||
UUID fourthUuid = UUID.randomUUID();
|
|
||||||
UUID fifthUuid = UUID.randomUUID();
|
|
||||||
UUID sixthUuid = UUID.randomUUID();
|
|
||||||
|
|
||||||
Database database = db();
|
|
||||||
|
|
||||||
database.executeTransaction(new PlayerServerRegisterTransaction(firstUuid, () -> 0L, "", serverUUID()));
|
|
||||||
database.executeTransaction(new PlayerServerRegisterTransaction(secondUuid, () -> 0L, "", serverUUID()));
|
|
||||||
database.executeTransaction(new PlayerServerRegisterTransaction(thirdUuid, () -> 0L, "", serverUUID()));
|
|
||||||
database.executeTransaction(new PlayerServerRegisterTransaction(fourthUuid, () -> 0L, "", serverUUID()));
|
|
||||||
database.executeTransaction(new PlayerServerRegisterTransaction(fifthUuid, () -> 0L, "", serverUUID()));
|
|
||||||
database.executeTransaction(new PlayerServerRegisterTransaction(sixthUuid, () -> 0L, "", serverUUID()));
|
|
||||||
|
|
||||||
saveGeoInfo(firstUuid, new GeoInfo("Norway", 0));
|
|
||||||
saveGeoInfo(firstUuid, new GeoInfo("Finland", 5));
|
|
||||||
saveGeoInfo(secondUuid, new GeoInfo("Sweden", 0));
|
|
||||||
saveGeoInfo(thirdUuid, new GeoInfo("Denmark", 0));
|
|
||||||
saveGeoInfo(fourthUuid, new GeoInfo("Denmark", 0));
|
|
||||||
saveGeoInfo(fifthUuid, new GeoInfo("Not Known", 0));
|
|
||||||
saveGeoInfo(sixthUuid, new GeoInfo("Local Machine", 0));
|
|
||||||
|
|
||||||
long time = System.currentTimeMillis();
|
|
||||||
List<DateObj<Integer>> ping = Collections.singletonList(new DateObj<>(time, 5));
|
|
||||||
database.executeTransaction(new PingStoreTransaction(firstUuid, serverUUID(), ping));
|
|
||||||
database.executeTransaction(new PingStoreTransaction(secondUuid, serverUUID(), ping));
|
|
||||||
database.executeTransaction(new PingStoreTransaction(thirdUuid, serverUUID(), ping));
|
|
||||||
database.executeTransaction(new PingStoreTransaction(fourthUuid, serverUUID(), ping));
|
|
||||||
database.executeTransaction(new PingStoreTransaction(fifthUuid, serverUUID(), ping));
|
|
||||||
database.executeTransaction(new PingStoreTransaction(sixthUuid, serverUUID(), ping));
|
|
||||||
|
|
||||||
Map<String, Ping> got = database.query(PingQueries.fetchPingDataOfServerByGeolocation(serverUUID()));
|
|
||||||
|
|
||||||
Map<String, Ping> expected = new HashMap<>();
|
|
||||||
// first user has a more recent connection from Finland so their country should be counted as Finland.
|
|
||||||
Ping expectedPing = new Ping(time, serverUUID(), 5, 5, 5);
|
|
||||||
expected.put("Finland", expectedPing);
|
|
||||||
expected.put("Sweden", expectedPing);
|
|
||||||
expected.put("Not Known", expectedPing);
|
|
||||||
expected.put("Local Machine", expectedPing);
|
|
||||||
expected.put("Denmark", expectedPing);
|
|
||||||
|
|
||||||
assertEquals(expected, got);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
default void registerDateIsMinimized() {
|
default void registerDateIsMinimized() {
|
||||||
executeTransactions(
|
executeTransactions(
|
||||||
|
@ -76,7 +76,7 @@ public interface DatabaseTestPreparer {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
default void commitTest() {
|
default void forcePersistenceCheck() {
|
||||||
db().close();
|
db().close();
|
||||||
db().init();
|
db().init();
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,8 @@
|
|||||||
package com.djrapitops.plan.storage.database;
|
package com.djrapitops.plan.storage.database;
|
||||||
|
|
||||||
import com.djrapitops.plan.PlanSystem;
|
import com.djrapitops.plan.PlanSystem;
|
||||||
import com.djrapitops.plan.storage.database.queries.analysis.ActivityIndexQueriesTest;
|
import com.djrapitops.plan.storage.database.queries.ActivityIndexQueriesTest;
|
||||||
|
import com.djrapitops.plan.storage.database.queries.GeolocationQueriesTest;
|
||||||
import org.junit.jupiter.api.AfterAll;
|
import org.junit.jupiter.api.AfterAll;
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
@ -40,7 +41,8 @@ import java.util.UUID;
|
|||||||
@ExtendWith(MockitoExtension.class)
|
@ExtendWith(MockitoExtension.class)
|
||||||
public class H2Test implements DatabaseTest,
|
public class H2Test implements DatabaseTest,
|
||||||
ExtensionsDatabaseTest,
|
ExtensionsDatabaseTest,
|
||||||
ActivityIndexQueriesTest {
|
ActivityIndexQueriesTest,
|
||||||
|
GeolocationQueriesTest {
|
||||||
|
|
||||||
private static final int TEST_PORT_NUMBER = RandomData.randomInt(9005, 9500);
|
private static final int TEST_PORT_NUMBER = RandomData.randomInt(9005, 9500);
|
||||||
|
|
||||||
|
@ -17,7 +17,8 @@
|
|||||||
package com.djrapitops.plan.storage.database;
|
package com.djrapitops.plan.storage.database;
|
||||||
|
|
||||||
import com.djrapitops.plan.PlanSystem;
|
import com.djrapitops.plan.PlanSystem;
|
||||||
import com.djrapitops.plan.storage.database.queries.analysis.ActivityIndexQueriesTest;
|
import com.djrapitops.plan.storage.database.queries.ActivityIndexQueriesTest;
|
||||||
|
import com.djrapitops.plan.storage.database.queries.GeolocationQueriesTest;
|
||||||
import org.junit.jupiter.api.AfterAll;
|
import org.junit.jupiter.api.AfterAll;
|
||||||
import org.junit.jupiter.api.Assumptions;
|
import org.junit.jupiter.api.Assumptions;
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
@ -35,7 +36,7 @@ import java.util.UUID;
|
|||||||
/**
|
/**
|
||||||
* Tests for MySQL database.
|
* Tests for MySQL database.
|
||||||
* <p>
|
* <p>
|
||||||
* These settings assume CI environment with MySQL service running.
|
* The setup assumes CI environment with MySQL service running.
|
||||||
* 'MYSQL_DB' database should be created before the test.
|
* 'MYSQL_DB' database should be created before the test.
|
||||||
*
|
*
|
||||||
* @author Rsl1122
|
* @author Rsl1122
|
||||||
@ -46,7 +47,8 @@ import java.util.UUID;
|
|||||||
@ExtendWith(MockitoExtension.class)
|
@ExtendWith(MockitoExtension.class)
|
||||||
class MySQLTest implements DatabaseTest,
|
class MySQLTest implements DatabaseTest,
|
||||||
ExtensionsDatabaseTest,
|
ExtensionsDatabaseTest,
|
||||||
ActivityIndexQueriesTest {
|
ActivityIndexQueriesTest,
|
||||||
|
GeolocationQueriesTest {
|
||||||
|
|
||||||
private static final int TEST_PORT_NUMBER = RandomData.randomInt(9005, 9500);
|
private static final int TEST_PORT_NUMBER = RandomData.randomInt(9005, 9500);
|
||||||
|
|
||||||
|
@ -17,7 +17,8 @@
|
|||||||
package com.djrapitops.plan.storage.database;
|
package com.djrapitops.plan.storage.database;
|
||||||
|
|
||||||
import com.djrapitops.plan.PlanSystem;
|
import com.djrapitops.plan.PlanSystem;
|
||||||
import com.djrapitops.plan.storage.database.queries.analysis.ActivityIndexQueriesTest;
|
import com.djrapitops.plan.storage.database.queries.ActivityIndexQueriesTest;
|
||||||
|
import com.djrapitops.plan.storage.database.queries.GeolocationQueriesTest;
|
||||||
import org.junit.jupiter.api.AfterAll;
|
import org.junit.jupiter.api.AfterAll;
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
@ -40,7 +41,8 @@ import java.util.UUID;
|
|||||||
@ExtendWith(MockitoExtension.class)
|
@ExtendWith(MockitoExtension.class)
|
||||||
public class SQLiteTest implements DatabaseTest,
|
public class SQLiteTest implements DatabaseTest,
|
||||||
ExtensionsDatabaseTest,
|
ExtensionsDatabaseTest,
|
||||||
ActivityIndexQueriesTest {
|
ActivityIndexQueriesTest,
|
||||||
|
GeolocationQueriesTest {
|
||||||
|
|
||||||
private static final int TEST_PORT_NUMBER = RandomData.randomInt(9005, 9500);
|
private static final int TEST_PORT_NUMBER = RandomData.randomInt(9005, 9500);
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package com.djrapitops.plan.storage.database.queries.analysis;
|
package com.djrapitops.plan.storage.database.queries;
|
||||||
|
|
||||||
import com.djrapitops.plan.delivery.domain.TablePlayer;
|
import com.djrapitops.plan.delivery.domain.TablePlayer;
|
||||||
import com.djrapitops.plan.delivery.domain.mutators.ActivityIndex;
|
import com.djrapitops.plan.delivery.domain.mutators.ActivityIndex;
|
||||||
import com.djrapitops.plan.gathering.domain.Session;
|
import com.djrapitops.plan.gathering.domain.Session;
|
||||||
import com.djrapitops.plan.storage.database.DatabaseTestPreparer;
|
import com.djrapitops.plan.storage.database.DatabaseTestPreparer;
|
||||||
import com.djrapitops.plan.storage.database.queries.DataStoreQueries;
|
import com.djrapitops.plan.storage.database.queries.analysis.ActivityIndexQueries;
|
||||||
import com.djrapitops.plan.storage.database.queries.objects.NetworkTablePlayersQuery;
|
import com.djrapitops.plan.storage.database.queries.objects.NetworkTablePlayersQuery;
|
||||||
import com.djrapitops.plan.storage.database.queries.objects.ServerTablePlayersQuery;
|
import com.djrapitops.plan.storage.database.queries.objects.ServerTablePlayersQuery;
|
||||||
import com.djrapitops.plan.storage.database.queries.objects.SessionQueries;
|
import com.djrapitops.plan.storage.database.queries.objects.SessionQueries;
|
@ -0,0 +1,125 @@
|
|||||||
|
package com.djrapitops.plan.storage.database.queries;
|
||||||
|
|
||||||
|
import com.djrapitops.plan.delivery.domain.DateObj;
|
||||||
|
import com.djrapitops.plan.gathering.domain.GeoInfo;
|
||||||
|
import com.djrapitops.plan.gathering.domain.Ping;
|
||||||
|
import com.djrapitops.plan.storage.database.Database;
|
||||||
|
import com.djrapitops.plan.storage.database.DatabaseTestPreparer;
|
||||||
|
import com.djrapitops.plan.storage.database.queries.objects.GeoInfoQueries;
|
||||||
|
import com.djrapitops.plan.storage.database.queries.objects.PingQueries;
|
||||||
|
import com.djrapitops.plan.storage.database.transactions.events.GeoInfoStoreTransaction;
|
||||||
|
import com.djrapitops.plan.storage.database.transactions.events.PingStoreTransaction;
|
||||||
|
import com.djrapitops.plan.storage.database.transactions.events.PlayerServerRegisterTransaction;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import utilities.RandomData;
|
||||||
|
import utilities.TestConstants;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
|
public interface GeolocationQueriesTest extends DatabaseTestPreparer {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
default void geoInformationIsStored() {
|
||||||
|
db().executeTransaction(new PlayerServerRegisterTransaction(playerUUID, () -> 1000L, TestConstants.PLAYER_ONE_NAME, serverUUID()));
|
||||||
|
|
||||||
|
List<GeoInfo> expected = RandomData.randomGeoInfo();
|
||||||
|
for (GeoInfo geoInfo : expected) {
|
||||||
|
save(playerUUID, geoInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
forcePersistenceCheck();
|
||||||
|
|
||||||
|
List<GeoInfo> result = db().query(GeoInfoQueries.fetchAllGeoInformation()).get(playerUUID);
|
||||||
|
assertEquals(expected, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
default void save(UUID uuid, GeoInfo info) {
|
||||||
|
db().executeTransaction(new GeoInfoStoreTransaction(uuid, info));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
default void serverGeolocationsAreCountedAppropriately() {
|
||||||
|
storeSpecificGeolocations();
|
||||||
|
|
||||||
|
Map<String, Integer> got = db().query(GeoInfoQueries.serverGeolocationCounts(serverUUID()));
|
||||||
|
|
||||||
|
Map<String, Integer> expected = new HashMap<>();
|
||||||
|
// first user has a more recent connection from Finland so their country should be counted as Finland.
|
||||||
|
expected.put("Finland", 1);
|
||||||
|
expected.put("Sweden", 1);
|
||||||
|
expected.put("Not Known", 1);
|
||||||
|
expected.put("Local Machine", 1);
|
||||||
|
expected.put("Denmark", 2);
|
||||||
|
|
||||||
|
assertEquals(expected, got);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
default void networkGeolocationsAreCountedAppropriately() {
|
||||||
|
storeSpecificGeolocations();
|
||||||
|
|
||||||
|
Map<String, Integer> got = db().query(GeoInfoQueries.networkGeolocationCounts());
|
||||||
|
|
||||||
|
Map<String, Integer> expected = new HashMap<>();
|
||||||
|
// first user has a more recent connection from Finland so their country should be counted as Finland.
|
||||||
|
expected.put("Finland", 1);
|
||||||
|
expected.put("Sweden", 1);
|
||||||
|
expected.put("Not Known", 1);
|
||||||
|
expected.put("Local Machine", 1);
|
||||||
|
expected.put("Denmark", 2);
|
||||||
|
|
||||||
|
assertEquals(expected, got);
|
||||||
|
}
|
||||||
|
|
||||||
|
default UUID[] storeSpecificGeolocations() {
|
||||||
|
UUID firstUuid = UUID.randomUUID();
|
||||||
|
UUID secondUuid = UUID.randomUUID();
|
||||||
|
UUID thirdUuid = UUID.randomUUID();
|
||||||
|
UUID fourthUuid = UUID.randomUUID();
|
||||||
|
UUID fifthUuid = UUID.randomUUID();
|
||||||
|
UUID sixthUuid = UUID.randomUUID();
|
||||||
|
UUID[] uuids = {firstUuid, secondUuid, thirdUuid, fourthUuid, fifthUuid, sixthUuid};
|
||||||
|
|
||||||
|
Database db = db();
|
||||||
|
for (UUID uuid : uuids) {
|
||||||
|
db.executeTransaction(new PlayerServerRegisterTransaction(uuid, () -> 0L, "", serverUUID()));
|
||||||
|
}
|
||||||
|
|
||||||
|
save(firstUuid, new GeoInfo("Norway", 0));
|
||||||
|
save(firstUuid, new GeoInfo("Finland", 5));
|
||||||
|
save(secondUuid, new GeoInfo("Sweden", 0));
|
||||||
|
save(thirdUuid, new GeoInfo("Denmark", 0));
|
||||||
|
save(fourthUuid, new GeoInfo("Denmark", 0));
|
||||||
|
save(fifthUuid, new GeoInfo("Not Known", 0));
|
||||||
|
save(sixthUuid, new GeoInfo("Local Machine", 0));
|
||||||
|
return uuids;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
default void pingIsGroupedByGeolocationAppropriately() {
|
||||||
|
UUID[] uuids = storeSpecificGeolocations();
|
||||||
|
|
||||||
|
Database db = db();
|
||||||
|
|
||||||
|
long time = System.currentTimeMillis();
|
||||||
|
List<DateObj<Integer>> ping = Collections.singletonList(new DateObj<>(time, 5));
|
||||||
|
for (UUID uuid : uuids) {
|
||||||
|
db.executeTransaction(new PingStoreTransaction(uuid, serverUUID(), ping));
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, Ping> got = db.query(PingQueries.fetchPingDataOfServerByGeolocation(serverUUID()));
|
||||||
|
|
||||||
|
Map<String, Ping> expected = new HashMap<>();
|
||||||
|
// first user has a more recent connection from Finland so their country should be counted as Finland.
|
||||||
|
Ping expectedPing = new Ping(time, serverUUID(), 5, 5, 5);
|
||||||
|
expected.put("Finland", expectedPing);
|
||||||
|
expected.put("Sweden", expectedPing);
|
||||||
|
expected.put("Not Known", expectedPing);
|
||||||
|
expected.put("Local Machine", expectedPing);
|
||||||
|
expected.put("Denmark", expectedPing);
|
||||||
|
|
||||||
|
assertEquals(expected, got);
|
||||||
|
}
|
||||||
|
}
|
@ -56,7 +56,7 @@ public class RandomData {
|
|||||||
|
|
||||||
public static List<TPS> randomTPS() {
|
public static List<TPS> randomTPS() {
|
||||||
List<TPS> test = new ArrayList<>();
|
List<TPS> test = new ArrayList<>();
|
||||||
for (int i = 0; i < 20; i++) {
|
for (int i = 0; i < randomInt(5, 100); i++) {
|
||||||
int randInt = r.nextInt();
|
int randInt = r.nextInt();
|
||||||
long randLong = Math.abs(r.nextLong());
|
long randLong = Math.abs(r.nextLong());
|
||||||
test.add(new TPS(randLong, randLong, randInt, randLong, randLong, randInt, randInt, randLong));
|
test.add(new TPS(randLong, randLong, randInt, randLong, randLong, randInt, randInt, randLong));
|
||||||
|
Loading…
Reference in New Issue
Block a user