Merge branch 'master' of https://github.com/AuthMe-Team/AuthMeReloaded into 411-forced-commands

This commit is contained in:
ljacqu
2016-11-22 22:05:13 +01:00
49 changed files with 357 additions and 277 deletions
@@ -19,8 +19,8 @@ import fr.xephi.authme.task.purge.PurgeService;
import org.bukkit.Bukkit;
import org.bukkit.Server;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.PluginLoader;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPluginLoader;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Rule;
@@ -34,7 +34,6 @@ import java.io.File;
import java.io.IOException;
import java.util.logging.Logger;
import static fr.xephi.authme.settings.TestSettingsMigrationServices.alwaysFulfilled;
import static fr.xephi.authme.settings.properties.AuthMeSettingsRetriever.buildConfigurationData;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.nullValue;
@@ -49,9 +48,6 @@ import static org.mockito.Mockito.mock;
@RunWith(MockitoJUnitRunner.class)
public class AuthMeInitializationTest {
@Mock
private PluginLoader pluginLoader;
@Mock
private Server server;
@@ -60,7 +56,6 @@ public class AuthMeInitializationTest {
private AuthMe authMe;
private File dataFolder;
private File settingsFile;
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -73,7 +68,8 @@ public class AuthMeInitializationTest {
@Before
public void initAuthMe() throws IOException {
dataFolder = temporaryFolder.newFolder();
settingsFile = new File(dataFolder, "config.yml");
File settingsFile = new File(dataFolder, "config.yml");
JavaPluginLoader pluginLoader = new JavaPluginLoader(server);
Files.copy(TestHelper.getJarFile(TestHelper.PROJECT_ROOT + "config.test.yml"), settingsFile);
// Mock / wire various Bukkit components
@@ -86,14 +82,14 @@ public class AuthMeInitializationTest {
"AuthMe", "N/A", AuthMe.class.getCanonicalName());
// Initialize AuthMe
authMe = new AuthMe(pluginLoader, server, descriptionFile, dataFolder, null);
authMe = new AuthMe(pluginLoader, descriptionFile, dataFolder, null);
}
@Test
public void shouldInitializeAllServices() {
// given
Settings settings =
new Settings(dataFolder, mock(PropertyResource.class), alwaysFulfilled(), buildConfigurationData());
new Settings(dataFolder, mock(PropertyResource.class), null, buildConfigurationData());
Injector injector = new InjectorBuilder().addDefaultHandlers("fr.xephi.authme").create();
injector.provide(DataFolder.class, dataFolder);
@@ -0,0 +1,30 @@
package fr.xephi.authme.listener;
import org.bukkit.event.entity.EntityAirChangeEvent;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import static fr.xephi.authme.listener.EventCancelVerifier.withServiceMock;
/**
* Test for {@link PlayerListener111}.
*/
@RunWith(MockitoJUnitRunner.class)
public class PlayerListener111Test {
@InjectMocks
private PlayerListener111 listener;
@Mock
private ListenerService listenerService;
@Test
public void shouldCancelEvent() {
withServiceMock(listenerService)
.check(listener::onPlayerAirChange, EntityAirChangeEvent.class);
}
}
@@ -23,15 +23,15 @@ public class PermissionsSystemTypeTest {
List<String> pluginNames = new ArrayList<>(PermissionsSystemType.values().length);
for (PermissionsSystemType system : PermissionsSystemType.values()) {
assertThat("Name for enum entry '" + system + "' is not null",
system.getName(), not(nullValue()));
assertThat("Display name for enum entry '" + system + "' is not null",
system.getDisplayName(), not(nullValue()));
assertThat("Plugin name for enum entry '" + system + "' is not null",
system.getPluginName(), not(nullValue()));
assertThat("Only one enum entry has name '" + system.getName() + "'",
names, not(hasItem(system.getName())));
assertThat("Only one enum entry has display name '" + system.getDisplayName() + "'",
names, not(hasItem(system.getDisplayName())));
assertThat("Only one enum entry has plugin name '" + system.getPluginName() + "'",
pluginNames, not(hasItem(system.getPluginName())));
names.add(system.getName());
names.add(system.getDisplayName());
pluginNames.add(system.getPluginName());
}
}
@@ -26,8 +26,10 @@ import org.mockito.stubbing.Answer;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Sets.newHashSet;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.equalToIgnoringCase;
import static org.junit.Assert.assertThat;
@@ -173,7 +175,7 @@ public class PasswordSecurityTest {
given(method.comparePassword(clearTextPass, password, playerLowerCase)).willReturn(false);
given(method.computeHash(clearTextPass, playerLowerCase)).willReturn(newPassword);
initSettings(HashAlgorithm.MD5);
given(settings.getProperty(SecuritySettings.LEGACY_HASHES)).willReturn(newArrayList(HashAlgorithm.BCRYPT));
given(settings.getProperty(SecuritySettings.LEGACY_HASHES)).willReturn(newArrayList(HashAlgorithm.BCRYPT.name()));
PasswordSecurity security = newPasswordSecurity();
// when
@@ -258,7 +260,7 @@ public class PasswordSecurityTest {
initSettings(HashAlgorithm.BCRYPT);
PasswordSecurity passwordSecurity = newPasswordSecurity();
given(settings.getProperty(SecuritySettings.PASSWORD_HASH)).willReturn(HashAlgorithm.MD5);
List<HashAlgorithm> legacyHashes = newArrayList(HashAlgorithm.CUSTOM, HashAlgorithm.BCRYPT);
List<String> legacyHashes = newArrayList(HashAlgorithm.CUSTOM.name(), HashAlgorithm.BCRYPT.name());
given(settings.getProperty(SecuritySettings.LEGACY_HASHES)).willReturn(legacyHashes);
// when
@@ -267,8 +269,9 @@ public class PasswordSecurityTest {
// then
assertThat(ReflectionTestUtils.getFieldValue(PasswordSecurity.class, passwordSecurity, "algorithm"),
equalTo(HashAlgorithm.MD5));
Set<HashAlgorithm> legacyHashesSet = newHashSet(HashAlgorithm.CUSTOM, HashAlgorithm.BCRYPT);
assertThat(ReflectionTestUtils.getFieldValue(PasswordSecurity.class, passwordSecurity, "legacyAlgorithms"),
equalTo(legacyHashes));
equalTo(legacyHashesSet));
}
private PasswordSecurity newPasswordSecurity() {
@@ -121,8 +121,7 @@ public class SettingsIntegrationTest {
// given
File configFile = temporaryFolder.newFile();
PropertyResource resource = new YamlFileResource(configFile);
Settings settings = new Settings(testPluginFolder, resource,
TestSettingsMigrationServices.alwaysFulfilled(), CONFIG_DATA);
Settings settings = new Settings(testPluginFolder, resource, null, CONFIG_DATA);
// when
assertThat(settings.getProperty(TestConfiguration.RATIO_ORDER), equalTo(TestEnum.SECOND)); // default value
@@ -55,8 +55,7 @@ public class SettingsTest {
PropertyResource resource = mock(PropertyResource.class);
given(resource.getBoolean(RegistrationSettings.USE_WELCOME_MESSAGE.getPath())).willReturn(true);
Settings settings = new Settings(testPluginFolder, resource,
TestSettingsMigrationServices.alwaysFulfilled(), CONFIG_DATA);
Settings settings = new Settings(testPluginFolder, resource, null, CONFIG_DATA);
// when
String[] result = settings.getWelcomeMessage();
@@ -75,8 +74,7 @@ public class SettingsTest {
Files.write(emailFile.toPath(), emailMessage.getBytes());
PropertyResource resource = mock(PropertyResource.class);
Settings settings = new Settings(testPluginFolder, resource,
TestSettingsMigrationServices.alwaysFulfilled(), CONFIG_DATA);
Settings settings = new Settings(testPluginFolder, resource, null, CONFIG_DATA);
// when
String result = settings.getPasswordEmailMessage();
@@ -1,21 +0,0 @@
package fr.xephi.authme.settings;
import com.github.authme.configme.migration.MigrationService;
/**
* Provides {@link MigrationService} implementations for testing.
*/
public final class TestSettingsMigrationServices {
private TestSettingsMigrationServices() {
}
/**
* Returns a settings migration service which always answers that all data is up-to-date.
*
* @return test settings migration service
*/
public static MigrationService alwaysFulfilled() {
return (propertyResource, knownProperties) -> false;
}
}
@@ -124,6 +124,27 @@ public class PurgeTaskTest {
assertRanPurgeWithNames("foxtrot");
}
/**
* #1008: OfflinePlayer#getName may return null.
*/
@Test
public void shouldHandleOfflinePlayerWithNullName() {
// given
Set<String> names = newHashSet("name1", "name2");
OfflinePlayer[] players = asArray(
mockOfflinePlayer(null, false), mockOfflinePlayer("charlie", false), mockOfflinePlayer("name1", false));
reset(purgeService, permissionsManager);
setPermissionsBehavior();
PurgeTask task = new PurgeTask(purgeService, permissionsManager, null, names, players);
// when
task.run();
// then
assertRanPurgeWithPlayers(players[2]);
}
@Test
public void shouldStopTaskAndInformSenderUponCompletion() {
// given