Probably fixed session saving

This commit is contained in:
Rsl1122 2017-04-12 09:08:17 +03:00
parent 7c90a66a98
commit 504ab5dd73
19 changed files with 462 additions and 204 deletions

View File

@ -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>

View File

@ -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

View File

@ -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());

View File

@ -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);
}

View File

@ -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) {

View File

@ -53,4 +53,8 @@ public class SessionCache {
activeSessions.remove(uuid);
}
}
public HashMap<UUID, SessionData> getActiveSessions() {
return activeSessions;
}
}

View File

@ -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);
}
}

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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();
}
/**

View 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"));
}
}

View 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));
}
}

View 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);
}
}

View File

@ -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());

View File

@ -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());
}
}

View File

@ -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);

View File

@ -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);

View File

@ -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();