diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/PassEncryptUtil.java b/Plan/src/main/java/com/djrapitops/plan/utilities/PassEncryptUtil.java index 045cb71d0..8a162e971 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/PassEncryptUtil.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/PassEncryptUtil.java @@ -17,18 +17,18 @@ import java.security.spec.InvalidKeySpecException; */ public class PassEncryptUtil { - public static final String PBKDF2_ALGORITHM = "PBKDF2WithHmacSHA1"; + private static final String PBKDF2_ALGORITHM = "PBKDF2WithHmacSHA1"; // These constants may be changed without breaking existing hashes. - public static final int SALT_BYTE_SIZE = 24; - public static final int HASH_BYTE_SIZE = 18; - public static final int PBKDF2_ITERATIONS = 64000; + private static final int SALT_BYTE_SIZE = 24; + private static final int HASH_BYTE_SIZE = 18; + private static final int PBKDF2_ITERATIONS = 64000; // These constants define the encoding and may not be changed. - public static final int HASH_SECTIONS = 5; - public static final int HASH_ALGORITHM_INDEX = 0; - public static final int ITERATION_INDEX = 1; - public static final int HASH_SIZE_INDEX = 2; - public static final int SALT_INDEX = 3; - public static final int PBKDF2_INDEX = 4; + private static final int HASH_SECTIONS = 5; + private static final int HASH_ALGORITHM_INDEX = 0; + private static final int ITERATION_INDEX = 1; + private static final int HASH_SIZE_INDEX = 2; + private static final int SALT_INDEX = 3; + private static final int PBKDF2_INDEX = 4; /** * Constructor used to hide the public constructor @@ -41,7 +41,7 @@ public class PassEncryptUtil { return createHash(password.toCharArray()); } - public static String createHash(char[] password) throws CannotPerformOperationException { + private static String createHash(char[] password) throws CannotPerformOperationException { // Generate a random salt SecureRandom random = new SecureRandom(); byte[] salt = new byte[SALT_BYTE_SIZE]; @@ -63,7 +63,7 @@ public class PassEncryptUtil { return verifyPassword(password.toCharArray(), correctHash); } - public static boolean verifyPassword(char[] password, String correctHash) throws CannotPerformOperationException, InvalidHashException { + private static boolean verifyPassword(char[] password, String correctHash) throws CannotPerformOperationException, InvalidHashException { // Decode the hash into its parameters String[] params = correctHash.split(":"); if (params.length != HASH_SECTIONS) { diff --git a/Plan/test/test/java/main/java/com/djrapitops/plan/ServerVariableHolderTest.java b/Plan/test/test/java/main/java/com/djrapitops/plan/ServerVariableHolderTest.java new file mode 100644 index 000000000..4bcf1f196 --- /dev/null +++ b/Plan/test/test/java/main/java/com/djrapitops/plan/ServerVariableHolderTest.java @@ -0,0 +1,31 @@ +package test.java.main.java.com.djrapitops.plan; + +import main.java.com.djrapitops.plan.Plan; +import org.bukkit.plugin.java.JavaPlugin; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import test.java.utils.TestInit; + +import static junit.framework.TestCase.assertEquals; +import static junit.framework.TestCase.assertFalse; + +/** + * @author Fuzzlemann + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest(JavaPlugin.class) +public class ServerVariableHolderTest { + + @Test + public void testServerVariable() throws Exception { + TestInit.init(); + + boolean usingPaper = Plan.getInstance().getVariable().isUsingPaper(); + assertFalse(usingPaper); + + String ip = Plan.getInstance().getVariable().getIp(); + assertEquals(ip, "0.0.0.0"); + } +} diff --git a/Plan/test/test/java/main/java/com/djrapitops/plan/SettingsTest.java b/Plan/test/test/java/main/java/com/djrapitops/plan/SettingsTest.java index d0bf2470b..e591641df 100644 --- a/Plan/test/test/java/main/java/com/djrapitops/plan/SettingsTest.java +++ b/Plan/test/test/java/main/java/com/djrapitops/plan/SettingsTest.java @@ -18,6 +18,7 @@ import java.util.ArrayList; import java.util.List; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; /** @@ -27,47 +28,40 @@ import static org.junit.Assert.assertTrue; @PrepareForTest(JavaPlugin.class) public class SettingsTest { - /** - * - */ public SettingsTest() { } - /** - * - */ @Before public void setUp() throws Exception { TestInit.init(); } - /** - * - */ @Test public void testIsTrue() { assertTrue("Webserver supposed to be enabled by default", Settings.WEBSERVER_ENABLED.isTrue()); } - /** - * - */ + @Test + public void testIsTrue2() { + Settings gatherCommands = Settings.GATHERCOMMANDS; + + gatherCommands.setValue(false); + assertFalse(gatherCommands.isTrue()); + + gatherCommands.setValue(true); + assertTrue(gatherCommands.isTrue()); + } + @Test public void testToString() { assertEquals("sqlite", Settings.DB_TYPE.toString()); } - /** - * - */ @Test public void testGetNumber() { assertEquals(8804, Settings.WEBSERVER_PORT.getNumber()); } - /** - * - */ @Test public void testGetStringList() { List exp = new ArrayList<>(); @@ -76,9 +70,6 @@ public class SettingsTest { assertEquals(exp, result); } - /** - * - */ @Test public void testGetPath() { assertEquals("Settings.WebServer.Enabled", Settings.WEBSERVER_ENABLED.getPath()); diff --git a/Plan/test/test/java/main/java/com/djrapitops/plan/utilities/PassEncryptTest.java b/Plan/test/test/java/main/java/com/djrapitops/plan/utilities/PassEncryptTest.java new file mode 100644 index 000000000..0bff3b4eb --- /dev/null +++ b/Plan/test/test/java/main/java/com/djrapitops/plan/utilities/PassEncryptTest.java @@ -0,0 +1,59 @@ +package test.java.main.java.com.djrapitops.plan.utilities; + +import main.java.com.djrapitops.plan.utilities.PassEncryptUtil; +import org.junit.Before; +import org.junit.Test; +import test.java.utils.RandomData; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.IntStream; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +/** + * @author Fuzzlemann + */ +public class PassEncryptTest { + + private final List passwords = new ArrayList<>(); + private final Map passwordMap = new HashMap<>(); + + @Before + public void setUp() { + IntStream.range(0, 50).forEach(i -> passwords.add(RandomData.randomString(RandomData.randomInt(1, 100)))); + } + + @Before + @Test + public void testHashing() throws Exception { + for (String password : passwords) { + passwordMap.put(password, PassEncryptUtil.createHash(password)); + } + } + + @Test + public void testConsistency() throws Exception { + for (Map.Entry entry : passwordMap.entrySet()) { + String password = entry.getKey(); + String expHash = entry.getValue(); + + String secondHashRun = PassEncryptUtil.createHash(password); + + assertEquals(expHash, secondHashRun); + } + } + + @Test + public void testVerification() throws Exception { + for (Map.Entry entry : passwordMap.entrySet()) { + String password = entry.getKey(); + String hash = entry.getValue(); + + assertTrue(PassEncryptUtil.verifyPassword(password, hash)); + } + } +} diff --git a/Plan/test/test/java/utils/RandomData.java b/Plan/test/test/java/utils/RandomData.java index 35b3b42fc..33be947bb 100644 --- a/Plan/test/test/java/utils/RandomData.java +++ b/Plan/test/test/java/utils/RandomData.java @@ -15,11 +15,16 @@ import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; public class RandomData { private static final Random r = new Random(); + public static int randomInt(int rangeStart, int rangeEnd) { + return ThreadLocalRandom.current().nextInt(rangeStart, rangeEnd); + } + public static List randomUserData() { List test = new ArrayList<>(); for (int i = 0; i < 20; i++) {