mirror of
https://github.com/AuthMe/AuthMeReloaded.git
synced 2024-11-23 10:45:23 +01:00
#835 Implement reloading with external injector
This commit is contained in:
parent
9a91156000
commit
3334e2a160
@ -6,12 +6,15 @@ import fr.xephi.authme.ConsoleLogger;
|
|||||||
import fr.xephi.authme.command.CommandService;
|
import fr.xephi.authme.command.CommandService;
|
||||||
import fr.xephi.authme.command.ExecutableCommand;
|
import fr.xephi.authme.command.ExecutableCommand;
|
||||||
import fr.xephi.authme.datasource.DataSource;
|
import fr.xephi.authme.datasource.DataSource;
|
||||||
|
import fr.xephi.authme.initialization.Reloadable;
|
||||||
|
import fr.xephi.authme.initialization.SettingsDependent;
|
||||||
import fr.xephi.authme.output.MessageKey;
|
import fr.xephi.authme.output.MessageKey;
|
||||||
import fr.xephi.authme.settings.NewSetting;
|
import fr.xephi.authme.settings.NewSetting;
|
||||||
import fr.xephi.authme.settings.properties.DatabaseSettings;
|
import fr.xephi.authme.settings.properties.DatabaseSettings;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -44,7 +47,7 @@ public class ReloadCommand implements ExecutableCommand {
|
|||||||
ConsoleLogger.info("Note: cannot change database type during /authme reload");
|
ConsoleLogger.info("Note: cannot change database type during /authme reload");
|
||||||
sender.sendMessage("Note: cannot change database type during /authme reload");
|
sender.sendMessage("Note: cannot change database type during /authme reload");
|
||||||
}
|
}
|
||||||
// FIXME #835: Add replacement for injector.performReloadOnServices();
|
performReloadOnServices();
|
||||||
commandService.send(sender, MessageKey.CONFIG_RELOAD_SUCCESS);
|
commandService.send(sender, MessageKey.CONFIG_RELOAD_SUCCESS);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
sender.sendMessage("Error occurred during reload of AuthMe: aborting");
|
sender.sendMessage("Error occurred during reload of AuthMe: aborting");
|
||||||
@ -52,4 +55,16 @@ public class ReloadCommand implements ExecutableCommand {
|
|||||||
plugin.stopOrUnload();
|
plugin.stopOrUnload();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void performReloadOnServices() {
|
||||||
|
Collection<Reloadable> reloadables = injector.retrieveAllOfType(Reloadable.class);
|
||||||
|
for (Reloadable reloadable : reloadables) {
|
||||||
|
reloadable.reload();
|
||||||
|
}
|
||||||
|
|
||||||
|
Collection<SettingsDependent> settingsDependents = injector.retrieveAllOfType(SettingsDependent.class);
|
||||||
|
for (SettingsDependent dependent : settingsDependents) {
|
||||||
|
dependent.reload(settings);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,8 @@ import fr.xephi.authme.TestHelper;
|
|||||||
import fr.xephi.authme.command.CommandService;
|
import fr.xephi.authme.command.CommandService;
|
||||||
import fr.xephi.authme.datasource.DataSource;
|
import fr.xephi.authme.datasource.DataSource;
|
||||||
import fr.xephi.authme.datasource.DataSourceType;
|
import fr.xephi.authme.datasource.DataSourceType;
|
||||||
|
import fr.xephi.authme.initialization.Reloadable;
|
||||||
|
import fr.xephi.authme.initialization.SettingsDependent;
|
||||||
import fr.xephi.authme.output.MessageKey;
|
import fr.xephi.authme.output.MessageKey;
|
||||||
import fr.xephi.authme.settings.NewSetting;
|
import fr.xephi.authme.settings.NewSetting;
|
||||||
import fr.xephi.authme.settings.properties.DatabaseSettings;
|
import fr.xephi.authme.settings.properties.DatabaseSettings;
|
||||||
@ -19,13 +21,18 @@ import org.mockito.InjectMocks;
|
|||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.runners.MockitoJUnitRunner;
|
import org.mockito.runners.MockitoJUnitRunner;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import static org.hamcrest.Matchers.containsString;
|
import static org.hamcrest.Matchers.containsString;
|
||||||
import static org.mockito.BDDMockito.given;
|
import static org.mockito.BDDMockito.given;
|
||||||
|
import static org.mockito.Matchers.any;
|
||||||
import static org.mockito.Matchers.argThat;
|
import static org.mockito.Matchers.argThat;
|
||||||
import static org.mockito.Matchers.matches;
|
import static org.mockito.Mockito.doThrow;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -70,13 +77,19 @@ public class ReloadCommandTest {
|
|||||||
CommandSender sender = mock(CommandSender.class);
|
CommandSender sender = mock(CommandSender.class);
|
||||||
given(settings.getProperty(DatabaseSettings.BACKEND)).willReturn(DataSourceType.MYSQL);
|
given(settings.getProperty(DatabaseSettings.BACKEND)).willReturn(DataSourceType.MYSQL);
|
||||||
given(dataSource.getType()).willReturn(DataSourceType.MYSQL);
|
given(dataSource.getType()).willReturn(DataSourceType.MYSQL);
|
||||||
|
List<Reloadable> reloadables = Arrays.asList(
|
||||||
|
mock(Reloadable.class), mock(Reloadable.class), mock(Reloadable.class));
|
||||||
|
List<SettingsDependent> dependents = Arrays.asList(
|
||||||
|
mock(SettingsDependent.class), mock(SettingsDependent.class));
|
||||||
|
given(injector.retrieveAllOfType(Reloadable.class)).willReturn(reloadables);
|
||||||
|
given(injector.retrieveAllOfType(SettingsDependent.class)).willReturn(dependents);
|
||||||
|
|
||||||
// when
|
// when
|
||||||
command.executeCommand(sender, Collections.<String>emptyList());
|
command.executeCommand(sender, Collections.<String>emptyList());
|
||||||
|
|
||||||
// then
|
// then
|
||||||
verify(settings).reload();
|
verify(settings).reload();
|
||||||
// FIXME #835 verify(injector).performReloadOnServices();
|
verifyReloadingCalls(reloadables, dependents);
|
||||||
verify(commandService).send(sender, MessageKey.CONFIG_RELOAD_SUCCESS);
|
verify(commandService).send(sender, MessageKey.CONFIG_RELOAD_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,7 +97,7 @@ public class ReloadCommandTest {
|
|||||||
public void shouldHandleReloadError() {
|
public void shouldHandleReloadError() {
|
||||||
// given
|
// given
|
||||||
CommandSender sender = mock(CommandSender.class);
|
CommandSender sender = mock(CommandSender.class);
|
||||||
// FIXME #835 doThrow(IllegalStateException.class).when(injector).performReloadOnServices();
|
doThrow(IllegalStateException.class).when(injector).retrieveAllOfType(Reloadable.class);
|
||||||
given(settings.getProperty(DatabaseSettings.BACKEND)).willReturn(DataSourceType.MYSQL);
|
given(settings.getProperty(DatabaseSettings.BACKEND)).willReturn(DataSourceType.MYSQL);
|
||||||
given(dataSource.getType()).willReturn(DataSourceType.MYSQL);
|
given(dataSource.getType()).willReturn(DataSourceType.MYSQL);
|
||||||
|
|
||||||
@ -93,8 +106,8 @@ public class ReloadCommandTest {
|
|||||||
|
|
||||||
// then
|
// then
|
||||||
verify(settings).reload();
|
verify(settings).reload();
|
||||||
// FIXME #835 verify(injector).performReloadOnServices();
|
verify(injector).retrieveAllOfType(Reloadable.class);
|
||||||
verify(sender).sendMessage(matches("Error occurred.*"));
|
verify(sender).sendMessage(argThat(containsString("Error occurred")));
|
||||||
verify(authMe).stopOrUnload();
|
verify(authMe).stopOrUnload();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,13 +117,24 @@ public class ReloadCommandTest {
|
|||||||
CommandSender sender = mock(CommandSender.class);
|
CommandSender sender = mock(CommandSender.class);
|
||||||
given(settings.getProperty(DatabaseSettings.BACKEND)).willReturn(DataSourceType.MYSQL);
|
given(settings.getProperty(DatabaseSettings.BACKEND)).willReturn(DataSourceType.MYSQL);
|
||||||
given(dataSource.getType()).willReturn(DataSourceType.SQLITE);
|
given(dataSource.getType()).willReturn(DataSourceType.SQLITE);
|
||||||
|
given(injector.retrieveAllOfType(Reloadable.class)).willReturn(new ArrayList<Reloadable>());
|
||||||
|
given(injector.retrieveAllOfType(SettingsDependent.class)).willReturn(new ArrayList<SettingsDependent>());
|
||||||
|
|
||||||
// when
|
// when
|
||||||
command.executeCommand(sender, Collections.<String>emptyList());
|
command.executeCommand(sender, Collections.<String>emptyList());
|
||||||
|
|
||||||
// then
|
// then
|
||||||
verify(settings).reload();
|
verify(settings).reload();
|
||||||
// FIXME #835 verify(injector).performReloadOnServices();
|
verify(injector, times(2)).retrieveAllOfType(any(Class.class));
|
||||||
verify(sender).sendMessage(argThat(containsString("cannot change database type")));
|
verify(sender).sendMessage(argThat(containsString("cannot change database type")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void verifyReloadingCalls(List<Reloadable> reloadables, List<SettingsDependent> dependents) {
|
||||||
|
for (Reloadable reloadable : reloadables) {
|
||||||
|
verify(reloadable).reload();
|
||||||
|
}
|
||||||
|
for (SettingsDependent dependent : dependents) {
|
||||||
|
verify(dependent).reload(settings);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user