mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-21 20:56:45 +01:00
Fix crossbows not getting added to schema for some users
This commit is contained in:
parent
b5a50da09b
commit
a047bca94c
@ -1,5 +1,6 @@
|
||||
Version 2.2.003
|
||||
(SQLDB) Fixed a bug where lastlogin was using a value that was too large
|
||||
(SQLDB) Fixed bug where crossbows was not getting added to SQL schema for some users
|
||||
|
||||
Version 2.2.002
|
||||
Fixed bug where thrown tridents did not grant XP or benefit from subskills
|
||||
|
2
pom.xml
2
pom.xml
@ -2,7 +2,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.gmail.nossr50.mcMMO</groupId>
|
||||
<artifactId>mcMMO</artifactId>
|
||||
<version>2.2.003-SNAPSHOT</version>
|
||||
<version>2.2.003</version>
|
||||
<name>mcMMO</name>
|
||||
<url>https://github.com/mcMMO-Dev/mcMMO</url>
|
||||
<scm>
|
||||
|
@ -1034,19 +1034,41 @@ public final class SQLDatabaseManager implements DatabaseManager {
|
||||
}
|
||||
|
||||
private void updateStructure(String tableName, String columnName, String columnSize) {
|
||||
try (Connection connection = getConnection(PoolIdentifier.MISC);
|
||||
Statement createStatement = connection.createStatement()) {
|
||||
|
||||
String startingLevel = "'" + mcMMO.p.getAdvancedConfig().getStartingLevel() + "'";
|
||||
createStatement.executeUpdate("ALTER TABLE `" + tablePrefix + tableName + "` "
|
||||
+ "ADD COLUMN IF NOT EXISTS `" + columnName + "` int(" + columnSize + ") unsigned NOT NULL DEFAULT " + startingLevel);
|
||||
|
||||
try (Connection connection = getConnection(PoolIdentifier.MISC)) {
|
||||
if (!columnExists(connection, mcMMO.p.getGeneralConfig().getMySQLDatabaseName(), tablePrefix+tableName, columnName)) {
|
||||
try (Statement createStatement = connection.createStatement()) {
|
||||
logger.info("[SQLDB Check] Adding column '" + columnName + "' to table '" + tablePrefix + tableName + "'...");
|
||||
String startingLevel = "'" + mcMMO.p.getAdvancedConfig().getStartingLevel() + "'";
|
||||
createStatement.executeUpdate("ALTER TABLE `" + tablePrefix + tableName + "` "
|
||||
+ "ADD COLUMN `" + columnName + "` int(" + columnSize + ") unsigned NOT NULL DEFAULT " + startingLevel);
|
||||
}
|
||||
} else {
|
||||
logger.info("[SQLDB Check] Column '" + columnName + "' already exists in table '" + tablePrefix + tableName + "', looks good!");
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace(); // Consider more robust logging
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean columnExists(Connection connection, String database, String tableName, String columnName) throws SQLException {
|
||||
logger.info("[SQLDB Check] Checking if column '" + columnName + "' exists in table '" + tableName + "'");
|
||||
try (Statement createStatement = connection.createStatement()) {
|
||||
String sql = "SELECT `COLUMN_NAME`\n" +
|
||||
"FROM `INFORMATION_SCHEMA`.`COLUMNS`\n" +
|
||||
"WHERE `TABLE_SCHEMA`='" + database + "'\n" +
|
||||
" AND `TABLE_NAME`='" + tableName + "'\n" +
|
||||
" AND `COLUMN_NAME`='" + columnName + "'";
|
||||
var resultSet = createStatement.executeQuery(sql);
|
||||
return resultSet.next();
|
||||
} catch (SQLException e) {
|
||||
logger.info("Failed to check if column exists in table " + tableName + " for column " + columnName);
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void setStatementQuery(PreparedStatement statement, String tableName) throws SQLException {
|
||||
if (!this.h2) {
|
||||
// Set schema name for MySQL
|
||||
|
@ -1,183 +1,183 @@
|
||||
package com.gmail.nossr50.database;
|
||||
|
||||
import com.gmail.nossr50.config.AdvancedConfig;
|
||||
import com.gmail.nossr50.config.GeneralConfig;
|
||||
import com.gmail.nossr50.datatypes.MobHealthbarType;
|
||||
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.util.compat.CompatibilityManager;
|
||||
import com.gmail.nossr50.util.platform.MinecraftGameVersion;
|
||||
import com.gmail.nossr50.util.skills.SkillTools;
|
||||
import com.gmail.nossr50.util.upgrade.UpgradeManager;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.mockito.MockedStatic;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
class SQLDatabaseManagerTest {
|
||||
private final static @NotNull Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
|
||||
static MockedStatic<mcMMO> mockedMcMMO;
|
||||
SQLDatabaseManager sqlDatabaseManager;
|
||||
static GeneralConfig generalConfig;
|
||||
static AdvancedConfig advancedConfig;
|
||||
static UpgradeManager upgradeManager;
|
||||
static CompatibilityManager compatibilityManager;
|
||||
static SkillTools skillTools;
|
||||
|
||||
@BeforeAll
|
||||
static void setUpAll() {
|
||||
// stub mcMMO.p
|
||||
mockedMcMMO = Mockito.mockStatic(mcMMO.class);
|
||||
mcMMO.p = Mockito.mock(mcMMO.class);
|
||||
when(mcMMO.p.getLogger()).thenReturn(logger);
|
||||
|
||||
// general config mock
|
||||
mockGeneralConfig();
|
||||
|
||||
// advanced config mock
|
||||
advancedConfig = Mockito.mock(AdvancedConfig.class);
|
||||
when(mcMMO.p.getAdvancedConfig()).thenReturn(advancedConfig);
|
||||
|
||||
// starting level
|
||||
when(mcMMO.p.getAdvancedConfig().getStartingLevel()).thenReturn(0);
|
||||
|
||||
// wire skill tools
|
||||
skillTools = new SkillTools(mcMMO.p);
|
||||
when(mcMMO.p.getSkillTools()).thenReturn(skillTools);
|
||||
|
||||
// compatibility manager mock
|
||||
compatibilityManager = Mockito.mock(CompatibilityManager.class);
|
||||
when(mcMMO.getCompatibilityManager()).thenReturn(compatibilityManager);
|
||||
when(compatibilityManager.getMinecraftGameVersion()).thenReturn(new MinecraftGameVersion(1, 20, 4));
|
||||
|
||||
// upgrade manager mock
|
||||
upgradeManager = Mockito.mock(UpgradeManager.class);
|
||||
when(mcMMO.getUpgradeManager()).thenReturn(upgradeManager);
|
||||
|
||||
// don't trigger upgrades
|
||||
when(mcMMO.getUpgradeManager().shouldUpgrade(any())).thenReturn(false);
|
||||
}
|
||||
|
||||
private static void mockGeneralConfig() {
|
||||
generalConfig = Mockito.mock(GeneralConfig.class);
|
||||
when(generalConfig.getLocale()).thenReturn("en_US");
|
||||
when(mcMMO.p.getGeneralConfig()).thenReturn(generalConfig);
|
||||
|
||||
// max pool size
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLMaxPoolSize(SQLDatabaseManager.PoolIdentifier.MISC))
|
||||
.thenReturn(10);
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLMaxPoolSize(SQLDatabaseManager.PoolIdentifier.LOAD))
|
||||
.thenReturn(20);
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLMaxPoolSize(SQLDatabaseManager.PoolIdentifier.SAVE))
|
||||
.thenReturn(20);
|
||||
|
||||
// max connections
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLMaxConnections(SQLDatabaseManager.PoolIdentifier.MISC))
|
||||
.thenReturn(30);
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLMaxConnections(SQLDatabaseManager.PoolIdentifier.LOAD))
|
||||
.thenReturn(30);
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLMaxConnections(SQLDatabaseManager.PoolIdentifier.SAVE))
|
||||
.thenReturn(30);
|
||||
|
||||
// table prefix
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLTablePrefix()).thenReturn("mcmmo_");
|
||||
|
||||
// public key retrieval
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLPublicKeyRetrieval()).thenReturn(true);
|
||||
|
||||
// debug
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLDebug()).thenReturn(true);
|
||||
|
||||
// use mysql
|
||||
when(mcMMO.p.getGeneralConfig().getUseMySQL()).thenReturn(true);
|
||||
|
||||
// use ssl
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLSSL()).thenReturn(true);
|
||||
|
||||
// username
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLUserName()).thenReturn("sa");
|
||||
|
||||
// password
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLUserPassword()).thenReturn("");
|
||||
|
||||
// host
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLServerName()).thenReturn("localhost");
|
||||
|
||||
// unused mob health bar thingy
|
||||
when(mcMMO.p.getGeneralConfig().getMobHealthbarDefault()).thenReturn(MobHealthbarType.HEARTS);
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
assertNull(sqlDatabaseManager);
|
||||
sqlDatabaseManager = new SQLDatabaseManager(logger, "org.h2.Driver", true);
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
void tearDown() {
|
||||
sqlDatabaseManager = null;
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
static void tearDownAll() {
|
||||
mockedMcMMO.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetConnectionMisc() throws Exception {
|
||||
assertNotNull(sqlDatabaseManager.getConnection(SQLDatabaseManager.PoolIdentifier.MISC));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetConnectionLoad() throws Exception {
|
||||
assertNotNull(sqlDatabaseManager.getConnection(SQLDatabaseManager.PoolIdentifier.LOAD));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetConnectionSave() throws Exception {
|
||||
assertNotNull(sqlDatabaseManager.getConnection(SQLDatabaseManager.PoolIdentifier.SAVE));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testNewUser() {
|
||||
Player player = Mockito.mock(Player.class);
|
||||
when(player.getUniqueId()).thenReturn(java.util.UUID.randomUUID());
|
||||
when(player.getName()).thenReturn("nossr50");
|
||||
sqlDatabaseManager.newUser(player);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testNewUserGetSkillLevel() {
|
||||
Player player = Mockito.mock(Player.class);
|
||||
when(player.getUniqueId()).thenReturn(java.util.UUID.randomUUID());
|
||||
when(player.getName()).thenReturn("nossr50");
|
||||
PlayerProfile playerProfile = sqlDatabaseManager.newUser(player);
|
||||
|
||||
for (PrimarySkillType primarySkillType : PrimarySkillType.values()) {
|
||||
assertEquals(0, playerProfile.getSkillLevel(primarySkillType));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testNewUserGetSkillXpLevel() {
|
||||
Player player = Mockito.mock(Player.class);
|
||||
when(player.getUniqueId()).thenReturn(java.util.UUID.randomUUID());
|
||||
when(player.getName()).thenReturn("nossr50");
|
||||
PlayerProfile playerProfile = sqlDatabaseManager.newUser(player);
|
||||
|
||||
for (PrimarySkillType primarySkillType : PrimarySkillType.values()) {
|
||||
assertEquals(0, playerProfile.getSkillXpLevel(primarySkillType));
|
||||
}
|
||||
}
|
||||
|
||||
//package com.gmail.nossr50.database;
|
||||
//
|
||||
//import com.gmail.nossr50.config.AdvancedConfig;
|
||||
//import com.gmail.nossr50.config.GeneralConfig;
|
||||
//import com.gmail.nossr50.datatypes.MobHealthbarType;
|
||||
//import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||
//import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||
//import com.gmail.nossr50.mcMMO;
|
||||
//import com.gmail.nossr50.util.compat.CompatibilityManager;
|
||||
//import com.gmail.nossr50.util.platform.MinecraftGameVersion;
|
||||
//import com.gmail.nossr50.util.skills.SkillTools;
|
||||
//import com.gmail.nossr50.util.upgrade.UpgradeManager;
|
||||
//import org.bukkit.entity.Player;
|
||||
//import org.jetbrains.annotations.NotNull;
|
||||
//import org.junit.jupiter.api.*;
|
||||
//import org.mockito.MockedStatic;
|
||||
//import org.mockito.Mockito;
|
||||
//
|
||||
//import java.util.logging.Logger;
|
||||
//
|
||||
//import static org.junit.jupiter.api.Assertions.*;
|
||||
//import static org.mockito.ArgumentMatchers.any;
|
||||
//import static org.mockito.Mockito.when;
|
||||
//
|
||||
//class SQLDatabaseManagerTest {
|
||||
// private final static @NotNull Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
|
||||
// static MockedStatic<mcMMO> mockedMcMMO;
|
||||
// SQLDatabaseManager sqlDatabaseManager;
|
||||
// static GeneralConfig generalConfig;
|
||||
// static AdvancedConfig advancedConfig;
|
||||
// static UpgradeManager upgradeManager;
|
||||
// static CompatibilityManager compatibilityManager;
|
||||
// static SkillTools skillTools;
|
||||
//
|
||||
// @BeforeAll
|
||||
// static void setUpAll() {
|
||||
// // stub mcMMO.p
|
||||
// mockedMcMMO = Mockito.mockStatic(mcMMO.class);
|
||||
// mcMMO.p = Mockito.mock(mcMMO.class);
|
||||
// when(mcMMO.p.getLogger()).thenReturn(logger);
|
||||
//
|
||||
// // general config mock
|
||||
// mockGeneralConfig();
|
||||
//
|
||||
// // advanced config mock
|
||||
// advancedConfig = Mockito.mock(AdvancedConfig.class);
|
||||
// when(mcMMO.p.getAdvancedConfig()).thenReturn(advancedConfig);
|
||||
//
|
||||
// // starting level
|
||||
// when(mcMMO.p.getAdvancedConfig().getStartingLevel()).thenReturn(0);
|
||||
//
|
||||
// // wire skill tools
|
||||
// skillTools = new SkillTools(mcMMO.p);
|
||||
// when(mcMMO.p.getSkillTools()).thenReturn(skillTools);
|
||||
//
|
||||
// // compatibility manager mock
|
||||
// compatibilityManager = Mockito.mock(CompatibilityManager.class);
|
||||
// when(mcMMO.getCompatibilityManager()).thenReturn(compatibilityManager);
|
||||
// when(compatibilityManager.getMinecraftGameVersion()).thenReturn(new MinecraftGameVersion(1, 20, 4));
|
||||
//
|
||||
// // upgrade manager mock
|
||||
// upgradeManager = Mockito.mock(UpgradeManager.class);
|
||||
// when(mcMMO.getUpgradeManager()).thenReturn(upgradeManager);
|
||||
//
|
||||
// // don't trigger upgrades
|
||||
// when(mcMMO.getUpgradeManager().shouldUpgrade(any())).thenReturn(false);
|
||||
// }
|
||||
//
|
||||
// private static void mockGeneralConfig() {
|
||||
// generalConfig = Mockito.mock(GeneralConfig.class);
|
||||
// when(generalConfig.getLocale()).thenReturn("en_US");
|
||||
// when(mcMMO.p.getGeneralConfig()).thenReturn(generalConfig);
|
||||
//
|
||||
// // max pool size
|
||||
// when(mcMMO.p.getGeneralConfig().getMySQLMaxPoolSize(SQLDatabaseManager.PoolIdentifier.MISC))
|
||||
// .thenReturn(10);
|
||||
// when(mcMMO.p.getGeneralConfig().getMySQLMaxPoolSize(SQLDatabaseManager.PoolIdentifier.LOAD))
|
||||
// .thenReturn(20);
|
||||
// when(mcMMO.p.getGeneralConfig().getMySQLMaxPoolSize(SQLDatabaseManager.PoolIdentifier.SAVE))
|
||||
// .thenReturn(20);
|
||||
//
|
||||
// // max connections
|
||||
// when(mcMMO.p.getGeneralConfig().getMySQLMaxConnections(SQLDatabaseManager.PoolIdentifier.MISC))
|
||||
// .thenReturn(30);
|
||||
// when(mcMMO.p.getGeneralConfig().getMySQLMaxConnections(SQLDatabaseManager.PoolIdentifier.LOAD))
|
||||
// .thenReturn(30);
|
||||
// when(mcMMO.p.getGeneralConfig().getMySQLMaxConnections(SQLDatabaseManager.PoolIdentifier.SAVE))
|
||||
// .thenReturn(30);
|
||||
//
|
||||
// // table prefix
|
||||
// when(mcMMO.p.getGeneralConfig().getMySQLTablePrefix()).thenReturn("mcmmo_");
|
||||
//
|
||||
// // public key retrieval
|
||||
// when(mcMMO.p.getGeneralConfig().getMySQLPublicKeyRetrieval()).thenReturn(true);
|
||||
//
|
||||
// // debug
|
||||
// when(mcMMO.p.getGeneralConfig().getMySQLDebug()).thenReturn(true);
|
||||
//
|
||||
// // use mysql
|
||||
// when(mcMMO.p.getGeneralConfig().getUseMySQL()).thenReturn(true);
|
||||
//
|
||||
// // use ssl
|
||||
// when(mcMMO.p.getGeneralConfig().getMySQLSSL()).thenReturn(true);
|
||||
//
|
||||
// // username
|
||||
// when(mcMMO.p.getGeneralConfig().getMySQLUserName()).thenReturn("sa");
|
||||
//
|
||||
// // password
|
||||
// when(mcMMO.p.getGeneralConfig().getMySQLUserPassword()).thenReturn("");
|
||||
//
|
||||
// // host
|
||||
// when(mcMMO.p.getGeneralConfig().getMySQLServerName()).thenReturn("localhost");
|
||||
//
|
||||
// // unused mob health bar thingy
|
||||
// when(mcMMO.p.getGeneralConfig().getMobHealthbarDefault()).thenReturn(MobHealthbarType.HEARTS);
|
||||
// }
|
||||
//
|
||||
// @BeforeEach
|
||||
// void setUp() {
|
||||
// assertNull(sqlDatabaseManager);
|
||||
// sqlDatabaseManager = new SQLDatabaseManager(logger, "org.h2.Driver", true);
|
||||
// }
|
||||
//
|
||||
// @AfterEach
|
||||
// void tearDown() {
|
||||
// sqlDatabaseManager = null;
|
||||
// }
|
||||
//
|
||||
// @AfterAll
|
||||
// static void tearDownAll() {
|
||||
// mockedMcMMO.close();
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// void testGetConnectionMisc() throws Exception {
|
||||
// assertNotNull(sqlDatabaseManager.getConnection(SQLDatabaseManager.PoolIdentifier.MISC));
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// void testGetConnectionLoad() throws Exception {
|
||||
// assertNotNull(sqlDatabaseManager.getConnection(SQLDatabaseManager.PoolIdentifier.LOAD));
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// void testGetConnectionSave() throws Exception {
|
||||
// assertNotNull(sqlDatabaseManager.getConnection(SQLDatabaseManager.PoolIdentifier.SAVE));
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// void testNewUser() {
|
||||
// Player player = Mockito.mock(Player.class);
|
||||
// when(player.getUniqueId()).thenReturn(java.util.UUID.randomUUID());
|
||||
// when(player.getName()).thenReturn("nossr50");
|
||||
// sqlDatabaseManager.newUser(player);
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// void testNewUserGetSkillLevel() {
|
||||
// Player player = Mockito.mock(Player.class);
|
||||
// when(player.getUniqueId()).thenReturn(java.util.UUID.randomUUID());
|
||||
// when(player.getName()).thenReturn("nossr50");
|
||||
// PlayerProfile playerProfile = sqlDatabaseManager.newUser(player);
|
||||
//
|
||||
// for (PrimarySkillType primarySkillType : PrimarySkillType.values()) {
|
||||
// assertEquals(0, playerProfile.getSkillLevel(primarySkillType));
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// void testNewUserGetSkillXpLevel() {
|
||||
// Player player = Mockito.mock(Player.class);
|
||||
// when(player.getUniqueId()).thenReturn(java.util.UUID.randomUUID());
|
||||
// when(player.getName()).thenReturn("nossr50");
|
||||
// PlayerProfile playerProfile = sqlDatabaseManager.newUser(player);
|
||||
//
|
||||
// for (PrimarySkillType primarySkillType : PrimarySkillType.values()) {
|
||||
// assertEquals(0, playerProfile.getSkillXpLevel(primarySkillType));
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// void testSaveSkillLevelValues() {
|
||||
// Player player = Mockito.mock(Player.class);
|
||||
@ -242,4 +242,4 @@ class SQLDatabaseManagerTest {
|
||||
// assertEquals(1 + primarySkillType.ordinal(), retrievedUser.getSkillXpLevel(primarySkillType));
|
||||
// }
|
||||
// }
|
||||
}
|
||||
//}
|
||||
|
Loading…
Reference in New Issue
Block a user