Merge remote-tracking branch 'origin/4.0.0-BungeeCord-Support' into 4.0.0-BungeeCord-Support

# Conflicts:
#	Plan/src/main/java/com/djrapitops/plan/systems/listeners/PlanPlayerListener.java
#	Plan/src/main/java/com/djrapitops/plan/systems/processing/DBCommitProcessor.java
#	Plan/src/main/java/com/djrapitops/plan/systems/tasks/PeriodicDBCommitTask.java
This commit is contained in:
Rsl1122 2017-08-24 10:25:33 +03:00
commit c7ce74a78c
31 changed files with 329 additions and 282 deletions

View File

@ -31,6 +31,22 @@
<version>2.0.4</version> <version>2.0.4</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<!-- Connection Pool-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<!-- SoftDepended Plugins--> <!-- SoftDepended Plugins-->
<dependency> <dependency>
<groupId>com.djrapitops</groupId> <groupId>com.djrapitops</groupId>

View File

@ -3,7 +3,9 @@ package main.java.com.djrapitops.plan.database;
import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.data.UserInfo; import main.java.com.djrapitops.plan.data.UserInfo;
import main.java.com.djrapitops.plan.database.tables.*; import main.java.com.djrapitops.plan.database.tables.*;
import org.apache.commons.dbcp2.BasicDataSource;
import java.sql.Connection;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.*; import java.util.*;
@ -100,6 +102,8 @@ public abstract class Database {
*/ */
protected ServerTable serverTable; protected ServerTable serverTable;
protected BasicDataSource dataSource;
/** /**
* Super constructor. * Super constructor.
* *
@ -332,8 +336,6 @@ public abstract class Database {
return serverTable; return serverTable;
} }
public abstract void commit() throws SQLException;
public ActionsTable getActionsTable() { public ActionsTable getActionsTable() {
return actionsTable; return actionsTable;
} }
@ -341,4 +343,9 @@ public abstract class Database {
public UserInfoTable getUserInfoTable() { public UserInfoTable getUserInfoTable() {
return userInfoTable; return userInfoTable;
} }
public BasicDataSource getDataSource() {
return dataSource;
}
public abstract void commit(Connection connection) throws SQLException;
} }

View File

@ -1,15 +1,9 @@
package main.java.com.djrapitops.plan.database.databases; package main.java.com.djrapitops.plan.database.databases;
import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.locale.Locale; import org.apache.commons.dbcp2.BasicDataSource;
import main.java.com.djrapitops.plan.locale.Msg;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/** /**
* @author Rsl1122 * @author Rsl1122
*/ */
@ -25,30 +19,32 @@ public class MySQLDB extends SQLDB {
} }
/** /**
* Creates a new connection to the database. * Setups the {@link BasicDataSource}
*
* @return the new Connection.
*/ */
@Override @Override
public Connection getNewConnection() { public void setupDataSource() {
FileConfiguration config = plugin.getConfig(); FileConfiguration config = plugin.getConfig();
try { dataSource = new BasicDataSource();
Class.forName("com.mysql.jdbc.Driver"); dataSource.setDriverClassName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://" + config.getString("mysql.host") + ":" + config.getString("mysql.port") + "/" String host = config.getString("Database.MySQL.Host");
+ config.getString("mysql.database") String port = config.getString("Database.MySQL.Port");
+ "?rewriteBatchedStatements=true"; String database = config.getString("Database.MySQL.Database");
return DriverManager.getConnection(url, config.getString("mysql.user"), config.getString("mysql.password"));
} catch (ClassNotFoundException | SQLException e) { dataSource.setUrl("jdbc:mysql://" + host + ":" + port + "/" + database + "?rewriteBatchedStatements=true");
Log.error(Locale.get(Msg.ENABLE_FAIL_DB).parse(getConfigName(), e.getMessage()));
return null; String username = config.getString("Database.MySQL.User");
} String password = config.getString("Database.MySQL.Password");
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setMaxTotal(-1);
} }
/** /**
* @return * @return the name of the Database
*/ */
@Override @Override
public String getName() { public String getName() {

View File

@ -1,13 +1,12 @@
package main.java.com.djrapitops.plan.database.databases; package main.java.com.djrapitops.plan.database.databases;
import com.djrapitops.plugin.task.AbsRunnable;
import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.data.UserInfo; import main.java.com.djrapitops.plan.data.UserInfo;
import main.java.com.djrapitops.plan.database.Database; import main.java.com.djrapitops.plan.database.Database;
import main.java.com.djrapitops.plan.database.tables.*; import main.java.com.djrapitops.plan.database.tables.*;
import main.java.com.djrapitops.plan.utilities.Benchmark; import main.java.com.djrapitops.plan.utilities.Benchmark;
import main.java.com.djrapitops.plan.utilities.MiscUtils; import org.apache.commons.dbcp2.BasicDataSource;
import java.sql.Connection; import java.sql.Connection;
import java.sql.SQLException; import java.sql.SQLException;
@ -27,8 +26,6 @@ public abstract class SQLDB extends Database {
private final boolean usingMySQL; private final boolean usingMySQL;
private Connection connection;
/** /**
* @param plugin * @param plugin
*/ */
@ -52,31 +49,6 @@ public abstract class SQLDB extends Database {
killsTable = new KillsTable(this, usingMySQL); killsTable = new KillsTable(this, usingMySQL);
worldTable = new WorldTable(this, usingMySQL); worldTable = new WorldTable(this, usingMySQL);
worldTimesTable = new WorldTimesTable(this, usingMySQL); worldTimesTable = new WorldTimesTable(this, usingMySQL);
startConnectionPingTask();
}
/**
* Starts repeating Async task that maintains the Database connection.
*/
public void startConnectionPingTask() {
// Maintains Connection.
plugin.getRunnableFactory().createNew(new AbsRunnable("DBConnectionPingTask " + getName()) {
@Override
public void run() {
Statement statement = null;
try {
if (connection != null && !connection.isClosed()) {
statement = connection.createStatement();
statement.execute("/* ping */ SELECT 1");
}
} catch (SQLException e) {
connection = getNewConnection();
} finally {
MiscUtils.close(statement);
}
}
}).runTaskTimerAsynchronously(60L * 20L, 60L * 20L);
} }
/** /**
@ -96,7 +68,9 @@ public abstract class SQLDB extends Database {
String benchName = "Init " + getConfigName(); String benchName = "Init " + getConfigName();
Benchmark.start(benchName); Benchmark.start(benchName);
try { try {
if (!checkConnection()) { setupDataSource();
if (!setupDatabase()) {
return false; return false;
} }
clean(); clean();
@ -118,14 +92,7 @@ public abstract class SQLDB extends Database {
* @return Is the connection usable? * @return Is the connection usable?
* @throws SQLException * @throws SQLException
*/ */
public boolean checkConnection() throws SQLException { public boolean setupDatabase() throws SQLException {
if (connection == null || connection.isClosed()) {
connection = getNewConnection();
if (connection == null || connection.isClosed()) {
return false;
}
boolean newDatabase = isNewDatabase(); boolean newDatabase = isNewDatabase();
if (!versionTable.createTable()) { if (!versionTable.createTable()) {
@ -135,20 +102,19 @@ public abstract class SQLDB extends Database {
if (newDatabase) { if (newDatabase) {
Log.info("New Database created."); Log.info("New Database created.");
setVersion(8);
} }
if (!createTables()) { if (!createTables()) {
return false; return false;
} }
if (!newDatabase && getVersion() < 8) { if (newDatabase || getVersion() < 8) {
setVersion(8); setVersion(8);
} }
try (Statement statement = connection.createStatement()) { try (Statement statement = getConnection().createStatement()) {
statement.execute("DROP TABLE IF EXISTS plan_locations"); statement.execute("DROP TABLE IF EXISTS plan_locations");
} endTransaction(statement.getConnection());
} }
return true; return true;
} }
@ -209,18 +175,16 @@ public abstract class SQLDB extends Database {
} }
/** /**
* @return * Setups the {@link BasicDataSource}
*/ */
public abstract Connection getNewConnection(); public abstract void setupDataSource();
/** /**
* @throws SQLException * @throws SQLException
*/ */
@Override @Override
public void close() throws SQLException { public void close() throws SQLException {
if (connection != null) { dataSource.close();
connection.close();
}
setStatus("Closed"); setStatus("Closed");
Log.logDebug("Database"); // Log remaining Debug info if present Log.logDebug("Database"); // Log remaining Debug info if present
} }
@ -240,7 +204,6 @@ public abstract class SQLDB extends Database {
@Override @Override
public void setVersion(int version) throws SQLException { public void setVersion(int version) throws SQLException {
versionTable.setVersion(version); versionTable.setVersion(version);
commit();
} }
/** /**
@ -266,29 +229,31 @@ public abstract class SQLDB extends Database {
if (uuid == null) { if (uuid == null) {
return false; return false;
} }
try { try {
Benchmark.start("Remove Account"); Benchmark.start("Remove Account");
Log.debug("Database", "Removing Account: " + uuid); Log.debug("Database", "Removing Account: " + uuid);
checkConnection(); try {
setupDatabase();
boolean success = true; } catch (Exception e) {
for (Table t : getAllTablesInRemoveOrder()) { Log.toLog(this.getClass().getName(), e);
if (!success) { return false;
continue; }
}
if (t instanceof UserIDTable) { for (Table t : getAllTablesInRemoveOrder()) {
UserIDTable table = (UserIDTable) t; if (!(t instanceof UserIDTable)) {
success = table.removeUser(uuid); continue;
} }
}
if (success) { UserIDTable table = (UserIDTable) t;
commit(); if (!table.removeUser(uuid)) {
return true; throw new IllegalStateException("Removal Failed");
} }
throw new IllegalStateException("Removal Failed"); }
return true;
} catch (Exception e) { } catch (Exception e) {
Log.toLog(this.getClass().getName(), e); Log.toLog(this.getClass().getName(), e);
rollback(); // TODO Test case
return false; return false;
} finally { } finally {
Benchmark.stop("Database", "Remove Account"); Benchmark.stop("Database", "Remove Account");
@ -303,7 +268,7 @@ public abstract class SQLDB extends Database {
public void clean() { public void clean() {
Log.info("Cleaning the database."); Log.info("Cleaning the database.");
try { try {
checkConnection(); setupDatabase();
tpsTable.clean(); tpsTable.clean();
Log.info("Clean complete."); Log.info("Clean complete.");
} catch (SQLException e) { } catch (SQLException e) {
@ -316,26 +281,20 @@ public abstract class SQLDB extends Database {
*/ */
@Override @Override
public boolean removeAllData() { public boolean removeAllData() {
boolean success = true;
setStatus("Clearing all data"); setStatus("Clearing all data");
try { try {
for (Table table : getAllTablesInRemoveOrder()) { for (Table table : getAllTablesInRemoveOrder()) {
if (!table.removeAllData()) { if (!table.removeAllData()) {
success = false; return false;
break;
} }
} }
if (success) {
commit(); return true;
} else { } finally {
rollback(); // TODO Tests for this case
}
} catch (SQLException e) {
Log.toLog(this.getClass().getName(), e);
}
setAvailable(); setAvailable();
return success;
} }
}
@Override @Override
public List<UserInfo> getUserDataForUUIDS(Collection<UUID> uuidsCol) throws SQLException { public List<UserInfo> getUserDataForUUIDS(Collection<UUID> uuidsCol) throws SQLException {
@ -346,13 +305,6 @@ public abstract class SQLDB extends Database {
return new ArrayList<>(); return new ArrayList<>();
} }
/**
* @return
*/
public Connection getConnection() {
return connection;
}
private void setStatus(String status) { private void setStatus(String status) {
Log.debug("Database", status); Log.debug("Database", status);
} }
@ -361,14 +313,23 @@ public abstract class SQLDB extends Database {
Log.logDebug("Database"); Log.logDebug("Database");
} }
public Connection getConnection() throws SQLException {
return getDataSource().getConnection();
}
/** /**
* Commits changes to the .db file when using SQLite Database. * Commits changes to the .db file when using SQLite Database.
* <p> * <p>
* MySQL has Auto Commit enabled. * MySQL has Auto Commit enabled.
*/ */
public void commit() throws SQLException { @Override
public void commit(Connection connection) throws SQLException {
try {
if (!usingMySQL) { if (!usingMySQL) {
getConnection().commit(); connection.commit();
}
} finally {
endTransaction(connection);
} }
} }
@ -377,9 +338,17 @@ public abstract class SQLDB extends Database {
* <p> * <p>
* MySQL has Auto Commit enabled. * MySQL has Auto Commit enabled.
*/ */
public void rollback() throws SQLException { public void rollback(Connection connection) throws SQLException {
try {
if (!usingMySQL) { if (!usingMySQL) {
connection.rollback(); connection.rollback();
} }
} finally {
endTransaction(connection);
}
}
public void endTransaction(Connection connection) throws SQLException {
connection.close();
} }
} }

View File

@ -1,11 +1,10 @@
package main.java.com.djrapitops.plan.database.databases; package main.java.com.djrapitops.plan.database.databases;
import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.Plan;
import org.apache.commons.dbcp2.BasicDataSource;
import java.io.File; import java.io.File;
import java.sql.Connection; import java.util.Collections;
import java.sql.DriverManager;
import java.sql.SQLException;
/** /**
* @author Rsl1122 * @author Rsl1122
@ -33,36 +32,28 @@ public class SQLiteDB extends SQLDB {
} }
/** /**
* Creates a new connection to the database. * Setups the {@link BasicDataSource}
*
* @return the new Connection.
*/ */
@Override @Override
public Connection getNewConnection() { public void setupDataSource() {
return getNewConnection(dbName); dataSource = new BasicDataSource();
String filePath = new File(plugin.getDataFolder(), dbName + ".db").getAbsolutePath();
dataSource.setUrl("jdbc:sqlite:" + filePath);
dataSource.setEnableAutoCommitOnReturn(false);
dataSource.setDefaultAutoCommit(false);
dataSource.setConnectionInitSqls(Collections.singletonList("PRAGMA JOURNAL_MODE=WAL"));
dataSource.setMaxTotal(-1);
} }
/** /**
* @param dbName * @return the name of the Database
* @return
*/
public Connection getNewConnection(String dbName) {
try {
Class.forName("org.sqlite.JDBC");
Connection connection = DriverManager.getConnection("jdbc:sqlite:" + new File(plugin.getDataFolder(), dbName + ".db").getAbsolutePath());
connection.setAutoCommit(false);
return connection;
} catch (ClassNotFoundException | SQLException e) {
return null;
}
}
/**
* @return
*/ */
@Override @Override
public String getName() { public String getName() {
return "SQLite"; return "SQLite";
} }
} }

View File

@ -81,6 +81,7 @@ public class ActionsTable extends UserIDTable {
statement.setString(5, action.getAdditionalInfo()); statement.setString(5, action.getAdditionalInfo());
statement.execute(); statement.execute();
} finally { } finally {
endTransaction(statement);
close(statement); close(statement);
} }
} }
@ -111,6 +112,7 @@ public class ActionsTable extends UserIDTable {
} }
return actions; return actions;
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }

View File

@ -94,8 +94,8 @@ public class CommandUseTable extends Table {
} }
return commandUse; return commandUse;
} finally { } finally {
close(set); endTransaction(statement);
close(statement); close(set, statement);
Benchmark.stop("Database", "Get CommandUse"); Benchmark.stop("Database", "Get CommandUse");
} }
} }
@ -129,7 +129,6 @@ public class CommandUseTable extends Table {
} }
updateCommands(updateData); updateCommands(updateData);
commit();
Benchmark.stop("Database", "Save Commanduse"); Benchmark.stop("Database", "Save Commanduse");
db.setAvailable(); db.setAvailable();
} }
@ -142,7 +141,7 @@ public class CommandUseTable extends Table {
"WHERE (" + columnCommand + "=?) AND (" + "WHERE (" + columnCommand + "=?) AND (" +
columnServerID + "=" + serverTable.statementSelectServerID + ")"; columnServerID + "=" + serverTable.statementSelectServerID + ")";
statement = prepareStatement(updateStatement); statement = prepareStatement(updateStatement);
boolean commitRequired = false;
for (Map.Entry<String, Integer> entrySet : data.entrySet()) { for (Map.Entry<String, Integer> entrySet : data.entrySet()) {
String key = entrySet.getKey(); String key = entrySet.getKey();
Integer amount = entrySet.getValue(); Integer amount = entrySet.getValue();
@ -155,13 +154,11 @@ public class CommandUseTable extends Table {
statement.setString(2, key); statement.setString(2, key);
statement.setString(3, Plan.getServerUUID().toString()); statement.setString(3, Plan.getServerUUID().toString());
statement.addBatch(); statement.addBatch();
commitRequired = true;
} }
if (commitRequired) {
statement.executeBatch(); statement.executeBatch();
}
} finally { } finally {
endTransaction(statement);
close(statement); close(statement);
} }
} }
@ -175,7 +172,6 @@ public class CommandUseTable extends Table {
+ columnServerID + columnServerID
+ ") VALUES (?, ?, " + serverTable.statementSelectServerID + ")"; + ") VALUES (?, ?, " + serverTable.statementSelectServerID + ")";
statement = prepareStatement(insertStatement); statement = prepareStatement(insertStatement);
boolean addedRows = false;
for (Map.Entry<String, Integer> entrySet : data.entrySet()) { for (Map.Entry<String, Integer> entrySet : data.entrySet()) {
String key = entrySet.getKey(); String key = entrySet.getKey();
Integer amount = entrySet.getValue(); Integer amount = entrySet.getValue();
@ -188,13 +184,11 @@ public class CommandUseTable extends Table {
statement.setInt(2, amount); statement.setInt(2, amount);
statement.setString(3, Plan.getServerUUID().toString()); statement.setString(3, Plan.getServerUUID().toString());
statement.addBatch(); statement.addBatch();
addedRows = true;
} }
if (addedRows) {
statement.executeBatch(); statement.executeBatch();
}
} finally { } finally {
endTransaction(statement);
close(statement); close(statement);
} }
} }
@ -211,7 +205,8 @@ public class CommandUseTable extends Table {
} }
return Optional.empty(); return Optional.empty();
} finally { } finally {
close(statement); endTransaction(statement);
close(set, statement);
} }
} }
@ -227,7 +222,8 @@ public class CommandUseTable extends Table {
} }
return Optional.empty(); return Optional.empty();
} finally { } finally {
close(statement); endTransaction(statement);
close(set, statement);
} }
} }
} }

View File

@ -75,6 +75,7 @@ public class IPsTable extends UserIDTable {
return stringList; return stringList;
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }
@ -84,6 +85,7 @@ public class IPsTable extends UserIDTable {
if (ips.contains(ip)) { if (ips.contains(ip)) {
return; return;
} }
insertIp(uuid, ip, geolocation); insertIp(uuid, ip, geolocation);
} }
@ -102,6 +104,7 @@ public class IPsTable extends UserIDTable {
statement.setString(3, geolocation); statement.setString(3, geolocation);
statement.execute(); statement.execute();
} finally { } finally {
endTransaction(statement);
close(statement); close(statement);
} }
} }
@ -120,6 +123,7 @@ public class IPsTable extends UserIDTable {
} }
return Optional.empty(); return Optional.empty();
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }

View File

@ -70,6 +70,11 @@ public class KillsTable extends UserIDTable {
Log.toLog(this.getClass().getName(), ex); Log.toLog(this.getClass().getName(), ex);
return false; return false;
} finally { } finally {
try {
endTransaction(statement);
} catch (SQLException e) {
Log.toLog(this.getClass().getName(), e);
}
close(statement); close(statement);
} }
} }
@ -103,6 +108,7 @@ public class KillsTable extends UserIDTable {
} }
statement.executeBatch(); statement.executeBatch();
} finally { } finally {
endTransaction(statement);
close(statement); close(statement);
} }
} }
@ -136,6 +142,7 @@ public class KillsTable extends UserIDTable {
session.getPlayerKills().add(new KillData(victim, weapon, date)); session.getPlayerKills().add(new KillData(victim, weapon, date));
} }
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }

View File

@ -76,6 +76,7 @@ public class NicknamesTable extends UserIDTable {
} }
return nicknames; return nicknames;
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }
@ -127,6 +128,7 @@ public class NicknamesTable extends UserIDTable {
} }
return nicknames; return nicknames;
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }
@ -152,6 +154,7 @@ public class NicknamesTable extends UserIDTable {
statement.setString(3, displayName); statement.setString(3, displayName);
statement.execute(); statement.execute();
} finally { } finally {
endTransaction(statement);
close(statement); close(statement);
} }
} }

View File

@ -53,6 +53,12 @@ public class SecurityTable extends Table {
Log.toLog(this.getClass().getName(), ex); Log.toLog(this.getClass().getName(), ex);
return false; return false;
} finally { } finally {
try {
endTransaction(statement);
} catch (SQLException e) {
Log.toLog(this.getClass().getName(), e);
}
close(statement); close(statement);
} }
} }
@ -72,7 +78,8 @@ public class SecurityTable extends Table {
statement.setString(2, saltPassHash); statement.setString(2, saltPassHash);
statement.setInt(3, permLevel); statement.setInt(3, permLevel);
statement.execute(); statement.execute();
commit();
commit(statement.getConnection());
} finally { } finally {
close(statement); close(statement);
} }
@ -96,8 +103,8 @@ public class SecurityTable extends Table {
} }
return null; return null;
} finally { } finally {
close(set); endTransaction(statement);
close(statement); close(set, statement);
} }
} }
@ -117,8 +124,8 @@ public class SecurityTable extends Table {
} }
return list; return list;
} finally { } finally {
close(set); endTransaction(statement);
close(statement); close(set, statement);
} }
} }
} }

View File

@ -86,6 +86,7 @@ public class ServerTable extends Table {
statement.setInt(5, info.getId()); statement.setInt(5, info.getId());
statement.executeUpdate(); statement.executeUpdate();
} finally { } finally {
endTransaction(statement);
close(statement); close(statement);
} }
} }
@ -116,6 +117,7 @@ public class ServerTable extends Table {
statement.setBoolean(4, true); statement.setBoolean(4, true);
statement.execute(); statement.execute();
} finally { } finally {
endTransaction(statement);
close(statement); close(statement);
} }
} }
@ -143,6 +145,7 @@ public class ServerTable extends Table {
return Optional.empty(); return Optional.empty();
} }
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }
@ -170,6 +173,7 @@ public class ServerTable extends Table {
return Optional.empty(); return Optional.empty();
} }
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }
@ -189,6 +193,7 @@ public class ServerTable extends Table {
} }
return names; return names;
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }
@ -218,6 +223,7 @@ public class ServerTable extends Table {
return Optional.empty(); return Optional.empty();
} }
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }
@ -241,6 +247,7 @@ public class ServerTable extends Table {
} }
return servers; return servers;
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }

View File

@ -111,6 +111,7 @@ public class SessionsTable extends UserIDTable {
statement.setString(6, Plan.getServerUUID().toString()); statement.setString(6, Plan.getServerUUID().toString());
statement.execute(); statement.execute();
} finally { } finally {
endTransaction(statement);
close(statement); close(statement);
} }
} }
@ -139,6 +140,7 @@ public class SessionsTable extends UserIDTable {
} }
return -1L; return -1L;
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }
@ -182,6 +184,7 @@ public class SessionsTable extends UserIDTable {
} }
return sessionsByServer; return sessionsByServer;
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }
@ -258,6 +261,7 @@ public class SessionsTable extends UserIDTable {
} }
return 0; return 0;
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }
@ -303,6 +307,7 @@ public class SessionsTable extends UserIDTable {
} }
return playtimes; return playtimes;
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }
@ -343,6 +348,7 @@ public class SessionsTable extends UserIDTable {
} }
return 0; return 0;
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }
@ -410,6 +416,7 @@ public class SessionsTable extends UserIDTable {
} }
return 0; return 0;
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }

View File

@ -87,8 +87,8 @@ public class TPSTable extends Table {
} }
return data; return data;
} finally { } finally {
close(set); endTransaction(statement);
close(statement); close(set, statement);
Benchmark.stop("Database", "Get TPS"); Benchmark.stop("Database", "Get TPS");
} }
} }
@ -135,6 +135,7 @@ public class TPSTable extends Table {
statement.setLong(1, MiscUtils.getTime() - fiveWeeks); statement.setLong(1, MiscUtils.getTime() - fiveWeeks);
statement.execute(); statement.execute();
} finally { } finally {
endTransaction(statement);
close(statement); close(statement);
} }
} }

View File

@ -65,11 +65,7 @@ public abstract class Table {
* @return @throws SQLException * @return @throws SQLException
*/ */
protected Connection getConnection() throws SQLException { protected Connection getConnection() throws SQLException {
Connection connection = db.getConnection(); return db.getConnection();
if (connection == null || connection.isClosed()) {
connection = db.getNewConnection();
}
return connection;
} }
/** /**
@ -89,11 +85,11 @@ public abstract class Table {
Statement statement = null; Statement statement = null;
try { try {
statement = connection.createStatement(); statement = connection.createStatement();
return statement.execute(statementString); boolean b = statement.execute(statementString);
commit(statement.getConnection());
return b;
} finally { } finally {
if (statement != null) { close(statement);
statement.close();
}
} }
} }
@ -192,7 +188,19 @@ public abstract class Table {
* *
* @throws SQLException If commit fails or there is nothing to commit. * @throws SQLException If commit fails or there is nothing to commit.
*/ */
protected void commit() throws SQLException { protected void commit(Connection connection) throws SQLException {
db.commit(); db.commit(connection);
}
protected void endTransaction(Connection connection) throws SQLException {
db.endTransaction(connection);
}
protected void endTransaction(Statement statement) throws SQLException {
if (statement == null) {
return;
}
endTransaction(statement.getConnection());
} }
} }

View File

@ -35,6 +35,11 @@ public abstract class UserIDTable extends Table {
Log.toLog(this.getClass().getName(), ex); Log.toLog(this.getClass().getName(), ex);
return false; return false;
} finally { } finally {
try {
endTransaction(statement);
} catch (SQLException e) {
Log.toLog(this.getClass().getName(), e);
}
close(statement); close(statement);
} }
} }

View File

@ -1,6 +1,7 @@
package main.java.com.djrapitops.plan.database.tables; package main.java.com.djrapitops.plan.database.tables;
import com.djrapitops.plugin.utilities.Verify; import com.djrapitops.plugin.utilities.Verify;
import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.database.databases.SQLDB; import main.java.com.djrapitops.plan.database.databases.SQLDB;
import main.java.com.djrapitops.plan.database.sql.*; import main.java.com.djrapitops.plan.database.sql.*;
@ -63,6 +64,7 @@ public class UsersTable extends UserIDTable {
} }
return uuids; return uuids;
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }
@ -82,6 +84,11 @@ public class UsersTable extends UserIDTable {
} catch (SQLException ex) { } catch (SQLException ex) {
return false; return false;
} finally { } finally {
try {
endTransaction(statement);
} catch (SQLException e) {
Log.toLog(this.getClass().getName(), e);
}
close(statement); close(statement);
} }
} }
@ -117,6 +124,7 @@ public class UsersTable extends UserIDTable {
} }
return null; return null;
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }
@ -133,6 +141,7 @@ public class UsersTable extends UserIDTable {
} }
return registerDates; return registerDates;
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }
@ -160,6 +169,7 @@ public class UsersTable extends UserIDTable {
statement.setString(3, name); statement.setString(3, name);
statement.execute(); statement.execute();
} finally { } finally {
endTransaction(statement);
close(statement); close(statement);
} }
} }
@ -175,6 +185,7 @@ public class UsersTable extends UserIDTable {
set = statement.executeQuery(); set = statement.executeQuery();
return set.next(); return set.next();
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }
@ -189,6 +200,7 @@ public class UsersTable extends UserIDTable {
statement.setString(2, uuid.toString()); statement.setString(2, uuid.toString());
statement.execute(); statement.execute();
} finally { } finally {
endTransaction(statement);
close(statement); close(statement);
} }
} }
@ -207,6 +219,7 @@ public class UsersTable extends UserIDTable {
} }
return 0; return 0;
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }
@ -220,6 +233,7 @@ public class UsersTable extends UserIDTable {
statement.setString(1, uuid.toString()); statement.setString(1, uuid.toString());
statement.execute(); statement.execute();
} finally { } finally {
endTransaction(statement);
close(statement); close(statement);
} }
} }

View File

@ -50,8 +50,8 @@ public class VersionTable extends Table {
Log.debug("Database", "DB Schema version: " + version); Log.debug("Database", "DB Schema version: " + version);
return version; return version;
} finally { } finally {
close(set); endTransaction(statement);
close(statement); close(set, statement);
} }
} }
@ -65,9 +65,9 @@ public class VersionTable extends Table {
try { try {
statement = prepareStatement("INSERT INTO " + tableName + " (version) VALUES (" + version + ")"); statement = prepareStatement("INSERT INTO " + tableName + " (version) VALUES (" + version + ")");
statement.executeUpdate(); statement.executeUpdate();
commit(statement.getConnection());
} finally { } finally {
close(statement); close(statement);
} }
} }
} }

View File

@ -68,6 +68,7 @@ public class WorldTable extends Table {
} }
return worldNames; return worldNames;
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }
@ -94,16 +95,14 @@ public class WorldTable extends Table {
statement = prepareStatement("INSERT INTO " + tableName + " (" statement = prepareStatement("INSERT INTO " + tableName + " ("
+ columnWorldName + columnWorldName
+ ") VALUES (?)"); + ") VALUES (?)");
boolean commitRequired = false;
for (String world : worlds) { for (String world : worlds) {
statement.setString(1, world); statement.setString(1, world);
statement.addBatch(); statement.addBatch();
commitRequired = true;
} }
if (commitRequired) {
statement.executeBatch(); statement.executeBatch();
}
} finally { } finally {
endTransaction(statement);
close(statement); close(statement);
} }
} }

View File

@ -99,6 +99,7 @@ public class WorldTimesTable extends UserIDTable {
statement.executeBatch(); statement.executeBatch();
} finally { } finally {
endTransaction(statement);
close(statement); close(statement);
} }
} }
@ -144,6 +145,7 @@ public class WorldTimesTable extends UserIDTable {
session.getWorldTimes().setGMTimesForWorld(worldName, gmTimes); session.getWorldTimes().setGMTimesForWorld(worldName, gmTimes);
} }
} finally { } finally {
endTransaction(statement);
close(set, statement); close(set, statement);
} }
} }

View File

@ -1,6 +1,5 @@
package main.java.com.djrapitops.plan.systems.listeners; package main.java.com.djrapitops.plan.systems.listeners;
import com.djrapitops.plugin.utilities.Verify;
import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.systems.processing.player.DeathProcessor; import main.java.com.djrapitops.plan.systems.processing.player.DeathProcessor;
import main.java.com.djrapitops.plan.systems.processing.player.KillProcessor; import main.java.com.djrapitops.plan.systems.processing.player.KillProcessor;
@ -16,8 +15,6 @@ import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.projectiles.ProjectileSource; import org.bukkit.projectiles.ProjectileSource;
import java.util.UUID;
/** /**
* Event Listener for EntityDeathEvents. * Event Listener for EntityDeathEvents.
* *
@ -59,9 +56,6 @@ public class PlanDeathEventListener implements Listener {
EntityDamageByEntityEvent entityDamageByEntityEvent = (EntityDamageByEntityEvent) entityDamageEvent; EntityDamageByEntityEvent entityDamageByEntityEvent = (EntityDamageByEntityEvent) entityDamageEvent;
Entity killerEntity = entityDamageByEntityEvent.getDamager(); Entity killerEntity = entityDamageByEntityEvent.getDamager();
UUID killerUUID = null;
String weapon = null;
if (killerEntity instanceof Player) { if (killerEntity instanceof Player) {
Player killer = (Player) killerEntity; Player killer = (Player) killerEntity;
Material itemInHand; Material itemInHand;
@ -75,32 +69,38 @@ public class PlanDeathEventListener implements Listener {
} }
} }
killerUUID = killer.getUniqueId(); plugin.addToProcessQueue(new KillProcessor(killer.getUniqueId(), time, dead, normalizeMaterialName(itemInHand)));
weapon = normalizeMaterialName(itemInHand); return;
} else if (killerEntity instanceof Wolf) { }
if (killerEntity instanceof Wolf) {
Wolf wolf = (Wolf) killerEntity; Wolf wolf = (Wolf) killerEntity;
if (!wolf.isTamed()) { if (!wolf.isTamed()) {
return; return;
} }
AnimalTamer owner = wolf.getOwner(); AnimalTamer owner = wolf.getOwner();
if (owner instanceof Player) {
killerUUID = owner.getUniqueId(); if (!(owner instanceof Player)) {
weapon = "Wolf"; return;
} }
} else if (killerEntity instanceof Arrow) {
plugin.addToProcessQueue(new KillProcessor(owner.getUniqueId(), time, dead, "Wolf"));
}
if (killerEntity instanceof Arrow) {
Arrow arrow = (Arrow) killerEntity; Arrow arrow = (Arrow) killerEntity;
ProjectileSource source = arrow.getShooter(); ProjectileSource source = arrow.getShooter();
if (source instanceof Player) { if (!(source instanceof Player)) {
Player player = (Player) source; return;
killerUUID = player.getUniqueId();
weapon = "Bow";
}
} }
if (Verify.notNull(killerUUID, weapon)) { Player player = (Player) source;
plugin.addToProcessQueue(new KillProcessor(killerUUID, time, dead, weapon));
plugin.addToProcessQueue(new KillProcessor(player.getUniqueId(), time, dead, "Bow"));
} }
} }

View File

@ -30,7 +30,9 @@ public class ProcessingQueue extends Queue<Processor> {
* @param processor processing object. * @param processor processing object.
*/ */
public void addToQueue(Processor processor) { public void addToQueue(Processor processor) {
queue.offer(processor); if (!queue.offer(processor)) {
Log.toLog("ProcessingQueue.addToQueue", new IllegalStateException("Processor was not added to Queue"));
}
} }
} }

View File

@ -312,7 +312,7 @@ public class WebServer {
Plan plan = Plan.getInstance(); Plan plan = Plan.getInstance();
if (!checkKey(plan, key)) { if (!checkKey(key)) {
String error = "Server Key not given or invalid"; String error = "Server Key not given or invalid";
return PageCacheHandler.loadPage(error, () -> { return PageCacheHandler.loadPage(error, () -> {
ForbiddenResponse forbidden = new ForbiddenResponse(); ForbiddenResponse forbidden = new ForbiddenResponse();
@ -336,8 +336,8 @@ public class WebServer {
} }
} }
private boolean checkKey(Plan plan, String key) { private boolean checkKey(String key) {
UUID uuid = plan.getServerInfoManager().getServerUUID(); UUID uuid = Plan.getServerUUID();
UUID keyUUID; UUID keyUUID;
try { try {
keyUUID = UUID.fromString(key); keyUUID = UUID.fromString(key);
@ -544,7 +544,7 @@ public class WebServer {
return usingHttps ? "https" : "http"; return usingHttps ? "https" : "http";
} }
public boolean usingHttps() { public boolean isUsingHTTPS() {
return usingHttps; return usingHttps;
} }

View File

@ -7,6 +7,7 @@ import main.java.com.djrapitops.plan.data.UserInfo;
/** /**
* @author Rsl1122 * @author Rsl1122
* @deprecated Will be removed once it's sure that it's unnecessary
*/ */
@Deprecated // TODO Remove once sure that this is unnecessary. @Deprecated // TODO Remove once sure that this is unnecessary.
public class NewPlayerCreator { public class NewPlayerCreator {

View File

@ -198,7 +198,7 @@ public class DumpUtils {
* @param plan The Plan instance * @param plan The Plan instance
*/ */
private static void addConfigurationDetails(DumpLog log, Plan plan) { private static void addConfigurationDetails(DumpLog log, Plan plan) {
boolean usingHTTPS = plan.getUiServer().usingHttps(); boolean usingHTTPS = plan.getUiServer().isUsingHTTPS();
boolean analysisExport = Settings.ANALYSIS_EXPORT.isTrue(); boolean analysisExport = Settings.ANALYSIS_EXPORT.isTrue();
boolean usingAlternativeServerIP = Settings.SHOW_ALTERNATIVE_IP.isTrue(); boolean usingAlternativeServerIP = Settings.SHOW_ALTERNATIVE_IP.isTrue();

View File

@ -44,11 +44,7 @@ public class QueueTest {
public void setUp() throws Exception { public void setUp() throws Exception {
TestInit t = TestInit.init(); TestInit t = TestInit.init();
Plan plan = t.getPlanMock(); Plan plan = t.getPlanMock();
db = new SQLiteDB(plan, "debug" + MiscUtils.getTime()) { db = new SQLiteDB(plan, "debug" + MiscUtils.getTime());
@Override
public void startConnectionPingTask() {
}
};
db.init(); db.init();
when(plan.getDB()).thenReturn(db); when(plan.getDB()).thenReturn(db);
dataCache = new DataCache(plan) { dataCache = new DataCache(plan) {

View File

@ -29,14 +29,12 @@ public class WorldTimesTest {
public void setUp() throws Exception { public void setUp() throws Exception {
test = new WorldTimes(worldOne, gms[0]); test = new WorldTimes(worldOne, gms[0]);
time = test.getGMTimes(worldOne).getLastStateChange(); time = test.getGMTimes(worldOne).getLastStateChange();
System.out.println(test);
} }
@Test @Test
public void testWorldChange() { public void testWorldChange() {
long changeTime = time + 1000L; long changeTime = time + 1000L;
test.updateState(worldTwo, gms[0], changeTime); test.updateState(worldTwo, gms[0], changeTime);
System.out.println(test);
assertEquals(1000L, (long) test.getWorldPlaytime(worldOne)); assertEquals(1000L, (long) test.getWorldPlaytime(worldOne));
assertEquals(1000L, test.getGMTimes(worldOne).getTime(gms[0])); assertEquals(1000L, test.getGMTimes(worldOne).getTime(gms[0]));
} }
@ -45,7 +43,6 @@ public class WorldTimesTest {
public void testGMChange() { public void testGMChange() {
long changeTime = time + 1000L; long changeTime = time + 1000L;
test.updateState(worldOne, gms[0], changeTime); test.updateState(worldOne, gms[0], changeTime);
System.out.println(test);
assertEquals(1000L, (long) test.getWorldPlaytime(worldOne)); assertEquals(1000L, (long) test.getWorldPlaytime(worldOne));
assertEquals(1000L, test.getGMTimes(worldOne).getTime(gms[0])); assertEquals(1000L, test.getGMTimes(worldOne).getTime(gms[0]));
} }
@ -55,11 +52,9 @@ public class WorldTimesTest {
long changeTime = time + 1000L; long changeTime = time + 1000L;
long changeTime2 = changeTime + 1000L; long changeTime2 = changeTime + 1000L;
test.updateState(worldTwo, gms[2], changeTime); test.updateState(worldTwo, gms[2], changeTime);
System.out.println(test);
assertEquals(1000L, (long) test.getWorldPlaytime(worldOne)); assertEquals(1000L, (long) test.getWorldPlaytime(worldOne));
assertEquals(1000L, test.getGMTimes(worldOne).getTime(gms[0])); assertEquals(1000L, test.getGMTimes(worldOne).getTime(gms[0]));
test.updateState(worldOne, gms[1], changeTime2); test.updateState(worldOne, gms[1], changeTime2);
System.out.println(test);
assertEquals(1000L, (long) test.getWorldPlaytime(worldOne)); assertEquals(1000L, (long) test.getWorldPlaytime(worldOne));
assertEquals(1000L, test.getGMTimes(worldOne).getTime(gms[0])); assertEquals(1000L, test.getGMTimes(worldOne).getTime(gms[0]));
assertEquals(1000L, test.getGMTimes(worldTwo).getTime(gms[2])); assertEquals(1000L, test.getGMTimes(worldTwo).getTime(gms[2]));
@ -98,7 +93,6 @@ public class WorldTimesTest {
long time1 = test.getWorldPlaytime(worldOne); long time1 = test.getWorldPlaytime(worldOne);
long time2 = test.getWorldPlaytime(worldTwo); long time2 = test.getWorldPlaytime(worldTwo);
System.out.println(test);
// Tests World time calculation. // Tests World time calculation.
assertEquals(amount * 50, time1 + time2); assertEquals(amount * 50, time1 + time2);
@ -156,13 +150,10 @@ public class WorldTimesTest {
// No change should occur. // No change should occur.
test.updateState(worldOne, "ADVENTURE", time + 5000L); test.updateState(worldOne, "ADVENTURE", time + 5000L);
System.out.println(test);
assertEquals(1000L, worldOneGMTimes.getTime("ADVENTURE")); assertEquals(1000L, worldOneGMTimes.getTime("ADVENTURE"));
assertEquals(1000L, worldTwoGMTimes.getTime("CREATIVE")); assertEquals(1000L, worldTwoGMTimes.getTime("CREATIVE"));
test.updateState(worldTwo, "CREATIVE", time + 5000L); test.updateState(worldTwo, "CREATIVE", time + 5000L);
System.out.println(test);
test.updateState(worldOne, "ADVENTURE", time + 6000L); test.updateState(worldOne, "ADVENTURE", time + 6000L);
System.out.println(test);
assertEquals(1000L, worldOneGMTimes.getTime("ADVENTURE")); assertEquals(1000L, worldOneGMTimes.getTime("ADVENTURE"));
assertEquals(2000L, worldTwoGMTimes.getTime("CREATIVE")); assertEquals(2000L, worldTwoGMTimes.getTime("CREATIVE"));

View File

@ -3,7 +3,6 @@ package test.java.main.java.com.djrapitops.plan.database;
import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.data.TPS; import main.java.com.djrapitops.plan.data.TPS;
import main.java.com.djrapitops.plan.data.WebUser; import main.java.com.djrapitops.plan.data.WebUser;
import main.java.com.djrapitops.plan.database.Database;
import main.java.com.djrapitops.plan.database.databases.SQLiteDB; import main.java.com.djrapitops.plan.database.databases.SQLiteDB;
import main.java.com.djrapitops.plan.utilities.MiscUtils; import main.java.com.djrapitops.plan.utilities.MiscUtils;
import main.java.com.djrapitops.plan.utilities.PassEncryptUtil; import main.java.com.djrapitops.plan.utilities.PassEncryptUtil;
@ -34,21 +33,18 @@ import static org.junit.Assert.assertTrue;
public class DatabaseCommitTest { public class DatabaseCommitTest {
private Plan plan; private Plan plan;
private Database db; private SQLiteDB db;
private int rows; private int rows;
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
TestInit t = TestInit.init(); TestInit t = TestInit.init();
plan = t.getPlanMock(); plan = t.getPlanMock();
db = new SQLiteDB(plan, "debug" + MiscUtils.getTime()) { db = new SQLiteDB(plan, "debug" + MiscUtils.getTime());
@Override
public void startConnectionPingTask() {
}
};
File f = new File(plan.getDataFolder(), "Errors.txt"); File f = new File(plan.getDataFolder(), "Errors.txt");
rows = FileUtil.lines(f).size(); rows = FileUtil.lines(f).size();
db.init();
} }
/** /**
@ -72,9 +68,10 @@ public class DatabaseCommitTest {
@Test @Test
public void testNoExceptionWhenCommitEmpty() throws SQLException { public void testNoExceptionWhenCommitEmpty() throws SQLException {
db.init(); db.init();
db.commit();
db.commit(); db.commit(db.getConnection());
db.commit(); db.commit(db.getConnection());
db.commit(db.getConnection());
} }
@Ignore("//TODO") @Ignore("//TODO")

View File

@ -68,6 +68,8 @@ public class DatabaseTest {
db.getServerTable().saveCurrentServerInfo(new ServerInfo(-1, t.getServerUUID(), "ServerName", "")); db.getServerTable().saveCurrentServerInfo(new ServerInfo(-1, t.getServerUUID(), "ServerName", ""));
File f = new File(plan.getDataFolder(), "Errors.txt"); File f = new File(plan.getDataFolder(), "Errors.txt");
rows = FileUtil.lines(f).size(); rows = FileUtil.lines(f).size();
db.init();
} }
@After @After
@ -105,22 +107,12 @@ public class DatabaseTest {
@Test @Test
public void testMysqlGetConfigName() { public void testMysqlGetConfigName() {
assertEquals("mysql", new MySQLDB(plan) { assertEquals("mysql", new MySQLDB(plan).getConfigName());
@Override
public void startConnectionPingTask() {
}
}.getConfigName());
} }
@Test @Test
public void testMysqlGetName() { public void testMysqlGetName() {
assertEquals("MySQL", new MySQLDB(plan) { assertEquals("MySQL", new MySQLDB(plan).getName());
@Override
public void startConnectionPingTask() {
}
}.getName());
} }
@Test @Test
@ -176,7 +168,6 @@ public class DatabaseTest {
public void testTPSSaving() throws SQLException { public void testTPSSaving() throws SQLException {
db.init(); db.init();
TPSTable tpsTable = db.getTpsTable(); TPSTable tpsTable = db.getTpsTable();
List<TPS> expected = new ArrayList<>();
Random r = new Random(); Random r = new Random();
OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean(); OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean();
@ -187,6 +178,8 @@ public class DatabaseTest {
final int entityCount = 6123; final int entityCount = 6123;
final int chunksLoaded = 2134; final int chunksLoaded = 2134;
List<TPS> expected = new ArrayList<>();
expected.add(new TPS(r.nextLong(), r.nextDouble(), r.nextInt(100000000), averageCPUUsage, usedMemory, entityCount, chunksLoaded)); expected.add(new TPS(r.nextLong(), r.nextDouble(), r.nextInt(100000000), averageCPUUsage, usedMemory, entityCount, chunksLoaded));
expected.add(new TPS(r.nextLong(), r.nextDouble(), r.nextInt(100000000), averageCPUUsage, usedMemory, entityCount, chunksLoaded)); expected.add(new TPS(r.nextLong(), r.nextDouble(), r.nextInt(100000000), averageCPUUsage, usedMemory, entityCount, chunksLoaded));
expected.add(new TPS(r.nextLong(), r.nextDouble(), r.nextInt(100000000), averageCPUUsage, usedMemory, entityCount, chunksLoaded)); expected.add(new TPS(r.nextLong(), r.nextDouble(), r.nextInt(100000000), averageCPUUsage, usedMemory, entityCount, chunksLoaded));

View File

@ -0,0 +1,48 @@
/*
* Licence is provided in the jar as license.yml also here:
* https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml
*/
package test.java.utils;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import test.java.main.java.com.djrapitops.plan.database.DatabaseCommitTest;
import test.java.main.java.com.djrapitops.plan.database.DatabaseTest;
import java.io.File;
import java.io.IOException;
/**
* @author Fuzzlemann
*/
@RunWith(Suite.class)
@Suite.SuiteClasses({DatabaseCommitTest.class, DatabaseTest.class})
public class DBTestSuite {
@BeforeClass
public static void setUp() throws IOException {
clean(true);
}
@AfterClass
public static void tearDown() throws IOException {
clean(false);
}
private static void clean(boolean dbOnly) throws IOException {
File testFolder = TestInit.getTestFolder();
if (!testFolder.exists() || !testFolder.isDirectory()) {
return;
}
for (File f : testFolder.listFiles()) {
if (dbOnly && !f.getName().contains(".db")) {
continue;
}
f.delete();
}
}
}

View File

@ -63,17 +63,11 @@ public class TestInit {
public static TestInit init() throws Exception { public static TestInit init() throws Exception {
TestInit t = new TestInit(); TestInit t = new TestInit();
t.setUp(true); t.setUp();
return t; return t;
} }
public static TestInit init(boolean clearOnStart) throws Exception { private void setUp() throws Exception {
TestInit t = new TestInit();
t.setUp(clearOnStart);
return t;
}
private void setUp(boolean clearOnStart) throws Exception {
planMock = PowerMockito.mock(Plan.class); planMock = PowerMockito.mock(Plan.class);
StaticHolder.setInstance(Plan.class, planMock); StaticHolder.setInstance(Plan.class, planMock);
StaticHolder.setInstance(planMock.getClass(), planMock); StaticHolder.setInstance(planMock.getClass(), planMock);
@ -82,9 +76,6 @@ public class TestInit {
when(planMock.getConfig()).thenReturn(config); when(planMock.getConfig()).thenReturn(config);
File testFolder = getTestFolder(); File testFolder = getTestFolder();
if (clearOnStart) {
clean(testFolder);
}
when(planMock.getDataFolder()).thenReturn(testFolder); when(planMock.getDataFolder()).thenReturn(testFolder);
// Html Files // Html Files
@ -123,7 +114,7 @@ public class TestInit {
} }
private RunnableFactory<Plan> mockRunnableFactory() { private RunnableFactory<Plan> mockRunnableFactory() {
RunnableFactory<Plan> runnableFactory = new RunnableFactory<Plan>(planMock) { return new RunnableFactory<Plan>(planMock) {
@Override @Override
public IRunnable createNew(String name, final AbsRunnable runnable) { public IRunnable createNew(String name, final AbsRunnable runnable) {
return new IRunnable() { return new IRunnable() {
@ -174,27 +165,14 @@ public class TestInit {
}; };
} }
}; };
return runnableFactory;
} }
private static File getTestFolder() { static File getTestFolder() {
File testFolder = new File("temporaryTestFolder"); File testFolder = new File("temporaryTestFolder");
testFolder.mkdir(); testFolder.mkdir();
return testFolder; return testFolder;
} }
public static void clean() throws IOException {
clean(getTestFolder());
}
public static void clean(File testFolder) throws IOException {
if (testFolder.exists() && testFolder.isDirectory()) {
for (File f : testFolder.listFiles()) {
Files.deleteIfExists(f.toPath());
}
}
}
private Server mockServer() { private Server mockServer() {
Server mockServer = PowerMockito.mock(Server.class); Server mockServer = PowerMockito.mock(Server.class);