Set up logger at start of initialization to avoid NPE on errors later on
- Thanks to sgdc3 for the hint
This commit is contained in:
parent
647ee245e0
commit
363e85e363
@ -12,7 +12,6 @@ import fr.xephi.authme.initialization.OnShutdownPlayerSaver;
|
|||||||
import fr.xephi.authme.initialization.OnStartupTasks;
|
import fr.xephi.authme.initialization.OnStartupTasks;
|
||||||
import fr.xephi.authme.initialization.SettingsProvider;
|
import fr.xephi.authme.initialization.SettingsProvider;
|
||||||
import fr.xephi.authme.initialization.TaskCloser;
|
import fr.xephi.authme.initialization.TaskCloser;
|
||||||
import fr.xephi.authme.output.ConsoleLoggerFactory;
|
|
||||||
import fr.xephi.authme.listener.BlockListener;
|
import fr.xephi.authme.listener.BlockListener;
|
||||||
import fr.xephi.authme.listener.EntityListener;
|
import fr.xephi.authme.listener.EntityListener;
|
||||||
import fr.xephi.authme.listener.PlayerListener;
|
import fr.xephi.authme.listener.PlayerListener;
|
||||||
@ -20,6 +19,7 @@ import fr.xephi.authme.listener.PlayerListener111;
|
|||||||
import fr.xephi.authme.listener.PlayerListener19;
|
import fr.xephi.authme.listener.PlayerListener19;
|
||||||
import fr.xephi.authme.listener.PlayerListener19Spigot;
|
import fr.xephi.authme.listener.PlayerListener19Spigot;
|
||||||
import fr.xephi.authme.listener.ServerListener;
|
import fr.xephi.authme.listener.ServerListener;
|
||||||
|
import fr.xephi.authme.output.ConsoleLoggerFactory;
|
||||||
import fr.xephi.authme.security.crypts.Sha256;
|
import fr.xephi.authme.security.crypts.Sha256;
|
||||||
import fr.xephi.authme.service.BackupService;
|
import fr.xephi.authme.service.BackupService;
|
||||||
import fr.xephi.authme.service.BukkitService;
|
import fr.xephi.authme.service.BukkitService;
|
||||||
@ -43,6 +43,7 @@ import org.bukkit.plugin.java.JavaPluginLoader;
|
|||||||
import org.bukkit.scheduler.BukkitScheduler;
|
import org.bukkit.scheduler.BukkitScheduler;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
import static fr.xephi.authme.service.BukkitService.TICKS_PER_MINUTE;
|
import static fr.xephi.authme.service.BukkitService.TICKS_PER_MINUTE;
|
||||||
import static fr.xephi.authme.util.Utils.isClassLoaded;
|
import static fr.xephi.authme.util.Utils.isClassLoaded;
|
||||||
@ -119,16 +120,20 @@ public class AuthMe extends JavaPlugin {
|
|||||||
// Load the plugin version data from the plugin description file
|
// Load the plugin version data from the plugin description file
|
||||||
loadPluginInfo(getDescription().getVersion());
|
loadPluginInfo(getDescription().getVersion());
|
||||||
|
|
||||||
|
// Set the Logger instance and log file path
|
||||||
|
ConsoleLogger.initialize(getLogger(), new File(getDataFolder(), LOG_FILENAME));
|
||||||
|
logger = ConsoleLoggerFactory.get(AuthMe.class);
|
||||||
|
|
||||||
// Check server version
|
// Check server version
|
||||||
if (!isClassLoaded("org.bukkit.event.player.PlayerInteractAtEntityEvent")) {
|
if (!isClassLoaded("org.bukkit.event.player.PlayerInteractAtEntityEvent")) {
|
||||||
getLogger().warning("You are running an unsupported server version! AuthMe requires MC 1.8.X or later!");
|
logger.warning("You are running an unsupported server version! AuthMe requires MC 1.8.X or later!");
|
||||||
stopOrUnload();
|
stopOrUnload();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prevent running AuthMeBridge due to major exploit issues
|
// Prevent running AuthMeBridge due to major exploit issues
|
||||||
if (getServer().getPluginManager().isPluginEnabled("AuthMeBridge")) {
|
if (getServer().getPluginManager().isPluginEnabled("AuthMeBridge")) {
|
||||||
getLogger().warning("Detected AuthMeBridge, support for it has been dropped as it was "
|
logger.warning("Detected AuthMeBridge, support for it has been dropped as it was "
|
||||||
+ "causing exploit issues, please use AuthMeBungee instead! Aborting!");
|
+ "causing exploit issues, please use AuthMeBungee instead! Aborting!");
|
||||||
stopOrUnload();
|
stopOrUnload();
|
||||||
return;
|
return;
|
||||||
@ -153,6 +158,10 @@ public class AuthMe extends JavaPlugin {
|
|||||||
// Show settings warnings
|
// Show settings warnings
|
||||||
injector.getSingleton(SettingsWarner.class).logWarningsForMisconfigurations();
|
injector.getSingleton(SettingsWarner.class).logWarningsForMisconfigurations();
|
||||||
|
|
||||||
|
// Schedule clean up task
|
||||||
|
CleanupTask cleanupTask = injector.getSingleton(CleanupTask.class);
|
||||||
|
cleanupTask.runTaskTimerAsynchronously(this, CLEANUP_INTERVAL, CLEANUP_INTERVAL);
|
||||||
|
|
||||||
// Do a backup on start
|
// Do a backup on start
|
||||||
backupService.doBackup(BackupService.BackupCause.START);
|
backupService.doBackup(BackupService.BackupCause.START);
|
||||||
|
|
||||||
@ -165,10 +174,6 @@ public class AuthMe extends JavaPlugin {
|
|||||||
// Purge on start if enabled
|
// Purge on start if enabled
|
||||||
PurgeService purgeService = injector.getSingleton(PurgeService.class);
|
PurgeService purgeService = injector.getSingleton(PurgeService.class);
|
||||||
purgeService.runAutoPurge();
|
purgeService.runAutoPurge();
|
||||||
|
|
||||||
// Schedule clean up task
|
|
||||||
CleanupTask cleanupTask = injector.getSingleton(CleanupTask.class);
|
|
||||||
cleanupTask.runTaskTimerAsynchronously(this, CLEANUP_INTERVAL, CLEANUP_INTERVAL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -191,9 +196,6 @@ public class AuthMe extends JavaPlugin {
|
|||||||
* Initialize the plugin and all the services.
|
* Initialize the plugin and all the services.
|
||||||
*/
|
*/
|
||||||
private void initialize() {
|
private void initialize() {
|
||||||
// Set the Logger instance and log file path
|
|
||||||
ConsoleLogger.initialize(getLogger(), new File(getDataFolder(), LOG_FILENAME));
|
|
||||||
|
|
||||||
// Check java version
|
// Check java version
|
||||||
if (!SystemUtils.isJavaVersionAtLeast(1.8f)) {
|
if (!SystemUtils.isJavaVersionAtLeast(1.8f)) {
|
||||||
throw new IllegalStateException("You need Java 1.8 or above to run this plugin!");
|
throw new IllegalStateException("You need Java 1.8 or above to run this plugin!");
|
||||||
@ -217,7 +219,6 @@ public class AuthMe extends JavaPlugin {
|
|||||||
// Get settings and set up logger
|
// Get settings and set up logger
|
||||||
settings = injector.getSingleton(Settings.class);
|
settings = injector.getSingleton(Settings.class);
|
||||||
ConsoleLoggerFactory.reloadSettings(settings);
|
ConsoleLoggerFactory.reloadSettings(settings);
|
||||||
logger = ConsoleLoggerFactory.get(AuthMe.class);
|
|
||||||
OnStartupTasks.setupConsoleFilter(getLogger());
|
OnStartupTasks.setupConsoleFilter(getLogger());
|
||||||
|
|
||||||
// Set all service fields on the AuthMe class
|
// Set all service fields on the AuthMe class
|
||||||
@ -226,7 +227,6 @@ public class AuthMe extends JavaPlugin {
|
|||||||
// Convert deprecated PLAINTEXT hash entries
|
// Convert deprecated PLAINTEXT hash entries
|
||||||
MigrationService.changePlainTextToSha256(settings, database, new Sha256());
|
MigrationService.changePlainTextToSha256(settings, database, new Sha256());
|
||||||
|
|
||||||
//TODO: does this still make sense? -sgdc3
|
|
||||||
// If the server is empty (fresh start) just set all the players as unlogged
|
// If the server is empty (fresh start) just set all the players as unlogged
|
||||||
if (bukkitService.getOnlinePlayers().isEmpty()) {
|
if (bukkitService.getOnlinePlayers().isEmpty()) {
|
||||||
database.purgeLogged();
|
database.purgeLogged();
|
||||||
@ -321,7 +321,8 @@ public class AuthMe extends JavaPlugin {
|
|||||||
new TaskCloser(this, database).run();
|
new TaskCloser(this, database).run();
|
||||||
|
|
||||||
// Disabled correctly
|
// Disabled correctly
|
||||||
logger.info("AuthMe " + this.getDescription().getVersion() + " disabled!");
|
Consumer<String> infoLogMethod = logger == null ? getLogger()::info : logger::info;
|
||||||
|
infoLogMethod.accept("AuthMe " + this.getDescription().getVersion() + " disabled!");
|
||||||
ConsoleLogger.closeFileWriter();
|
ConsoleLogger.closeFileWriter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -24,8 +24,8 @@ import org.bukkit.Server;
|
|||||||
import org.bukkit.plugin.PluginDescriptionFile;
|
import org.bukkit.plugin.PluginDescriptionFile;
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
import org.bukkit.plugin.java.JavaPluginLoader;
|
import org.bukkit.plugin.java.JavaPluginLoader;
|
||||||
|
import org.bukkit.scheduler.BukkitScheduler;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.BeforeClass;
|
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.rules.TemporaryFolder;
|
import org.junit.rules.TemporaryFolder;
|
||||||
@ -46,6 +46,7 @@ import static org.mockito.ArgumentMatchers.anyString;
|
|||||||
import static org.mockito.BDDMockito.given;
|
import static org.mockito.BDDMockito.given;
|
||||||
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
|
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Integration test verifying that all services can be initialized in {@link AuthMe}
|
* Integration test verifying that all services can be initialized in {@link AuthMe}
|
||||||
@ -66,11 +67,6 @@ public class AuthMeInitializationTest {
|
|||||||
@Rule
|
@Rule
|
||||||
public TemporaryFolder temporaryFolder = new TemporaryFolder();
|
public TemporaryFolder temporaryFolder = new TemporaryFolder();
|
||||||
|
|
||||||
@BeforeClass
|
|
||||||
public static void setUpLogger() {
|
|
||||||
TestHelper.setupLogger();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void initAuthMe() throws IOException {
|
public void initAuthMe() throws IOException {
|
||||||
dataFolder = temporaryFolder.newFolder();
|
dataFolder = temporaryFolder.newFolder();
|
||||||
@ -98,9 +94,10 @@ public class AuthMeInitializationTest {
|
|||||||
given(reader.getList(anyString())).willReturn(Collections.emptyList());
|
given(reader.getList(anyString())).willReturn(Collections.emptyList());
|
||||||
PropertyResource resource = mock(PropertyResource.class);
|
PropertyResource resource = mock(PropertyResource.class);
|
||||||
given(resource.createReader()).willReturn(reader);
|
given(resource.createReader()).willReturn(reader);
|
||||||
|
|
||||||
Settings settings = new Settings(dataFolder, resource, null, buildConfigurationData());
|
Settings settings = new Settings(dataFolder, resource, null, buildConfigurationData());
|
||||||
|
|
||||||
|
TestHelper.setupLogger();
|
||||||
|
|
||||||
Injector injector = new InjectorBuilder()
|
Injector injector = new InjectorBuilder()
|
||||||
.addDefaultHandlers("fr.xephi.authme")
|
.addDefaultHandlers("fr.xephi.authme")
|
||||||
.create();
|
.create();
|
||||||
@ -130,4 +127,20 @@ public class AuthMeInitializationTest {
|
|||||||
assertThat(injector.getIfAvailable(ProcessSyncPlayerLogin.class), not(nullValue()));
|
assertThat(injector.getIfAvailable(ProcessSyncPlayerLogin.class), not(nullValue()));
|
||||||
assertThat(injector.getIfAvailable(PurgeService.class), not(nullValue()));
|
assertThat(injector.getIfAvailable(PurgeService.class), not(nullValue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldHandlePrematureShutdownGracefully() {
|
||||||
|
// given
|
||||||
|
BukkitScheduler scheduler = mock(BukkitScheduler.class);
|
||||||
|
given(server.getScheduler()).willReturn(scheduler);
|
||||||
|
|
||||||
|
// Make sure ConsoleLogger has no logger reference since that may happen on unexpected stops
|
||||||
|
ReflectionTestUtils.setField(ConsoleLogger.class, null, "logger", null);
|
||||||
|
|
||||||
|
// when
|
||||||
|
authMe.onDisable();
|
||||||
|
|
||||||
|
// then - no exceptions
|
||||||
|
verify(scheduler).getActiveWorkers(); // via TaskCloser
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user