Changed how permissions are used internally

This commit is contained in:
Rsl1122 2017-04-19 16:59:48 +03:00
parent 504ab5dd73
commit 58ca5f9d2c
43 changed files with 816 additions and 71 deletions

View File

@ -0,0 +1,42 @@
/*
* 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;
import org.bukkit.command.CommandSender;
/**
*
* @author Risto
*/
public enum Permissions {
HELP("plan.?"),
INSPECT("plan.inspect"),
QUICK_INSPECT("plan.qinspect"),
QUICK_INSPECT_OTHER("plan.qinspect.other"),
INSPECT_OTHER("plan.inspect.other"),
ANALYZE("plan.analyze"),
QUICK_ANALYZE("plan.qanalyze"),
SEARCH("plan.search"),
RELOAD("plan.reload"),
INFO("plan.info"),
IGNORE_COMMANDUSE("plan.ignore.commanduse"),
MANAGE("plan.manage");
private final String permission;
private Permissions(String permission) {
this.permission = permission;
}
public boolean userHasThisPermission(CommandSender p) {
return p.hasPermission(permission);
}
public String getPermission() {
return permission;
}
}

View File

@ -98,7 +98,7 @@ public class PlanCommand implements CommandExecutor {
boolean console = !(sender instanceof Player);
if (!sender.hasPermission(command.getPermission())) {
if (!command.getPermission().userHasThisPermission(sender)) {
sender.sendMessage("" + Phrase.COMMAND_NO_PERMISSION);
return true;
}

View File

@ -1,5 +1,6 @@
package main.java.com.djrapitops.plan.command;
import main.java.com.djrapitops.plan.Permissions;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
@ -10,7 +11,7 @@ import org.bukkit.command.CommandSender;
public abstract class SubCommand {
private final String name;
private final String permission;
private final Permissions permission;
private final String usage;
private final CommandType commandType;
private final String arguments;
@ -23,7 +24,7 @@ public abstract class SubCommand {
* @param commandType Type Enum
* @param arguments Additional possible arguments the command requires
*/
public SubCommand(String name, String permission, String usage, CommandType commandType, String arguments) {
public SubCommand(String name, Permissions permission, String usage, CommandType commandType, String arguments) {
this.name = name;
this.permission = permission;
this.usage = usage;
@ -55,7 +56,7 @@ public abstract class SubCommand {
/**
* @return Required permission
*/
public String getPermission() {
public Permissions getPermission() {
return permission;
}

View File

@ -1,6 +1,7 @@
package main.java.com.djrapitops.plan.command.commands;
import java.util.Date;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.Settings;
@ -31,7 +32,7 @@ public class AnalyzeCommand extends SubCommand {
* @param plugin Current instance of Plan
*/
public AnalyzeCommand(Plan plugin) {
super("analyze, analyse, analysis", "plan.analyze", Phrase.CMD_USG_ANALYZE.parse(), CommandType.CONSOLE, "");
super("analyze, analyse, analysis", Permissions.ANALYZE, Phrase.CMD_USG_ANALYZE.parse(), CommandType.CONSOLE, "");
this.plugin = plugin;
analysisCache = plugin.getAnalysisCache();
}

View File

@ -1,5 +1,6 @@
package main.java.com.djrapitops.plan.command.commands;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.command.CommandType;
@ -26,7 +27,7 @@ public class HelpCommand extends SubCommand {
* @param command Current instance of PlanCommand
*/
public HelpCommand(Plan plugin, PlanCommand command) {
super("help,?", "plan.?", Phrase.CMD_USG_HELP + "", CommandType.CONSOLE, "");
super("help,?", Permissions.HELP, Phrase.CMD_USG_HELP + "", CommandType.CONSOLE, "");
this.plugin = plugin;
this.command = command;
@ -46,7 +47,7 @@ public class HelpCommand extends SubCommand {
continue;
}
if (!sender.hasPermission(command.getPermission())) {
if (!command.getPermission().userHasThisPermission(sender)) {
continue;
}

View File

@ -1,5 +1,6 @@
package main.java.com.djrapitops.plan.command.commands;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.command.CommandType;
@ -23,7 +24,7 @@ public class InfoCommand extends SubCommand {
* @param plugin Current instance of Plan
*/
public InfoCommand(Plan plugin) {
super("info", "plan.info", Phrase.CMD_USG_INFO + "", CommandType.CONSOLE, "");
super("info", Permissions.INFO, Phrase.CMD_USG_INFO + "", CommandType.CONSOLE, "");
this.plugin = plugin;
}

View File

@ -1,6 +1,7 @@
package main.java.com.djrapitops.plan.command.commands;
import java.util.UUID;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.Settings;
@ -33,7 +34,7 @@ public class InspectCommand extends SubCommand {
* @param plugin Current instance of Plan
*/
public InspectCommand(Plan plugin) {
super("inspect", "plan.inspect", Phrase.CMD_USG_INSPECT + "", CommandType.CONSOLE_WITH_ARGUMENTS, Phrase.ARG_PLAYER + "");
super("inspect", Permissions.INSPECT, Phrase.CMD_USG_INSPECT + "", CommandType.CONSOLE_WITH_ARGUMENTS, Phrase.ARG_PLAYER + "");
this.plugin = plugin;
inspectCache = plugin.getInspectCache();

View File

@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands;
import java.util.ArrayList;
import java.util.List;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.command.CommandType;
@ -27,7 +28,7 @@ public class ManageCommand extends SubCommand {
* @param plugin Current instance of Plan
*/
public ManageCommand(Plan plugin) {
super("manage, m", "plan.manage", Phrase.CMD_USG_MANAGE+"", CommandType.CONSOLE, "");
super("manage, m", Permissions.MANAGE, Phrase.CMD_USG_MANAGE+"", CommandType.CONSOLE, "");
this.plugin = plugin;
commands = new ArrayList<>();
commands.add(new ManageHelpCommand(plugin, this));
@ -98,7 +99,7 @@ public class ManageCommand extends SubCommand {
boolean console = !(sender instanceof Player);
if (!sender.hasPermission(command.getPermission())) {
if (!command.getPermission().userHasThisPermission(sender)) {
sender.sendMessage("" + Phrase.COMMAND_NO_PERMISSION);
return true;
}

View File

@ -1,5 +1,6 @@
package main.java.com.djrapitops.plan.command.commands;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.command.CommandType;
@ -21,7 +22,7 @@ public class ReloadCommand extends SubCommand {
* @param plugin Current instance of Plan
*/
public ReloadCommand(Plan plugin) {
super("reload", "plan.reload", Phrase.CMD_USG_RELOAD + "", CommandType.CONSOLE, "");
super("reload", Permissions.MANAGE, Phrase.CMD_USG_RELOAD + "", CommandType.CONSOLE, "");
this.plugin = plugin;
}

View File

@ -4,6 +4,7 @@ import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.Settings;
@ -35,7 +36,7 @@ public class SearchCommand extends SubCommand {
* @param plugin Current instance of Plan
*/
public SearchCommand(Plan plugin) {
super("search", "plan.search", Phrase.CMD_USG_SEARCH + "", CommandType.CONSOLE_WITH_ARGUMENTS, Phrase.ARG_SEARCH + "");
super("search", Permissions.SEARCH, Phrase.CMD_USG_SEARCH + "", CommandType.CONSOLE_WITH_ARGUMENTS, Phrase.ARG_SEARCH + "");
this.plugin = plugin;
inspectCache = plugin.getInspectCache();
}

View File

@ -1,5 +1,6 @@
package main.java.com.djrapitops.plan.command.commands.manage;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.command.CommandType;
@ -24,7 +25,7 @@ public class ManageBackupCommand extends SubCommand {
* @param plugin Current instance of Plan
*/
public ManageBackupCommand(Plan plugin) {
super("backup", "plan.manage", Phrase.CMD_USG_MANAGE_BACKUP + "", CommandType.CONSOLE, "<DB>");
super("backup", Permissions.MANAGE, Phrase.CMD_USG_MANAGE_BACKUP + "", CommandType.CONSOLE, "<DB>");
this.plugin = plugin;
}

View File

@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands.manage;
import java.sql.SQLException;
import java.util.Arrays;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.command.CommandType;
@ -25,7 +26,7 @@ public class ManageClearCommand extends SubCommand {
* @param plugin Current instance of Plan
*/
public ManageClearCommand(Plan plugin) {
super("clear", "plan.manage", Phrase.CMD_USG_MANAGE_CLEAR + "", CommandType.CONSOLE_WITH_ARGUMENTS, "<DB> [-a]");
super("clear", Permissions.MANAGE, Phrase.CMD_USG_MANAGE_CLEAR + "", CommandType.CONSOLE_WITH_ARGUMENTS, "<DB> [-a]");
this.plugin = plugin;
}

View File

@ -1,5 +1,6 @@
package main.java.com.djrapitops.plan.command.commands.manage;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.command.CommandType;
@ -26,7 +27,7 @@ public class ManageHelpCommand extends SubCommand {
* @param command Current instance of PlanCommand
*/
public ManageHelpCommand(Plan plugin, ManageCommand command) {
super("help,?", "plan.manage", Phrase.CMD_USG_MANAGE_HELP + "", CommandType.CONSOLE, "");
super("help,?", Permissions.MANAGE, Phrase.CMD_USG_MANAGE_HELP + "", CommandType.CONSOLE, "");
this.plugin = plugin;
this.command = command;
@ -47,7 +48,7 @@ public class ManageHelpCommand extends SubCommand {
continue;
}
if (!sender.hasPermission(command.getPermission())) {
if (!command.getPermission().userHasThisPermission(sender)) {
continue;
}

View File

@ -1,6 +1,7 @@
package main.java.com.djrapitops.plan.command.commands.manage;
import java.sql.SQLException;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.command.CommandType;
@ -23,7 +24,7 @@ public class ManageHotswapCommand extends SubCommand {
* @param plugin Current instance of Plan
*/
public ManageHotswapCommand(Plan plugin) {
super("hotswap", "plan.manage", Phrase.CMD_USG_MANAGE_HOTSWAP + "", CommandType.CONSOLE_WITH_ARGUMENTS, "<DB>");
super("hotswap", Permissions.MANAGE, Phrase.CMD_USG_MANAGE_HOTSWAP + "", CommandType.CONSOLE_WITH_ARGUMENTS, "<DB>");
this.plugin = plugin;
}

View File

@ -6,6 +6,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.command.CommandType;
@ -35,7 +36,7 @@ public class ManageImportCommand extends SubCommand {
* @param plugin Current instance of Plan
*/
public ManageImportCommand(Plan plugin) {
super("import", "plan.manage", Phrase.CMD_USG_MANAGE_IMPORT + "", CommandType.CONSOLE, Phrase.ARG_IMPORT + "");
super("import", Permissions.MANAGE, Phrase.CMD_USG_MANAGE_IMPORT + "", CommandType.CONSOLE, Phrase.ARG_IMPORT + "");
this.plugin = plugin;
}

View File

@ -3,6 +3,7 @@ package main.java.com.djrapitops.plan.command.commands.manage;
import java.util.Arrays;
import java.util.Collection;
import java.util.UUID;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.command.CommandType;
@ -27,7 +28,7 @@ public class ManageMoveCommand extends SubCommand {
* @param plugin Current instance of Plan
*/
public ManageMoveCommand(Plan plugin) {
super("move", "plan.manage", Phrase.CMD_USG_MANAGE_MOVE + "", CommandType.CONSOLE_WITH_ARGUMENTS, Phrase.ARG_MOVE + "");
super("move", Permissions.MANAGE, Phrase.CMD_USG_MANAGE_MOVE + "", CommandType.CONSOLE_WITH_ARGUMENTS, Phrase.ARG_MOVE + "");
this.plugin = plugin;
}

View File

@ -3,6 +3,7 @@ package main.java.com.djrapitops.plan.command.commands.manage;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.UUID;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.command.CommandType;
@ -32,7 +33,7 @@ public class ManageRemoveCommand extends SubCommand {
* @param plugin Current instance of Plan
*/
public ManageRemoveCommand(Plan plugin) {
super("remove", "plan.manage", Phrase.CMD_USG_MANAGE_REMOVE + "", CommandType.CONSOLE_WITH_ARGUMENTS, Phrase.ARG_PLAYER + " [-a]");
super("remove", Permissions.MANAGE, Phrase.CMD_USG_MANAGE_REMOVE + "", CommandType.CONSOLE_WITH_ARGUMENTS, Phrase.ARG_PLAYER + " [-a]");
this.plugin = plugin;
}
@ -57,7 +58,7 @@ public class ManageRemoveCommand extends SubCommand {
return true;
}
String playerName = MiscUtils.getPlayerName(args, sender);
String playerName = MiscUtils.getPlayerName(args, sender, Permissions.MANAGE);
UUID uuid;
try {

View File

@ -4,6 +4,7 @@ import java.io.File;
import java.util.Arrays;
import java.util.Collection;
import java.util.UUID;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.command.CommandType;
@ -30,7 +31,7 @@ public class ManageRestoreCommand extends SubCommand {
* @param plugin Current instance of Plan
*/
public ManageRestoreCommand(Plan plugin) {
super("restore", "plan.restore", Phrase.CMD_USG_MANAGE_RESTORE + "", CommandType.CONSOLE, Phrase.ARG_RESTORE + "");
super("restore", Permissions.MANAGE, Phrase.CMD_USG_MANAGE_RESTORE + "", CommandType.CONSOLE, Phrase.ARG_RESTORE + "");
this.plugin = plugin;
}

View File

@ -1,5 +1,6 @@
package main.java.com.djrapitops.plan.command.commands.manage;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.command.CommandType;
@ -22,7 +23,7 @@ public class ManageStatusCommand extends SubCommand {
* @param plugin Current instance of Plan
*/
public ManageStatusCommand(Plan plugin) {
super("status", "plan.manage", Phrase.CMD_USG_MANAGE_STATUS + "", CommandType.CONSOLE, "");
super("status", Permissions.MANAGE, Phrase.CMD_USG_MANAGE_STATUS + "", CommandType.CONSOLE, "");
this.plugin = plugin;
}

View File

@ -92,7 +92,7 @@ public class DataCacheHandler extends LocationCache {
public void startQueues() {
getTask = new DataCacheGetQueue(plugin);
clearTask = new DataCacheClearQueue(plugin, this);
processTask = new DataCacheProcessQueue(plugin, this);
processTask = new DataCacheProcessQueue(this);
saveTask = new DataCacheSaveQueue(plugin);
}
@ -246,7 +246,7 @@ public class DataCacheHandler extends LocationCache {
public void process(UserData data) {
data.addLocations(getLocationsForSaving(uuid));
clearLocations(uuid);
addSession(data);
// addSession(data);
saveTask.scheduleForSave(data);
scheludeForClear(uuid);
}
@ -308,20 +308,9 @@ public class DataCacheHandler extends LocationCache {
* @param uuid
* @return
*/
public boolean isDataAccessed(UUID uuid) {
public boolean isDataAccessed(UUID uuid) {
UserData userData = dataCache.get(uuid);
if (userData != null) {
if (userData.isAccessed()) {
return true;
}
if (saveTask.containsUUID(uuid)) {
return true;
}
if (processTask.containsUUID(uuid)) {
return true;
}
}
return false;
return (userData != null && userData.isAccessed()) || saveTask.containsUUID(uuid) || processTask.containsUUID(uuid);
}
/**

View File

@ -41,6 +41,10 @@ public class SessionCache {
}
}
public SessionData getSession(UUID uuid) {
return activeSessions.get(uuid);
}
/**
*
* @param data

View File

@ -8,7 +8,6 @@ import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.Settings;
import main.java.com.djrapitops.plan.data.cache.DataCacheHandler;
import static org.bukkit.Bukkit.getOfflinePlayer;
import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
import static org.bukkit.Bukkit.getOfflinePlayer;

View File

@ -26,14 +26,13 @@ public class DataCacheProcessQueue {
/**
*
* @param plugin
* @param handler
*/
public DataCacheProcessQueue(Plan plugin, DataCacheHandler handler) {
public DataCacheProcessQueue(DataCacheHandler handler) {
h = handler;
q = new ArrayBlockingQueue(20000);
s = new ProcessSetup();
s.go(q, plugin.getDB(), h);
s.go(q, h);
}
/**
@ -77,13 +76,11 @@ class ProcessConsumer implements Runnable {
private final BlockingQueue<HandlingInfo> queue;
private final DataCacheHandler handler;
private final Database db;
private boolean run;
ProcessConsumer(BlockingQueue q, Database db, DataCacheHandler h) {
ProcessConsumer(BlockingQueue q, DataCacheHandler h) {
handler = h;
queue = q;
this.db = db;
run = true;
}
@ -101,7 +98,9 @@ class ProcessConsumer implements Runnable {
DBCallableProcessor p = new DBCallableProcessor() {
@Override
public void process(UserData data) {
info.process(data);
if (!info.process(data)) {
System.out.println("Attempted to process data for wrong uuid: W:"+data.getUuid()+" | R:"+info.getUuid()+" Type:"+info.getType().name());
}
}
};
handler.getUserDataForProcessing(p, info.getUuid());
@ -118,9 +117,9 @@ class ProcessSetup {
private ProcessConsumer one;
private ProcessConsumer two;
void go(BlockingQueue<HandlingInfo> q, Database db, DataCacheHandler h) {
one = new ProcessConsumer(q, db, h);
two = new ProcessConsumer(q, db, h);
void go(BlockingQueue<HandlingInfo> q, DataCacheHandler h) {
one = new ProcessConsumer(q, h);
two = new ProcessConsumer(q, h);
new Thread(one).start();
new Thread(two).start();
}

View File

@ -105,7 +105,9 @@ class SaveConsumer implements Runnable {
void consume(UserData data) {
try {
data.access();
db.saveUserData(data.getUuid(), data);
data.stopAccessing();
} catch (SQLException ex) {
getPlugin(Plan.class).toLog(this.getClass().getName(), ex);
}

View File

@ -28,7 +28,7 @@ public class ChatInfo extends HandlingInfo {
@Override
public boolean process(UserData uData) {
if (!uData.getUuid().equals(super.uuid)) {
if (!uData.getUuid().equals(uuid)) {
return false;
}
ChatHandling.processChatInfo(uData, nickname, message);

View File

@ -20,7 +20,7 @@ public class DeathInfo extends HandlingInfo{
@Override
public boolean process(UserData uData) {
if (uData.getUuid() != uuid) {
if (!uData.getUuid().equals(uuid)) {
return false;
}
uData.setDeaths(uData.getDeaths()+1);

View File

@ -27,7 +27,7 @@ public class GamemodeInfo extends HandlingInfo{
if (currentGamemode == null) {
return false;
}
if (uData.getUuid() != uuid) {
if (!uData.getUuid().equals(uuid)) {
return false;
}
GamemodeHandling.processGamemodeInfo(uData, time, currentGamemode);

View File

@ -20,6 +20,9 @@ public class KickInfo extends HandlingInfo {
@Override
public boolean process(UserData uData) {
if (!uData.getUuid().equals(uuid)) {
return false;
}
uData.setTimesKicked(uData.getTimesKicked()+1);
return true;
}

View File

@ -37,7 +37,7 @@ public class LoginInfo extends HandlingInfo{
@Override
public boolean process(UserData uData) {
if (uData.getUuid() != uuid) {
if (!uData.getUuid().equals(uuid)) {
return false;
}
LoginHandling.processLoginInfo(uData, getTime(), ip, banned, nickname, loginTimes);

View File

@ -6,6 +6,7 @@
package main.java.com.djrapitops.plan.data.handling.info;
import java.util.UUID;
import main.java.com.djrapitops.plan.data.SessionData;
import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.data.handling.LogoutHandling;
import org.bukkit.GameMode;
@ -17,19 +18,22 @@ import org.bukkit.GameMode;
public class LogoutInfo extends HandlingInfo {
private boolean banned;
private SessionData sData;
private GamemodeInfo gmInfo;
public LogoutInfo(UUID uuid, long time, boolean banned, GameMode gm) {
public LogoutInfo(UUID uuid, long time, boolean banned, GameMode gm, SessionData sData) {
super(uuid, InfoType.LOGOUT, time);
this.banned = banned;
this.sData = sData;
this.gmInfo = new GamemodeInfo(uuid, time, gm);
}
@Override
public boolean process(UserData uData) {
if (uData.getUuid() != uuid) {
if (!uData.getUuid().equals(uuid)) {
return false;
}
uData.addSession(sData);
LogoutHandling.processLogoutInfo(uData, time, banned);
gmInfo.process(uData);
return true;

View File

@ -1,5 +1,6 @@
package main.java.com.djrapitops.plan.data.listeners;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.data.cache.DataCacheHandler;
import org.bukkit.event.EventHandler;
@ -36,7 +37,7 @@ public class PlanCommandPreprocessListener implements Listener {
if (event.isCancelled()) {
return;
}
if (event.getPlayer().hasPermission("plan.ignore.commanduse")) {
if (Permissions.IGNORE_COMMANDUSE.userHasThisPermission(event.getPlayer())) {
return;
}
handler.handleCommand(event.getMessage().split(" ")[0]);

View File

@ -84,7 +84,7 @@ public class PlanPlayerListener implements Listener {
Player player = event.getPlayer();
UUID uuid = player.getUniqueId();
handler.endSession(uuid);
handler.addToPool(new LogoutInfo(uuid, new Date().getTime(), player.isBanned(), player.getGameMode()));
handler.addToPool(new LogoutInfo(uuid, new Date().getTime(), player.isBanned(), player.getGameMode(), handler.getSession(uuid)));
handler.saveCachedData(uuid);
}
@ -102,7 +102,8 @@ public class PlanPlayerListener implements Listener {
}
Player player = event.getPlayer();
UUID uuid = player.getUniqueId();
handler.addToPool(new LogoutInfo(uuid, new Date().getTime(), player.isBanned(), player.getGameMode()));
handler.endSession(uuid);
handler.addToPool(new LogoutInfo(uuid, new Date().getTime(), player.isBanned(), player.getGameMode(), handler.getSession(uuid)));
handler.addToPool(new KickInfo(uuid));
handler.saveCachedData(uuid);
}

View File

@ -19,7 +19,6 @@ import org.bukkit.GameMode;
import org.bukkit.OfflinePlayer;
import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
import static org.bukkit.Bukkit.getOfflinePlayer;
import static org.bukkit.Bukkit.getOfflinePlayer;
/**
*

View File

@ -8,6 +8,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import org.bukkit.Bukkit;
@ -63,6 +64,10 @@ public class MiscUtils {
}
}
public static String getPlayerName(String[] args, CommandSender sender) {
return getPlayerName(args, sender, Permissions.INSPECT_OTHER);
}
/**
* Used by the inspect command.
*
@ -70,13 +75,13 @@ public class MiscUtils {
* @param sender Command sender
* @return The name of the player (first argument or sender)
*/
public static String getPlayerName(String[] args, CommandSender sender) {
public static String getPlayerName(String[] args, CommandSender sender, Permissions perm) {
String playerName = "";
boolean isConsole = !(sender instanceof Player);
if (isConsole) {
playerName = args[0];
} else if (args.length > 0) {
if (sender.hasPermission("plan.inspect.other")) {
if (perm.userHasThisPermission(sender)) {
playerName = args[0];
} else if (args[0].toLowerCase().equals(sender.getName().toLowerCase())) {
playerName = sender.getName();

View File

@ -44,7 +44,11 @@ public class DataCacheHandlerTest {
private boolean calledSaveUserData;
private boolean calledSaveMultiple;
public DataCacheHandlerTest() {
public DataCacheHandlerTest() {
}
@Before
public void setUp() {
TestInit t = new TestInit();
assertTrue("Not set up", t.setUp());
plan = t.getPlanMock();
@ -88,10 +92,6 @@ public class DataCacheHandlerTest {
};
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}

View File

@ -0,0 +1,83 @@
/*
* 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.queue;
import java.io.File;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.data.cache.DataCacheHandler;
import org.bukkit.plugin.java.JavaPlugin;
import org.easymock.EasyMock;
import org.junit.After;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
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.TestInit;
/**
*
* @author Risto
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest({JavaPlugin.class})
public class DataCacheClearQueueTest {
private Plan plan;
private DataCacheHandler handler;
public DataCacheClearQueueTest() {
}
@Before
public void setUp() {
TestInit t = new TestInit();
assertTrue("Not set up", t.setUp());
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);
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);
File f = new File(plan.getDataFolder(), "Errors.txt");
handler = new DataCacheHandler(plan) {
@Override
public boolean getCommandUseFromDb() {
return true;
}
@Override
public void startQueues() {
}
@Override
public void startAsyncPeriodicSaveTask() throws IllegalArgumentException, IllegalStateException {
}
};
}
@After
public void tearDown() {
}
@Test
public void testScheduleForClear_UUID() {
}
@Test
public void testScheduleForClear_Collection() {
}
@Test
public void testStop() {
}
}

View File

@ -0,0 +1,132 @@
/*
* 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.queue;
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.UUID;
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.UserData;
import main.java.com.djrapitops.plan.data.cache.DBCallableProcessor;
import main.java.com.djrapitops.plan.data.cache.queue.DataCacheGetQueue;
import main.java.com.djrapitops.plan.database.Database;
import main.java.com.djrapitops.plan.database.databases.SQLiteDB;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.plugin.java.JavaPlugin;
import org.easymock.EasyMock;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
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, Bukkit.class})
public class DataCacheGetQueueTest {
private Plan plan;
private Database db;
private int rows;
public DataCacheGetQueueTest() {
}
@Before
public void setUp() throws IOException, Exception {
TestInit t = new TestInit();
assertTrue("Not set up", t.setUp());
plan = t.getPlanMock();
db = new SQLiteDB(plan, "debug" + new Date().getTime()) {
@Override
public void startConnectionPingTask(Plan plugin) {
}
@Override
public void giveUserDataToProcessors(UUID uuid, DBCallableProcessor... processors) {
if (uuid.equals(MockUtils.getPlayerUUID())) {
OfflinePlayer op = MockUtils.mockPlayer();
UserData d = new UserData(op, new DemographicsData());
for (DBCallableProcessor processor : processors) {
processor.process(d);
}
} else if (uuid.equals(MockUtils.getPlayer2UUID())) {
OfflinePlayer op = MockUtils.mockPlayer2();
UserData d = new UserData(op, new DemographicsData());
for (DBCallableProcessor processor : processors) {
processor.process(d);
}
}
}
};
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);
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);
File f = new File(plan.getDataFolder(), "Errors.txt");
rows = 0;
if (f.exists()) {
rows = Files.lines(f.toPath(), Charset.defaultCharset()).collect(Collectors.toList()).size();
}
}
@After
public void tearDown() throws IOException, SQLException {
db.close();
File f = new File(plan.getDataFolder(), "Errors.txt");
int rowsAgain = 0;
if (f.exists()) {
rowsAgain = Files.lines(f.toPath(), Charset.defaultCharset()).collect(Collectors.toList()).size();
}
assertTrue("Errors were caught.", rows == rowsAgain);
}
@Test
public void testScheduleForGet() {
OfflinePlayer op = MockUtils.mockPlayer2();
UserData exp = new UserData(op, new DemographicsData());
DataCacheGetQueue instance = new DataCacheGetQueue(plan);
instance.scheduleForGet(exp.getUuid(), new DBCallableProcessor() {
@Override
public void process(UserData data) {
assertTrue(data.equals(exp));
}
});
}
@Test
public void testStop() {
DataCacheGetQueue instance = new DataCacheGetQueue(plan);
instance.stop();
instance.scheduleForGet(MockUtils.getPlayerUUID(), new DBCallableProcessor() {
@Override
public void process(UserData data) {
fail("Called get process after stop.");
}
});
}
}

View File

@ -0,0 +1,144 @@
/*
* 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.queue;
import java.util.ArrayList;
import java.util.List;
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.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.cache.queue.DataCacheProcessQueue;
import main.java.com.djrapitops.plan.data.handling.info.HandlingInfo;
import main.java.com.djrapitops.plan.data.handling.info.InfoType;
import org.bukkit.OfflinePlayer;
import org.bukkit.plugin.java.JavaPlugin;
import org.easymock.EasyMock;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
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 DataCacheProcessQueueTest {
private DataCacheHandler handler;
public DataCacheProcessQueueTest() {
}
@Before
public void setUp() {
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);
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);
handler = new DataCacheHandler(plan) {
@Override
public boolean getCommandUseFromDb() {
return true;
}
@Override
public void startQueues() {
}
@Override
public void startAsyncPeriodicSaveTask() throws IllegalArgumentException, IllegalStateException {
}
@Override
public void getUserDataForProcessing(DBCallableProcessor p, UUID uuid) {
if (uuid.equals(MockUtils.getPlayerUUID())) {
OfflinePlayer op = MockUtils.mockPlayer();
UserData d = new UserData(op, new DemographicsData());
p.process(d);
} else if (uuid.equals(MockUtils.getPlayer2UUID())) {
OfflinePlayer op = MockUtils.mockPlayer2();
UserData d = new UserData(op, new DemographicsData());
p.process(d);
}
}
};
}
@After
public void tearDown() {
}
@Test
public void testAddToPool_HandlingInfo() throws InterruptedException {
DataCacheProcessQueue q = new DataCacheProcessQueue(handler);
UUID uuid = MockUtils.getPlayerUUID();
q.addToPool(new HandlingInfo(uuid, InfoType.CHAT, 0) {
@Override
public boolean process(UserData uData) {
assertEquals(uuid, uData.getUuid());
return true;
}
});
Thread.sleep(1000);
assertTrue(q.stop().isEmpty());
}
@Test
public void testAddToPool_Collection() throws InterruptedException {
DataCacheProcessQueue q = new DataCacheProcessQueue(handler);
UUID uuid = MockUtils.getPlayerUUID();
HandlingInfo h = new HandlingInfo(uuid, InfoType.CHAT, 0) {
@Override
public boolean process(UserData uData) {
assertEquals(uuid, uData.getUuid());
return true;
}
};
List<HandlingInfo> l = new ArrayList<>();
l.add(h);
l.add(h);
l.add(h);
q.addToPool(l);
Thread.sleep(1000);
assertTrue(q.stop().isEmpty());
}
@Test
public void testContainsUUID() throws InterruptedException {
DataCacheProcessQueue q = new DataCacheProcessQueue(handler);
UUID uuid = MockUtils.getPlayerUUID();
HandlingInfo h = new HandlingInfo(uuid, InfoType.CHAT, 0) {
@Override
public boolean process(UserData uData) {
assertEquals(uuid, uData.getUuid());
return true;
}
};
q.stop();
Thread.sleep(2000);
q.addToPool(h);
assertTrue(q.containsUUID(uuid));
}
}

View File

@ -0,0 +1,135 @@
/*
* 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.queue;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
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.UserData;
import main.java.com.djrapitops.plan.data.cache.queue.DataCacheSaveQueue;
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.easymock.EasyMock;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
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 DataCacheSaveQueueTest {
private Plan plan;
private Database db;
private boolean calledSaveUserData;
private boolean calledSaveUserData2;
public DataCacheSaveQueueTest() {
}
@Before
public void setUp() {
TestInit t = new TestInit();
assertTrue("Not set up", t.setUp());
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);
EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan);
PowerMock.replay(JavaPlugin.class);
calledSaveUserData = false;
calledSaveUserData2 = false;
db = new SQLiteDB(plan, "debug" + new Date().getTime()) {
@Override
public void startConnectionPingTask(Plan plugin) {
}
@Override
public void saveUserData(UUID uuid, UserData data) throws SQLException {
if (calledSaveUserData) {
calledSaveUserData2 = true;
}
calledSaveUserData = true;
}
};
when(plan.getDB()).thenReturn(db);
}
@After
public void tearDown() {
}
@Test
public void testScheduleForSave_UserData() throws InterruptedException {
DataCacheSaveQueue q = new DataCacheSaveQueue(plan);
UserData data = new UserData(MockUtils.mockPlayer(), new DemographicsData());
q.scheduleForSave(data);
Thread.sleep(500);
assertTrue(calledSaveUserData);
}
@Test
public void testScheduleForSave_Collection() throws InterruptedException {
DataCacheSaveQueue q = new DataCacheSaveQueue(plan);
UserData data = new UserData(MockUtils.mockPlayer(), new DemographicsData());
UserData data2 = new UserData(MockUtils.mockPlayer2(), new DemographicsData());
List<UserData> l = new ArrayList<>();
l.add(data);
l.add(data2);
q.scheduleForSave(l);
Thread.sleep(1000);
assertTrue(calledSaveUserData);
assertTrue(calledSaveUserData2);
}
@Test
public void testScheduleNewPlayer() throws InterruptedException {
DataCacheSaveQueue q = new DataCacheSaveQueue(plan);
UserData data = new UserData(MockUtils.mockPlayer(), new DemographicsData());
q.scheduleNewPlayer(data);
Thread.sleep(500);
assertTrue(calledSaveUserData);
}
@Test
public void testContainsUUID() {
DataCacheSaveQueue q = new DataCacheSaveQueue(plan);
UserData data = new UserData(MockUtils.mockPlayer(), new DemographicsData());
q.stop();
q.scheduleNewPlayer(data);
assertTrue(q.containsUUID(data.getUuid()));
}
@Test
public void testStop() throws InterruptedException {
DataCacheSaveQueue q = new DataCacheSaveQueue(plan);
UserData data = new UserData(MockUtils.mockPlayer(), new DemographicsData());
q.stop();
Thread.sleep(2000);
q.scheduleNewPlayer(data);
assertTrue(!calledSaveUserData);
}
}

View File

@ -7,8 +7,8 @@ package test.java.main.java.com.djrapitops.plan.data.handling.info;
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.handling.LogoutHandling;
import main.java.com.djrapitops.plan.data.handling.info.LogoutInfo;
import org.bukkit.GameMode;
import org.bukkit.plugin.java.JavaPlugin;
@ -56,12 +56,13 @@ public class LogoutInfoTest {
long time = 20L;
Exception ex = null;
data.setLastGamemode(GameMode.SURVIVAL);
LogoutInfo i = new LogoutInfo(data.getUuid(), time, true, GameMode.CREATIVE);
LogoutInfo i = new LogoutInfo(data.getUuid(), time, true, GameMode.CREATIVE, new SessionData(0, 1));
assertTrue(i.process(data));
assertTrue("Last Played wrong", data.getLastPlayed() == 20L);
assertTrue("Playtime wrong", data.getPlayTime() == 10L);
assertTrue("Banned wrong", data.isBanned());
assertTrue("Didn't process gamemode", data.getLastGamemode() == GameMode.CREATIVE);
assertEquals(1, data.getSessions().size());
}
@Test
@ -71,7 +72,7 @@ public class LogoutInfoTest {
data.updateBanned(false);
long time = 20L;
Exception ex = null;
LogoutInfo i = new LogoutInfo(null, time, true, GameMode.CREATIVE);
LogoutInfo i = new LogoutInfo(null, time, true, GameMode.CREATIVE, new SessionData(0, 1));
try {
assertTrue(!i.process(data));
} catch (NullPointerException e) {
@ -82,6 +83,7 @@ public class LogoutInfoTest {
assertTrue("Playtime wrong", data.getPlayTime() == 0L);
assertTrue("Banned wrong", !data.isBanned());
assertTrue("Didn't process gamemode", data.getLastGamemode() == GameMode.SURVIVAL);
assertEquals(0, data.getSessions().size());
}
}

View File

@ -13,7 +13,9 @@ import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
import main.java.com.djrapitops.plan.Plan;
@ -23,6 +25,7 @@ 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 main.java.com.djrapitops.plan.utilities.ManageUtils;
import org.bukkit.plugin.java.JavaPlugin;
import org.junit.After;
import org.junit.Before;
@ -51,6 +54,7 @@ public class DatabaseTest {
private Plan plan;
private Database db;
private Database backup;
private int rows;
public DatabaseTest() {
@ -71,6 +75,7 @@ public class DatabaseTest {
EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan);
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);
// PowerMock.verify(JavaPlugin.class);
File f = new File(plan.getDataFolder(), "Errors.txt");
@ -85,8 +90,14 @@ public class DatabaseTest {
PowerMock.mockStatic(Bukkit.class);
OfflinePlayer op = MockUtils.mockPlayer();
EasyMock.expect(Bukkit.getOfflinePlayer(UUID.fromString("45b0dfdb-f71d-4cf3-8c21-27c9d4c651db"))).andReturn(op);
EasyMock.expect(Bukkit.getOfflinePlayer(UUID.fromString("45b0dfdb-f71d-4cf3-8c21-27c9d4c651db"))).andReturn(op);
EasyMock.expect(Bukkit.getOfflinePlayer(UUID.fromString("45b0dfdb-f71d-4cf3-8c21-27c9d4c651db"))).andReturn(op);
EasyMock.expect(Bukkit.getOfflinePlayer(UUID.fromString("45b0dfdb-f71d-4cf3-8c21-27c9d4c651db"))).andReturn(op);
op = MockUtils.mockPlayer2();
EasyMock.expect(Bukkit.getOfflinePlayer(UUID.fromString("ec94a954-1fa1-445b-b09b-9b698519af80"))).andReturn(op);
EasyMock.expect(Bukkit.getOfflinePlayer(UUID.fromString("ec94a954-1fa1-445b-b09b-9b698519af80"))).andReturn(op);
EasyMock.expect(Bukkit.getOfflinePlayer(UUID.fromString("ec94a954-1fa1-445b-b09b-9b698519af80"))).andReturn(op);
EasyMock.expect(Bukkit.getOfflinePlayer(UUID.fromString("ec94a954-1fa1-445b-b09b-9b698519af80"))).andReturn(op);
PowerMock.replay(Bukkit.class);
// BukkitScheduler mockScheduler = Mockito.mock(BukkitScheduler.class);
// EasyMock.expect(Bukkit.getScheduler()).andReturn(mockScheduler);
@ -95,6 +106,9 @@ public class DatabaseTest {
@After
public void tearDown() throws IOException, SQLException {
db.close();
if (backup != null) {
backup.close();
}
File f = new File(plan.getDataFolder(), "Errors.txt");
int rowsAgain = 0;
if (f.exists()) {
@ -112,6 +126,7 @@ public class DatabaseTest {
public void testSqLiteGetConfigName() {
assertEquals("sqlite", db.getConfigName());
}
@Test
public void testSqLiteGetgName() {
assertEquals("SQLite", db.getName());
@ -126,6 +141,7 @@ public class DatabaseTest {
}
}.getConfigName());
}
@Test
public void testMysqlGetName() {
assertEquals("MySQL", new MySQLDB(plan) {
@ -175,6 +191,8 @@ public class DatabaseTest {
db.init();
UserData data = new UserData(MockUtils.mockPlayer(), new DemographicsData());
db.saveUserData(data.getUuid(), data);
data.addNickname("TestUpdateForSave");
db.saveUserData(data.getUuid(), data);
DBCallableProcessor process = new DBCallableProcessor() {
@Override
public void process(UserData d) {
@ -184,11 +202,23 @@ public class DatabaseTest {
db.giveUserDataToProcessors(data.getUuid(), process);
}
@Test
public void testNicknameInjection() throws SQLException {
db.init();
UserData data = new UserData(MockUtils.mockPlayer(), new DemographicsData());
UserData data2 = new UserData(MockUtils.mockPlayer2(), new DemographicsData());
db.saveUserData(data2.getUuid(), data2);
data.addNickname("s); DROP TABLE plan_users;--");
db.saveUserData(data.getUuid(), data);
assertTrue("Removed Users table.", db.getUserId(data2.getUuid().toString()) != -1);
}
@Test
public void testSaveMultipleUserData() throws SQLException {
db.init();
UserData data = new UserData(MockUtils.mockPlayer(), new DemographicsData());
db.saveUserData(data.getUuid(), data);
data.addNickname("TestUpdateForSave");
UserData data2 = new UserData(MockUtils.mockPlayer2(), new DemographicsData());
List<UserData> list = new ArrayList<>();
list.add(data);
@ -218,4 +248,49 @@ public class DatabaseTest {
db.removeAccount(data.getUuid().toString());
assertTrue("Contains the user", !db.wasSeenBefore(data.getUuid()));
}
@Test
public void testBackup() throws SQLException {
db.init();
UserData data = new UserData(MockUtils.mockPlayer(), new DemographicsData());
UserData data2 = new UserData(MockUtils.mockPlayer2(), new DemographicsData());
List<UserData> list = new ArrayList<>();
list.add(data);
list.add(data2);
db.saveMultipleUserData(list);
backup = new SQLiteDB(plan, "debug-backup") {
@Override
public void startConnectionPingTask(Plan plugin) {
}
};
backup.init();
ManageUtils.clearAndCopy(backup, db, db.getSavedUUIDs());
Set<UUID> savedUUIDs = backup.getSavedUUIDs();
assertTrue("Didn't contain 1", savedUUIDs.contains(data.getUuid()));
assertTrue("Didn't contain 2", savedUUIDs.contains(data2.getUuid()));
}
@Test
public void testRestore() throws SQLException {
db.init();
UserData data = new UserData(MockUtils.mockPlayer(), new DemographicsData());
UserData data2 = new UserData(MockUtils.mockPlayer2(), new DemographicsData());
List<UserData> list = new ArrayList<>();
list.add(data);
list.add(data2);
db.saveMultipleUserData(list);
backup = new SQLiteDB(plan, "debug-backup") {
@Override
public void startConnectionPingTask(Plan plugin) {
}
};
backup.init();
ManageUtils.clearAndCopy(backup, db, db.getSavedUUIDs());
ManageUtils.clearAndCopy(db, backup, backup.getSavedUUIDs());
Set<UUID> savedUUIDs = db.getSavedUUIDs();
assertTrue("Didn't contain 1", savedUUIDs.contains(data.getUuid()));
assertTrue("Didn't contain 2", savedUUIDs.contains(data2.getUuid()));
}
}

View File

@ -47,7 +47,6 @@ public class HtmlUtilsTest {
@Test
public void testGetHtmlStringFromResource() throws Exception {
System.out.println("getHtmlStringFromResource");
String fileName = "player.html";
String result = HtmlUtils.getHtmlStringFromResource(fileName);
assertTrue("Result null", result != null);

View File

@ -0,0 +1,110 @@
/*
* 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.utilities;
import java.util.Date;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.data.DemographicsData;
import main.java.com.djrapitops.plan.data.UserData;
import main.java.com.djrapitops.plan.utilities.NewPlayerCreator;
import org.bukkit.GameMode;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.easymock.EasyMock;
import org.junit.After;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
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 NewPlayerCreatorTest {
public NewPlayerCreatorTest() {
}
@Before
public void setUp() {
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);
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);
}
@After
public void tearDown() {
}
@Test
public void testCreateNewPlayer_Player() {
OfflinePlayer p = MockUtils.mockPlayer2();
UserData result = NewPlayerCreator.createNewPlayer(p);
UserData exp = new UserData(p, new DemographicsData());
exp.setLastGamemode(GameMode.SURVIVAL);
exp.setLastPlayed(new Date().getTime());
long zero = Long.parseLong("0");
exp.setPlayTime(zero);
exp.setTimesKicked(0);
exp.setLoginTimes(0);
exp.setLastGmSwapTime(zero);
exp.setDeaths(0);
exp.setMobKills(0);
assertTrue(exp.equals(result));
}
@Test
public void testCreateNewPlayer_OfflinePlayer() {
Player p = MockUtils.mockPlayer2();
UserData result = NewPlayerCreator.createNewPlayer(p);
UserData exp = new UserData(p, new DemographicsData());
exp.setLastGamemode(GameMode.SPECTATOR);
exp.setLastPlayed(new Date().getTime());
long zero = Long.parseLong("0");
exp.setPlayTime(zero);
exp.setTimesKicked(0);
exp.setLoginTimes(0);
exp.setLastGmSwapTime(zero);
exp.setDeaths(0);
exp.setMobKills(0);
assertTrue(exp.equals(result));
}
@Test
public void testCreateNewPlayer_OfflinePlayer_GameMode() {
Player p = MockUtils.mockPlayer();
UserData result = NewPlayerCreator.createNewPlayer(p, GameMode.CREATIVE);
UserData exp = new UserData(p, new DemographicsData());
exp.setLastGamemode(GameMode.CREATIVE);
exp.setLastPlayed(new Date().getTime());
long zero = Long.parseLong("0");
exp.setPlayTime(zero);
exp.setTimesKicked(0);
exp.setLoginTimes(0);
exp.setLastGmSwapTime(zero);
exp.setDeaths(0);
exp.setMobKills(0);
assertTrue(exp.equals(result));
}
}