#762 Clear all stored sessions if feature gets disabled on reload

This commit is contained in:
ljacqu 2016-07-15 19:47:42 +02:00
parent 3b06524796
commit 674a051586
2 changed files with 30 additions and 2 deletions

View File

@ -66,6 +66,12 @@ public class SessionManager implements SettingsDependent {
@Override
public void reload(NewSetting settings) {
timeoutInMinutes = settings.getProperty(PluginSettings.SESSIONS_TIMEOUT);
boolean oldEnabled = enabled;
enabled = timeoutInMinutes > 0 && settings.getProperty(PluginSettings.SESSIONS_ENABLED);
// With this reload, the sessions feature has just been disabled, so clear all stored sessions
if (oldEnabled && !enabled) {
sessions.clear();
}
}
}

View File

@ -9,6 +9,7 @@ import org.mockito.runners.MockitoJUnitRunner;
import java.util.Map;
import static org.hamcrest.Matchers.anEmptyMap;
import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertThat;
import static org.mockito.BDDMockito.given;
@ -96,8 +97,7 @@ public class SessionManagerTest {
NewSetting settings = mockSettings(true, timeout);
String player = "patrick";
SessionManager manager = new SessionManager(settings);
Map<String, Long> sessions = (Map<String, Long>) ReflectionTestUtils
.getFieldValue(SessionManager.class, manager, "sessions");
Map<String, Long> sessions = getSessionsMap(manager);
// Add session entry for player that just has expired
sessions.put(player, System.currentTimeMillis() - 1000);
@ -108,6 +108,28 @@ public class SessionManagerTest {
assertThat(result, equalTo(false));
}
@Test
public void shouldClearAllSessionsAfterDisable() {
// given
NewSetting settings = mockSettings(true, 10);
SessionManager manager = new SessionManager(settings);
manager.addSession("player01");
manager.addSession("player02");
// when
manager.reload(mockSettings(false, 20));
// then
assertThat(getSessionsMap(manager), anEmptyMap());
}
@SuppressWarnings("unchecked")
private static Map<String, Long> getSessionsMap(SessionManager manager) {
return (Map<String, Long>) ReflectionTestUtils
.getFieldValue(SessionManager.class, manager, "sessions");
}
private static NewSetting mockSettings(boolean isEnabled, int sessionTimeout) {
NewSetting settings = mock(NewSetting.class);
given(settings.getProperty(PluginSettings.SESSIONS_ENABLED)).willReturn(isEnabled);