Merge pull request #138 from AuthMe-Team/565-skip-long-hash-tests

#565 Allow to skip extended encryption methods
This commit is contained in:
Gabriele C 2016-06-05 00:45:36 +02:00
commit ee23f7242b
2 changed files with 30 additions and 2 deletions

15
pom.xml
View File

@ -56,6 +56,7 @@
<!-- Output properties --> <!-- Output properties -->
<project.outputName>AuthMe</project.outputName> <project.outputName>AuthMe</project.outputName>
<project.buildNumber>CUSTOM</project.buildNumber> <project.buildNumber>CUSTOM</project.buildNumber>
<project.skipExtendedHashTests>false</project.skipExtendedHashTests>
<project.versionCode>${project.version}-b${project.buildNumber}</project.versionCode> <project.versionCode>${project.version}-b${project.buildNumber}</project.versionCode>
<project.finalName>${project.outputName}-${project.version}</project.finalName> <project.finalName>${project.outputName}-${project.version}</project.finalName>
@ -81,6 +82,17 @@
<project.buildNumber>${env.BUILD_NUMBER}</project.buildNumber> <project.buildNumber>${env.BUILD_NUMBER}</project.buildNumber>
</properties> </properties>
</profile> </profile>
<profile>
<id>skipLongHashTests</id>
<activation>
<property>
<name>skipLongHashTests</name>
</property>
</activation>
<properties>
<project.skipExtendedHashTests>true</project.skipExtendedHashTests>
</properties>
</profile>
</profiles> </profiles>
<build> <build>
@ -124,6 +136,9 @@
<version>2.19.1</version> <version>2.19.1</version>
<configuration> <configuration>
<argLine>-Dfile.encoding=${project.build.sourceEncoding} @{argLine}</argLine> <argLine>-Dfile.encoding=${project.build.sourceEncoding} @{argLine}</argLine>
<systemPropertyVariables>
<project.skipExtendedHashTests>${project.skipExtendedHashTests}</project.skipExtendedHashTests>
</systemPropertyVariables>
</configuration> </configuration>
</plugin> </plugin>
<!-- Libs Shading and Relocation --> <!-- Libs Shading and Relocation -->

View File

@ -12,6 +12,7 @@ import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeThat;
/** /**
* Test for implementations of {@link EncryptionMethod}. * Test for implementations of {@link EncryptionMethod}.
@ -36,6 +37,14 @@ public abstract class AbstractEncryptionMethodTest {
"asdfg:hjkl", "::test", "~#$#~~~#$#~", "d41d8cd98f00b204e9800998ecf427e", "asdfg:hjkl", "::test", "~#$#~~~#$#~", "d41d8cd98f00b204e9800998ecf427e",
"$2y$7a$da641e404b982ed" }; "$2y$7a$da641e404b982ed" };
/**
* Certain hash algorithms are slow by design, which has a considerable effect on these unit tests.
* Setting the property below to "true" will reduce the checks in these unit tests as to offer fast,
* partial tests during development.
*/
private static final boolean SKIP_LONG_TESTS =
"true".equals(System.getProperty("project.skipExtendedHashTests"));
/** The encryption method to test. */ /** The encryption method to test. */
private EncryptionMethod method; private EncryptionMethod method;
/** Map with the hashes against which the entries in GIVEN_PASSWORDS are tested. */ /** Map with the hashes against which the entries in GIVEN_PASSWORDS are tested. */
@ -79,8 +88,10 @@ public abstract class AbstractEncryptionMethodTest {
@Test @Test
public void testGivenPasswords() { public void testGivenPasswords() {
// Test all entries in GIVEN_PASSWORDS except the last one // Start with the 2nd to last password if we skip long tests
for (int i = 0; i < GIVEN_PASSWORDS.length - 1; ++i) { int start = SKIP_LONG_TESTS ? GIVEN_PASSWORDS.length - 2 : 0;
// Test entries in GIVEN_PASSWORDS except the last one
for (int i = start; i < GIVEN_PASSWORDS.length - 1; ++i) {
String password = GIVEN_PASSWORDS[i]; String password = GIVEN_PASSWORDS[i];
assertTrue("Hash for password '" + password + "' should match", assertTrue("Hash for password '" + password + "' should match",
doesGivenHashMatch(password, method)); doesGivenHashMatch(password, method));
@ -124,12 +135,14 @@ public abstract class AbstractEncryptionMethodTest {
assertFalse("Upper-case of '" + password + "' should not match generated hash '" + hash + "'", assertFalse("Upper-case of '" + password + "' should not match generated hash '" + hash + "'",
method.comparePassword(password.toUpperCase(), hashedPassword, USERNAME)); method.comparePassword(password.toUpperCase(), hashedPassword, USERNAME));
} }
assumeThat(SKIP_LONG_TESTS, equalTo(false));
} }
} }
/** Tests various strings to ensure that encryption methods don't rely on the hash's format too much. */ /** Tests various strings to ensure that encryption methods don't rely on the hash's format too much. */
@Test @Test
public void testMalformedHashes() { public void testMalformedHashes() {
assumeThat(SKIP_LONG_TESTS, equalTo(false));
String salt = method.hasSeparateSalt() ? "testSalt" : null; String salt = method.hasSeparateSalt() ? "testSalt" : null;
for (String bogusHash : BOGUS_HASHES) { for (String bogusHash : BOGUS_HASHES) {
HashedPassword hashedPwd = new HashedPassword(bogusHash, salt); HashedPassword hashedPwd = new HashedPassword(bogusHash, salt);