mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-02-22 15:23:14 +01:00
Probably fixed session saving
This commit is contained in:
parent
7c90a66a98
commit
504ab5dd73
@ -162,10 +162,10 @@
|
||||
<version>1.1.8</version>
|
||||
<configuration>
|
||||
<targetClasses>
|
||||
<param>main.java.com.djrapitops.*</param>
|
||||
<param>main.java.com.djrapitops.plan.*</param>
|
||||
</targetClasses>
|
||||
<targetTests>
|
||||
<param>test.java.main.java.com.djrapitops.*</param>
|
||||
<param>test.java.main.java.com.djrapitops.plan.*</param>
|
||||
</targetTests>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
@ -37,7 +37,6 @@ import main.java.com.djrapitops.plan.api.API;
|
||||
import main.java.com.djrapitops.plan.command.PlanCommand;
|
||||
import main.java.com.djrapitops.plan.data.additional.HookHandler;
|
||||
import main.java.com.djrapitops.plan.data.cache.*;
|
||||
import main.java.com.djrapitops.plan.data.handling.InfoPoolProcessor;
|
||||
import main.java.com.djrapitops.plan.data.listeners.*;
|
||||
import main.java.com.djrapitops.plan.database.Database;
|
||||
import main.java.com.djrapitops.plan.database.databases.*;
|
||||
@ -60,7 +59,6 @@ public class Plan extends JavaPlugin {
|
||||
|
||||
private API api;
|
||||
private DataCacheHandler handler;
|
||||
private InfoPoolProcessor infoPoolProcessor;
|
||||
private InspectCacheHandler inspectCache;
|
||||
private AnalysisCacheHandler analysisCache;
|
||||
private Database db;
|
||||
@ -104,8 +102,6 @@ public class Plan extends JavaPlugin {
|
||||
}
|
||||
|
||||
this.handler = new DataCacheHandler(this);
|
||||
// this.infoPoolProcessor = new InfoPoolProcessor(this);
|
||||
// infoPoolProcessor.startPoolTask();
|
||||
this.inspectCache = new InspectCacheHandler(this);
|
||||
this.analysisCache = new AnalysisCacheHandler(this);
|
||||
registerListeners();
|
||||
@ -155,7 +151,6 @@ public class Plan extends JavaPlugin {
|
||||
log(Phrase.CACHE_SAVE + "");
|
||||
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
|
||||
scheduler.execute(() -> {
|
||||
// infoPoolProcessor.processPool();
|
||||
handler.saveCacheOnDisable();
|
||||
});
|
||||
|
||||
@ -331,10 +326,6 @@ public class Plan extends JavaPlugin {
|
||||
public DataCacheHandler getHandler() {
|
||||
return handler;
|
||||
}
|
||||
|
||||
public InfoPoolProcessor getInfoPoolProcessor() {
|
||||
return infoPoolProcessor;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the Current Database
|
||||
|
@ -274,7 +274,7 @@ public class UserData {
|
||||
* @param sessions
|
||||
*/
|
||||
public void addSessions(Collection<SessionData> sessions) {
|
||||
Collection<SessionData> filteredSessions = sessions.parallelStream()
|
||||
Collection<SessionData> filteredSessions = sessions.stream()
|
||||
.filter(session -> session != null)
|
||||
.filter(session -> session.isValid())
|
||||
.collect(Collectors.toList());
|
||||
|
@ -6,14 +6,11 @@ import main.java.com.djrapitops.plan.data.cache.queue.DataCacheClearQueue;
|
||||
import main.java.com.djrapitops.plan.utilities.NewPlayerCreator;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import main.java.com.djrapitops.plan.Phrase;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.Settings;
|
||||
@ -68,18 +65,13 @@ public class DataCacheHandler extends LocationCache {
|
||||
db = plugin.getDB();
|
||||
dataCache = new HashMap<>();
|
||||
|
||||
getTask = new DataCacheGetQueue(plugin);
|
||||
clearTask = new DataCacheClearQueue(plugin, this);
|
||||
processTask = new DataCacheProcessQueue(plugin, this);
|
||||
saveTask = new DataCacheSaveQueue(plugin);
|
||||
startQueues();
|
||||
|
||||
timesSaved = 0;
|
||||
maxPlayers = plugin.getServer().getMaxPlayers();
|
||||
|
||||
try {
|
||||
commandUse = db.getCommandUse();
|
||||
} catch (SQLException e) {
|
||||
plugin.toLog(this.getClass().getName(), e);
|
||||
commandUse = new HashMap<>();
|
||||
if (!getCommandUseFromDb()) {
|
||||
plugin.logError(Phrase.DB_FAILURE_DISABLE + "");
|
||||
plugin.getServer().getPluginManager().disablePlugin(plugin);
|
||||
return;
|
||||
@ -87,6 +79,23 @@ public class DataCacheHandler extends LocationCache {
|
||||
startAsyncPeriodicSaveTask();
|
||||
}
|
||||
|
||||
public boolean getCommandUseFromDb() {
|
||||
try {
|
||||
commandUse = db.getCommandUse();
|
||||
return true;
|
||||
} catch (SQLException e) {
|
||||
plugin.toLog(this.getClass().getName(), e);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void startQueues() {
|
||||
getTask = new DataCacheGetQueue(plugin);
|
||||
clearTask = new DataCacheClearQueue(plugin, this);
|
||||
processTask = new DataCacheProcessQueue(plugin, this);
|
||||
saveTask = new DataCacheSaveQueue(plugin);
|
||||
}
|
||||
|
||||
public void startAsyncPeriodicSaveTask() throws IllegalArgumentException, IllegalStateException {
|
||||
int minutes = Settings.SAVE_CACHE_MIN.getNumber();
|
||||
if (minutes <= 0) {
|
||||
@ -187,6 +196,25 @@ public class DataCacheHandler extends LocationCache {
|
||||
clearTask.stop();
|
||||
List<HandlingInfo> toProcess = processTask.stop();
|
||||
Collections.sort(toProcess, new HandlingInfoTimeComparator());
|
||||
processUnprocessedHandlingInfo(toProcess);
|
||||
List<UserData> data = new ArrayList<>();
|
||||
|
||||
data.addAll(dataCache.values());
|
||||
data.parallelStream()
|
||||
.forEach((userData) -> {
|
||||
endSession(userData.getUuid());
|
||||
addSession(userData);
|
||||
});
|
||||
try {
|
||||
db.saveMultipleUserData(data);
|
||||
db.saveCommandUse(commandUse);
|
||||
db.close();
|
||||
} catch (SQLException e) {
|
||||
plugin.toLog(this.getClass().getName(), e);
|
||||
}
|
||||
}
|
||||
|
||||
private void processUnprocessedHandlingInfo(List<HandlingInfo> toProcess) {
|
||||
for (HandlingInfo i : toProcess) {
|
||||
UserData uData = dataCache.get(i.getUuid());
|
||||
if (uData == null) {
|
||||
@ -205,20 +233,6 @@ public class DataCacheHandler extends LocationCache {
|
||||
i.process(uData);
|
||||
}
|
||||
}
|
||||
List<UserData> data = new ArrayList<>();
|
||||
|
||||
data.addAll(dataCache.values());
|
||||
data.parallelStream()
|
||||
.forEach((userData) -> {
|
||||
addSession(userData);
|
||||
});
|
||||
try {
|
||||
db.saveMultipleUserData(data);
|
||||
db.saveCommandUse(commandUse);
|
||||
db.close();
|
||||
} catch (SQLException e) {
|
||||
plugin.toLog(this.getClass().getName(), e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -261,9 +275,7 @@ public class DataCacheHandler extends LocationCache {
|
||||
private void saveHandlerDataToCache(Player player) {
|
||||
long time = new Date().getTime();
|
||||
UUID uuid = player.getUniqueId();
|
||||
// plugin.getInfoPoolProcessor().
|
||||
addToPool(new ReloadInfo(uuid, time, player.getAddress().getAddress(), player.isBanned(), player.getDisplayName(), player.getGameMode()));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -305,6 +317,9 @@ public class DataCacheHandler extends LocationCache {
|
||||
if (saveTask.containsUUID(uuid)) {
|
||||
return true;
|
||||
}
|
||||
if (processTask.containsUUID(uuid)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -325,7 +340,7 @@ public class DataCacheHandler extends LocationCache {
|
||||
public void newPlayer(OfflinePlayer player) {
|
||||
newPlayer(NewPlayerCreator.createNewPlayer(player));
|
||||
}
|
||||
|
||||
|
||||
public void newPlayer(UserData data) {
|
||||
saveTask.scheduleNewPlayer(data);
|
||||
}
|
||||
|
@ -35,7 +35,6 @@ public class InspectCacheHandler {
|
||||
* @param uuid
|
||||
*/
|
||||
public void cache(UUID uuid) {
|
||||
// plugin.getInfoPoolProcessor().process(uuid);
|
||||
DBCallableProcessor cacher = new DBCallableProcessor() {
|
||||
@Override
|
||||
public void process(UserData data) {
|
||||
|
@ -53,4 +53,8 @@ public class SessionCache {
|
||||
activeSessions.remove(uuid);
|
||||
}
|
||||
}
|
||||
|
||||
public HashMap<UUID, SessionData> getActiveSessions() {
|
||||
return activeSessions;
|
||||
}
|
||||
}
|
||||
|
@ -1,128 +0,0 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package main.java.com.djrapitops.plan.data.handling;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.UserData;
|
||||
import main.java.com.djrapitops.plan.data.cache.DBCallableProcessor;
|
||||
import main.java.com.djrapitops.plan.data.cache.DataCacheHandler;
|
||||
import main.java.com.djrapitops.plan.data.handling.info.*;
|
||||
import main.java.com.djrapitops.plan.utilities.comparators.HandlingInfoTimeComparator;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Risto
|
||||
*/
|
||||
public class InfoPoolProcessor {
|
||||
|
||||
private Plan plugin;
|
||||
private DataCacheHandler handler;
|
||||
private List<HandlingInfo> pool;
|
||||
|
||||
public InfoPoolProcessor(Plan plugin) {
|
||||
this.plugin = plugin;
|
||||
handler = plugin.getHandler();
|
||||
pool = new ArrayList<>();
|
||||
}
|
||||
|
||||
public void startPoolTask() {
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
processPool();
|
||||
}
|
||||
}.runTaskTimerAsynchronously(plugin, 20*60, 20*60);
|
||||
}
|
||||
|
||||
public void processPool() {
|
||||
List<HandlingInfo> toProcess = new ArrayList<>(pool);
|
||||
if (toProcess.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
pool.removeAll(toProcess);
|
||||
List<UUID> uuids = toProcess.parallelStream().map(i -> i.getUuid()).distinct().collect(Collectors.toList());
|
||||
Map<UUID, UserData> userData = getAffectedUserData(uuids);
|
||||
|
||||
Collections.sort(toProcess, new HandlingInfoTimeComparator());
|
||||
for (HandlingInfo r : toProcess) {
|
||||
UserData data = userData.get(r.getUuid());
|
||||
if (data == null) {
|
||||
pool.add(r);
|
||||
continue;
|
||||
}
|
||||
r.process(data);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
plugin.toLog(this.getClass().getName(), e);
|
||||
pool.addAll(toProcess);
|
||||
}
|
||||
}
|
||||
|
||||
public void process(UUID uuid) {
|
||||
List<HandlingInfo> toProcess = new ArrayList<>();
|
||||
toProcess.addAll(pool.stream().filter(i -> i.getUuid().equals(uuid)).collect(Collectors.toList()));
|
||||
if (toProcess.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
pool.removeAll(toProcess);
|
||||
List<UUID> uuids = Arrays.asList(new UUID[]{uuid});
|
||||
Map<UUID, UserData> userData = getAffectedUserData(uuids);
|
||||
|
||||
Collections.sort(toProcess, new HandlingInfoTimeComparator());
|
||||
for (HandlingInfo r : toProcess) {
|
||||
UserData data = userData.get(r.getUuid());
|
||||
if (data == null) {
|
||||
pool.add(r);
|
||||
continue;
|
||||
}
|
||||
r.process(data);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
plugin.toLog(this.getClass().getName(), e);
|
||||
pool.addAll(toProcess);
|
||||
}
|
||||
}
|
||||
|
||||
public Map<UUID, UserData> getAffectedUserData(List<UUID> uuids) {
|
||||
Map<UUID, UserData> userData = new HashMap<>();
|
||||
for (UUID uuid : uuids) {
|
||||
DBCallableProcessor processor = new DBCallableProcessor() {
|
||||
@Override
|
||||
public void process(UserData data) {
|
||||
userData.put(data.getUuid(), data);
|
||||
}
|
||||
};
|
||||
handler.getUserDataForProcessing(processor, uuid);
|
||||
}
|
||||
int waitAttempts = 0;
|
||||
while (uuids.size() < userData.size()) {
|
||||
if (waitAttempts >= 15) {
|
||||
break;
|
||||
}
|
||||
try {
|
||||
Thread.sleep(3000);
|
||||
} catch (InterruptedException ex) {
|
||||
}
|
||||
waitAttempts++;
|
||||
}
|
||||
return userData;
|
||||
}
|
||||
|
||||
public void addToPool(HandlingInfo info) {
|
||||
pool.add(info);
|
||||
}
|
||||
}
|
@ -16,7 +16,6 @@ import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
public class PlanChatListener implements Listener {
|
||||
|
||||
private final Plan plugin;
|
||||
// private final InfoPoolProcessor processor;
|
||||
private final DataCacheHandler handler;
|
||||
|
||||
/**
|
||||
@ -26,7 +25,6 @@ public class PlanChatListener implements Listener {
|
||||
*/
|
||||
public PlanChatListener(Plan plugin) {
|
||||
this.plugin = plugin;
|
||||
// processor = plugin.getInfoPoolProcessor();
|
||||
handler = plugin.getHandler();
|
||||
}
|
||||
|
||||
|
@ -19,7 +19,6 @@ import org.bukkit.event.entity.EntityDeathEvent;
|
||||
public class PlanDeathEventListener implements Listener {
|
||||
|
||||
private final Plan plugin;
|
||||
// private final InfoPoolProcessor processor;
|
||||
private final DataCacheHandler handler;
|
||||
|
||||
/**
|
||||
@ -28,7 +27,6 @@ public class PlanDeathEventListener implements Listener {
|
||||
*/
|
||||
public PlanDeathEventListener(Plan plugin) {
|
||||
this.plugin = plugin;
|
||||
// this.processor = plugin.getInfoPoolProcessor();
|
||||
this.handler = plugin.getHandler();
|
||||
}
|
||||
|
||||
|
@ -17,7 +17,6 @@ import org.bukkit.event.player.PlayerGameModeChangeEvent;
|
||||
public class PlanGamemodeChangeListener implements Listener {
|
||||
|
||||
private final Plan plugin;
|
||||
// private final InfoPoolProcessor processor;
|
||||
private final DataCacheHandler handler;
|
||||
|
||||
/**
|
||||
@ -27,7 +26,6 @@ public class PlanGamemodeChangeListener implements Listener {
|
||||
*/
|
||||
public PlanGamemodeChangeListener(Plan plugin) {
|
||||
this.plugin = plugin;
|
||||
// processor = plugin.getInfoPoolProcessor();
|
||||
handler = plugin.getHandler();
|
||||
|
||||
}
|
||||
|
@ -27,7 +27,6 @@ public class PlanPlayerListener implements Listener {
|
||||
|
||||
private final Plan plugin;
|
||||
private final DataCacheHandler handler;
|
||||
// private final InfoPoolProcessor processor;
|
||||
|
||||
/**
|
||||
* Class Constructor.
|
||||
@ -40,7 +39,6 @@ public class PlanPlayerListener implements Listener {
|
||||
public PlanPlayerListener(Plan plugin) {
|
||||
this.plugin = plugin;
|
||||
handler = plugin.getHandler();
|
||||
// handler = plugin.getInfoPoolProcessor();
|
||||
}
|
||||
|
||||
/**
|
||||
|
199
Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/DataCacheHandlerTest.java
vendored
Normal file
199
Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/DataCacheHandlerTest.java
vendored
Normal file
@ -0,0 +1,199 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package test.java.main.java.com.djrapitops.plan.data.cache;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.UserData;
|
||||
import main.java.com.djrapitops.plan.data.cache.DataCacheHandler;
|
||||
import main.java.com.djrapitops.plan.database.Database;
|
||||
import main.java.com.djrapitops.plan.database.databases.SQLiteDB;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.junit.After;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.runner.RunWith;
|
||||
import static org.powermock.api.mockito.PowerMockito.when;
|
||||
import org.powermock.core.classloader.annotations.PrepareForTest;
|
||||
import org.powermock.modules.junit4.PowerMockRunner;
|
||||
import test.java.utils.MockUtils;
|
||||
import test.java.utils.TestInit;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Risto
|
||||
*/
|
||||
@RunWith(PowerMockRunner.class)
|
||||
@PrepareForTest(JavaPlugin.class)
|
||||
public class DataCacheHandlerTest {
|
||||
|
||||
private Plan plan;
|
||||
private Database db;
|
||||
private DataCacheHandler handler;
|
||||
private boolean calledSaveCommandUse;
|
||||
private boolean calledSaveUserData;
|
||||
private boolean calledSaveMultiple;
|
||||
|
||||
public DataCacheHandlerTest() {
|
||||
TestInit t = new TestInit();
|
||||
assertTrue("Not set up", t.setUp());
|
||||
plan = t.getPlanMock();
|
||||
calledSaveCommandUse = false;
|
||||
calledSaveUserData = false;
|
||||
db = new SQLiteDB(plan, "debug" + new Date().getTime()) {
|
||||
@Override
|
||||
public void startConnectionPingTask(Plan plugin) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveCommandUse(HashMap<String, Integer> c) {
|
||||
calledSaveCommandUse = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveUserData(UUID uuid, UserData data) throws SQLException {
|
||||
calledSaveUserData = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveMultipleUserData(List<UserData> data) throws SQLException {
|
||||
calledSaveMultiple = true;
|
||||
}
|
||||
};
|
||||
when(plan.getDB()).thenReturn(db);
|
||||
handler = new DataCacheHandler(plan) {
|
||||
@Override
|
||||
public boolean getCommandUseFromDb() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startQueues() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startAsyncPeriodicSaveTask() throws IllegalArgumentException, IllegalStateException {
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() {
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testGetUserDataForProcessing_3args() {
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testGetUserDataForProcessing_DBCallableProcessor_UUID() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSaveCachedUserData() {
|
||||
handler.saveCachedUserData();
|
||||
assertTrue("Didn't call saveMultiple", calledSaveMultiple);
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testAddToPool() {
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testSaveCacheOnDisable() {
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testSaveCachedData() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSaveCommandUse() {
|
||||
handler.saveCommandUse();
|
||||
assertTrue("Didn't call saveCMDUse for db", calledSaveCommandUse);
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testSaveHandlerDataToCache() {
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testClearCache() {
|
||||
}
|
||||
|
||||
@Ignore("mock log")
|
||||
@Test
|
||||
public void testClearFromCache() {
|
||||
UUID uuid = MockUtils.getPlayerUUID();
|
||||
handler.getDataCache().put(uuid, null);
|
||||
handler.clearFromCache(uuid);
|
||||
assertTrue("Found uuid", !handler.getDataCache().containsKey(uuid));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testScheludeForClear() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsDataAccessed() {
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testNewPlayer_Player() {
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testNewPlayer_OfflinePlayer() {
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testNewPlayer_UserData() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetDataCache() {
|
||||
assertTrue("Cache was null", handler.getDataCache() != null);
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testHandleReload() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetMaxPlayers() {
|
||||
assertEquals(20, handler.getMaxPlayers());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHandleCommand() {
|
||||
handler.handleCommand("/plan");
|
||||
assertEquals((Integer) 1, handler.getCommandUse().get("/plan"));
|
||||
}
|
||||
|
||||
}
|
62
Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/LocationCacheTest.java
vendored
Normal file
62
Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/LocationCacheTest.java
vendored
Normal file
@ -0,0 +1,62 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package test.java.main.java.com.djrapitops.plan.data.cache;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import main.java.com.djrapitops.plan.data.cache.LocationCache;
|
||||
import org.bukkit.Location;
|
||||
import static org.junit.Assert.*;
|
||||
import org.junit.Test;
|
||||
import org.junit.Before;
|
||||
import test.java.utils.MockUtils;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Risto
|
||||
*/
|
||||
public class LocationCacheTest {
|
||||
|
||||
private LocationCache test;
|
||||
|
||||
public LocationCacheTest() {
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
test = new LocationCache();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddLocation() {
|
||||
Location loc = new Location(MockUtils.mockWorld(), 0, 0, 0);
|
||||
UUID uuid = MockUtils.getPlayerUUID();
|
||||
test.addLocation(uuid, loc);
|
||||
assertTrue("Didn't contain location", test.getLocationsForSaving(uuid).contains(loc));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddLocations() {
|
||||
Location loc = new Location(MockUtils.mockWorld(), 0, 0, 0);
|
||||
Location loc2 = new Location(MockUtils.mockWorld(), 1, 1, 1);
|
||||
UUID uuid = MockUtils.getPlayerUUID();
|
||||
test.addLocations(uuid, Arrays.asList(new Location[]{loc, loc2}));
|
||||
List<Location> result = test.getLocationsForSaving(uuid);
|
||||
assertTrue("Didn't contain location", result.contains(loc));
|
||||
assertTrue("Didn't contain location", result.contains(loc2));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClearLocations() {
|
||||
Location loc = new Location(MockUtils.mockWorld(), 0, 0, 0);
|
||||
UUID uuid = MockUtils.getPlayerUUID();
|
||||
test.addLocation(uuid, loc);
|
||||
test.clearLocations(uuid);
|
||||
assertTrue("contains location", !test.getLocationsForSaving(uuid).contains(loc));
|
||||
}
|
||||
|
||||
}
|
80
Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/SessionCacheTest.java
vendored
Normal file
80
Plan/src/test/java/main/java/com/djrapitops/plan/data/cache/SessionCacheTest.java
vendored
Normal file
@ -0,0 +1,80 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package test.java.main.java.com.djrapitops.plan.data.cache;
|
||||
|
||||
import java.util.UUID;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.DemographicsData;
|
||||
import main.java.com.djrapitops.plan.data.SessionData;
|
||||
import main.java.com.djrapitops.plan.data.UserData;
|
||||
import main.java.com.djrapitops.plan.data.cache.SessionCache;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.easymock.EasyMock;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import org.junit.Test;
|
||||
import org.junit.Before;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.powermock.api.easymock.PowerMock;
|
||||
import org.powermock.core.classloader.annotations.PrepareForTest;
|
||||
import org.powermock.modules.junit4.PowerMockRunner;
|
||||
import test.java.utils.MockUtils;
|
||||
import test.java.utils.TestInit;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Risto
|
||||
*/
|
||||
@RunWith(PowerMockRunner.class)
|
||||
@PrepareForTest(JavaPlugin.class)
|
||||
public class SessionCacheTest {
|
||||
|
||||
private SessionCache test;
|
||||
|
||||
public SessionCacheTest() {
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
test = new SessionCache();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStartSession() {
|
||||
UUID uuid = MockUtils.getPlayerUUID();
|
||||
test.startSession(uuid);
|
||||
assertTrue("Didn't contain new session", test.getActiveSessions().containsKey(uuid));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEndSession() {
|
||||
UUID uuid = MockUtils.getPlayerUUID();
|
||||
test.getActiveSessions().put(uuid, new SessionData(0));
|
||||
test.endSession(uuid);
|
||||
SessionData testSession = test.getActiveSessions().get(uuid);
|
||||
assertTrue("Didn't end session", testSession.getSessionEnd() != -1);
|
||||
assertTrue("Session length not positive", testSession.getLength() > 0L);
|
||||
assertTrue("Session not valid", testSession.isValid());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddSession() {
|
||||
UUID uuid = MockUtils.getPlayerUUID();
|
||||
TestInit t = new TestInit();
|
||||
assertTrue("Not set up", t.setUp());
|
||||
Plan plan = t.getPlanMock();
|
||||
PowerMock.mockStatic(JavaPlugin.class);
|
||||
EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan);
|
||||
EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan);
|
||||
EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan);
|
||||
PowerMock.replay(JavaPlugin.class);
|
||||
test.getActiveSessions().put(uuid, new SessionData(0));
|
||||
test.endSession(uuid);
|
||||
UserData data = new UserData(MockUtils.mockPlayer(), new DemographicsData());
|
||||
test.addSession(data);
|
||||
assertTrue("Didn't add session to data", data.getSessions().size() == 1);
|
||||
}
|
||||
|
||||
}
|
@ -5,13 +5,9 @@
|
||||
*/
|
||||
package test.java.main.java.com.djrapitops.plan.data.handling;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.file.Files;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Date;
|
||||
import java.util.stream.Collectors;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.DemographicsData;
|
||||
import main.java.com.djrapitops.plan.data.KillData;
|
||||
@ -26,6 +22,7 @@ import org.junit.After;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.powermock.api.easymock.PowerMock;
|
||||
@ -54,11 +51,16 @@ public class KillHandlingTest {
|
||||
TestInit t = new TestInit();
|
||||
assertTrue("Not set up", t.setUp());
|
||||
plan = t.getPlanMock();
|
||||
db = new SQLiteDB(plan, "debug"+new Date().getTime()) {
|
||||
db = new SQLiteDB(plan, "debug" + new Date().getTime()) {
|
||||
@Override
|
||||
public void startConnectionPingTask(Plan plugin) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getUserId(String uuid) {
|
||||
return 1;
|
||||
}
|
||||
};
|
||||
when(plan.getDB()).thenReturn(db);
|
||||
PowerMock.mockStatic(JavaPlugin.class);
|
||||
@ -67,7 +69,6 @@ public class KillHandlingTest {
|
||||
EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan);
|
||||
EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan);
|
||||
PowerMock.replay(JavaPlugin.class);
|
||||
db.init();
|
||||
}
|
||||
|
||||
@After
|
||||
@ -79,7 +80,7 @@ public class KillHandlingTest {
|
||||
public void testProcessKillInfoPlayer() throws SQLException {
|
||||
UserData data = new UserData(MockUtils.mockPlayer(), new DemographicsData());
|
||||
Player dead = MockUtils.mockPlayer2();
|
||||
db.saveUserData(dead.getUniqueId(), new UserData(dead, new DemographicsData()));
|
||||
// db.saveUserData(dead.getUniqueId(), new UserData(dead, new DemographicsData()));
|
||||
KillHandling.processKillInfo(data, 10L, dead, "TestWeapon");
|
||||
KillData expected = new KillData(dead.getUniqueId(), 1, "TestWeapon", 10L);
|
||||
assertTrue("Didn't add the kill", data.getPlayerKills().size() == 1);
|
||||
@ -90,10 +91,10 @@ public class KillHandlingTest {
|
||||
assertEquals(expected.getWeapon(), result.getWeapon());
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testProcessKillInfoException() throws SQLException, IOException {
|
||||
UserData data = new UserData(MockUtils.mockPlayer(), new DemographicsData());
|
||||
db.close();
|
||||
Player dead = MockUtils.mockPlayer2();
|
||||
KillHandling.processKillInfo(data, 10L, dead, "TestWeapon");
|
||||
assertTrue("Added the kill", data.getPlayerKills().isEmpty());
|
||||
|
@ -7,6 +7,7 @@ package test.java.main.java.com.djrapitops.plan.data.handling.info;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.Date;
|
||||
import java.util.UUID;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.DemographicsData;
|
||||
import main.java.com.djrapitops.plan.data.KillData;
|
||||
@ -18,7 +19,6 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.easymock.EasyMock;
|
||||
import org.junit.After;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.Test;
|
||||
import static org.junit.Assert.*;
|
||||
import org.junit.Before;
|
||||
@ -37,9 +37,9 @@ import test.java.utils.TestInit;
|
||||
@RunWith(PowerMockRunner.class)
|
||||
@PrepareForTest(JavaPlugin.class)
|
||||
public class KillInfoTest {
|
||||
|
||||
|
||||
private Database db;
|
||||
|
||||
|
||||
public KillInfoTest() {
|
||||
}
|
||||
|
||||
@ -48,11 +48,16 @@ public class KillInfoTest {
|
||||
TestInit t = new TestInit();
|
||||
assertTrue("Not set up", t.setUp());
|
||||
Plan plan = t.getPlanMock();
|
||||
db = new SQLiteDB(plan, "debug"+new Date().getTime()) {
|
||||
db = new SQLiteDB(plan, "debug" + new Date().getTime()) {
|
||||
@Override
|
||||
public void startConnectionPingTask(Plan plugin) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getUserId(String uuid) {
|
||||
return 1;
|
||||
}
|
||||
};
|
||||
when(plan.getDB()).thenReturn(db);
|
||||
PowerMock.mockStatic(JavaPlugin.class);
|
||||
@ -61,30 +66,29 @@ public class KillInfoTest {
|
||||
EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan);
|
||||
EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan);
|
||||
PowerMock.replay(JavaPlugin.class);
|
||||
db.init();
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws SQLException {
|
||||
db.close();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testProcess() throws SQLException {
|
||||
UserData data = new UserData(MockUtils.mockPlayer(), new DemographicsData());
|
||||
Player dead = MockUtils.mockPlayer2();
|
||||
db.saveUserData(dead.getUniqueId(), new UserData(dead, new DemographicsData()));
|
||||
// db.saveUserData(dead.getUniqueId(), new UserData(dead, new DemographicsData()));
|
||||
KillInfo i = new KillInfo(data.getUuid(), 10L, dead, "TestWeapon");
|
||||
assertTrue(i.process(data));
|
||||
KillData expected = new KillData(dead.getUniqueId(), 1, "TestWeapon", 10L);
|
||||
assertTrue("Didn't add the kill", data.getPlayerKills().size() == 1);
|
||||
KillData result = data.getPlayerKills().get(0);
|
||||
assertEquals(expected.getDate(), result.getDate());
|
||||
assertEquals(expected.getVictim(), result.getVictim());
|
||||
assertEquals(expected.getVictimUserID(), result.getVictimUserID());
|
||||
assertEquals(expected.getWeapon(), result.getWeapon());
|
||||
KillData result = data.getPlayerKills().get(0);
|
||||
assertEquals(expected.getDate(), result.getDate());
|
||||
assertEquals(expected.getVictim(), result.getVictim());
|
||||
assertEquals(expected.getVictimUserID(), result.getVictimUserID());
|
||||
assertEquals(expected.getWeapon(), result.getWeapon());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testProcessMobKill() throws SQLException {
|
||||
UserData data = new UserData(MockUtils.mockPlayer(), new DemographicsData());
|
||||
@ -93,7 +97,7 @@ public class KillInfoTest {
|
||||
assertTrue("Added a kill", data.getPlayerKills().isEmpty());
|
||||
assertEquals(1, data.getMobKills());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testProcessMobKillWrongUUID() throws SQLException {
|
||||
UserData data = new UserData(MockUtils.mockPlayer(), new DemographicsData());
|
||||
@ -102,6 +106,5 @@ public class KillInfoTest {
|
||||
assertTrue("Added a kill", data.getPlayerKills().isEmpty());
|
||||
assertEquals(0, data.getMobKills());
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ import main.java.com.djrapitops.plan.data.DemographicsData;
|
||||
import main.java.com.djrapitops.plan.data.UserData;
|
||||
import main.java.com.djrapitops.plan.data.cache.DBCallableProcessor;
|
||||
import main.java.com.djrapitops.plan.database.Database;
|
||||
import main.java.com.djrapitops.plan.database.databases.MySQLDB;
|
||||
import main.java.com.djrapitops.plan.database.databases.SQLiteDB;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.junit.After;
|
||||
@ -36,6 +37,7 @@ import org.powermock.core.classloader.annotations.PrepareForTest;
|
||||
import org.powermock.modules.junit4.PowerMockRunner;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
import org.easymock.EasyMock;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import test.java.utils.MockUtils;
|
||||
|
||||
@ -59,7 +61,7 @@ public class DatabaseTest {
|
||||
TestInit t = new TestInit();
|
||||
assertTrue("Not set up", t.setUp());
|
||||
plan = t.getPlanMock();
|
||||
db = new SQLiteDB(plan, "debug"+new Date().getTime()) {
|
||||
db = new SQLiteDB(plan, "debug" + new Date().getTime()) {
|
||||
@Override
|
||||
public void startConnectionPingTask(Plan plugin) {
|
||||
|
||||
@ -106,6 +108,34 @@ public class DatabaseTest {
|
||||
assertTrue("Database failed to init.", db.init());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSqLiteGetConfigName() {
|
||||
assertEquals("sqlite", db.getConfigName());
|
||||
}
|
||||
@Test
|
||||
public void testSqLiteGetgName() {
|
||||
assertEquals("SQLite", db.getName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMysqlGetConfigName() {
|
||||
assertEquals("mysql", new MySQLDB(plan) {
|
||||
@Override
|
||||
public void startConnectionPingTask(Plan plugin) {
|
||||
|
||||
}
|
||||
}.getConfigName());
|
||||
}
|
||||
@Test
|
||||
public void testMysqlGetName() {
|
||||
assertEquals("MySQL", new MySQLDB(plan) {
|
||||
@Override
|
||||
public void startConnectionPingTask(Plan plugin) {
|
||||
|
||||
}
|
||||
}.getName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRemoveAll() throws SQLException {
|
||||
db.init();
|
||||
@ -158,6 +188,7 @@ public class DatabaseTest {
|
||||
public void testSaveMultipleUserData() throws SQLException {
|
||||
db.init();
|
||||
UserData data = new UserData(MockUtils.mockPlayer(), new DemographicsData());
|
||||
db.saveUserData(data.getUuid(), data);
|
||||
UserData data2 = new UserData(MockUtils.mockPlayer2(), new DemographicsData());
|
||||
List<UserData> list = new ArrayList<>();
|
||||
list.add(data);
|
||||
|
@ -36,6 +36,11 @@ public class MockUtils {
|
||||
when(p.hasPermission("plan.inspect.other")).thenReturn(true);
|
||||
return p;
|
||||
}
|
||||
|
||||
public static UUID getPlayerUUID() {
|
||||
return UUID.fromString("45b0dfdb-f71d-4cf3-8c21-27c9d4c651db");
|
||||
}
|
||||
|
||||
public static Player mockPlayer2() {
|
||||
Player p = PowerMockito.mock(Player.class);
|
||||
when(p.getGameMode()).thenReturn(GameMode.SPECTATOR);
|
||||
@ -50,6 +55,10 @@ public class MockUtils {
|
||||
when(p.getName()).thenReturn("TestName2");
|
||||
return p;
|
||||
}
|
||||
|
||||
public static UUID getPlayer2UUID() {
|
||||
return UUID.fromString("ec94a954-1fa1-445b-b09b-9b698519af80");
|
||||
}
|
||||
|
||||
public static Player mockBrokenPlayer() {
|
||||
Player p = PowerMockito.mock(Player.class);
|
||||
|
@ -9,7 +9,6 @@ import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.nio.file.Files;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.database.Database;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.Server;
|
||||
import org.powermock.api.mockito.PowerMockito;
|
||||
@ -51,6 +50,7 @@ public class TestInit {
|
||||
|
||||
Server mockServer = PowerMockito.mock(Server.class);
|
||||
when(mockServer.getIp()).thenReturn("0.0.0.0");
|
||||
when(mockServer.getMaxPlayers()).thenReturn(20);
|
||||
// Mockito.doReturn("0.0.0.0").when(mockServer).getIp();
|
||||
when(planMock.getServer()).thenReturn(mockServer);
|
||||
// Mockito.doReturn("0.0.0.0").when(planMock).getServer().getIp();
|
||||
|
Loading…
Reference in New Issue
Block a user