浏览代码

Add Unit tests for org.linlinjava.litemall.core.util.bcrypt.BCrypt (#207)

These tests were written using Diffblue Cover
Dependencies required to run these tests have been added
John Bergqvist 6 年之前
父节点
当前提交
09ad661e68
共有 2 个文件被更改,包括 140 次插入0 次删除
  1. 121 0
      litemall-core/src/test/java/org/linlinjava/litemall/core/util/bcrypt/BCryptTest.java
  2. 19 0
      pom.xml

+ 121 - 0
litemall-core/src/test/java/org/linlinjava/litemall/core/util/bcrypt/BCryptTest.java

@@ -0,0 +1,121 @@
+package org.linlinjava.litemall.core.util.bcrypt;
+
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.junit.rules.Timeout;
+import org.junit.runner.RunWith;
+import org.linlinjava.litemall.core.util.bcrypt.BCrypt;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import java.security.SecureRandom;
+
+@RunWith(PowerMockRunner.class)
+public class BCryptTest {
+
+  @Rule public final ExpectedException thrown = ExpectedException.none();
+
+  @Test
+  public void testHashpwSaltIsNull() throws IllegalArgumentException {
+    thrown.expect(IllegalArgumentException.class);
+    BCrypt.hashpw("foo", null);
+  }
+
+  @Test
+  public void testHashpwSaltTooShort() throws IllegalArgumentException {
+    thrown.expect(IllegalArgumentException.class);
+    BCrypt.hashpw("foo", "foo");
+  }
+
+  @Test
+  public void testHashpwInvalidSaltVersion() throws IllegalArgumentException {
+    thrown.expect(IllegalArgumentException.class);
+    BCrypt.hashpw("foo", "+2a$10$.....................");  
+  }
+
+  @Test
+  public void testHashpwInvalidSaltVersion2() throws IllegalArgumentException {
+    thrown.expect(IllegalArgumentException.class);
+    BCrypt.hashpw("foo", "$1a$10$.....................");  
+  }
+
+  @Test
+  public void testHashpwInvalidSaltRevision() throws IllegalArgumentException {
+    thrown.expect(IllegalArgumentException.class);
+    BCrypt.hashpw("foo", "$2+$10$.....................");  
+  }
+
+  @Test
+  public void testHashpwInvalidSaltRevision2() throws IllegalArgumentException {
+    thrown.expect(IllegalArgumentException.class);
+    BCrypt.hashpw("foo", "$2a+10$.....................");  
+  }
+
+  @Test
+  public void testHashpwSaltTooShort2() throws IllegalArgumentException {
+    thrown.expect(IllegalArgumentException.class);
+    BCrypt.hashpw("foo", "$2a$10+.....................");      
+  }
+
+  @Test
+  public void testHashpwMissingSaltRounds() throws IllegalArgumentException {
+    thrown.expect(IllegalArgumentException.class);
+    BCrypt.hashpw("foo", "$2$a10$.....................");  
+  }
+
+  @Test
+  public void testHashpwTooLittleRounds() throws IllegalArgumentException {
+    thrown.expect(IllegalArgumentException.class);
+    BCrypt.hashpw("foo", "$2a$03$......................");
+  }
+
+  @Test
+  public void testHashpwTooManyRounds() throws IllegalArgumentException {
+    thrown.expect(IllegalArgumentException.class);
+    BCrypt.hashpw("foo", "$2a$32$......................");
+  }
+
+  @Test
+  public void testHashpw() {
+    Assert.assertEquals(
+        "$2a$10$......................0li5vIK0lccG/IXHAOP2wBncDW/oa2u",
+        BCrypt.hashpw("foo", "$2a$10$......................"));
+
+    Assert.assertEquals(
+        "$2$09$......................GlnmyWmDnFB.MnSSUnFsiPvHsC2KPBm",
+        BCrypt.hashpw("foo", "$2$09$......................"));
+  }
+
+  @PrepareForTest({BCrypt.class, SecureRandom.class})
+  @Test
+  public void testGensalt() {
+    PowerMockito.whenNew(SecureRandom.class).withNoArguments()
+        .thenReturn(PowerMockito.mock(SecureRandom.class));
+    Assert.assertEquals("$2a$10$......................", BCrypt.gensalt());
+    Assert.assertEquals("$2a$09$......................", BCrypt.gensalt(9));
+  }
+
+  @Test
+  public void testGensaltTooLittleRounds() throws IllegalArgumentException {
+    thrown.expect(IllegalArgumentException.class);
+    BCrypt.gensalt(3);
+  }
+
+  @Test
+  public void testGensaltTooManyRounds() throws IllegalArgumentException {
+    thrown.expect(IllegalArgumentException.class);
+    BCrypt.gensalt(32);
+  }
+
+  @Test
+  public void testCheckpw() {
+    Assert.assertFalse(BCrypt.checkpw("foo", "$2a$10$......................"));
+    
+    final String hashed = BCrypt.hashpw("foo", BCrypt.gensalt());
+    Assert.assertTrue(BCrypt.checkpw("foo", hashed));
+    Assert.assertFalse(BCrypt.checkpw("bar", hashed));
+  }
+}

+ 19 - 0
pom.xml

@@ -175,6 +175,25 @@
                 </exclusion>
             </exclusions>
         </dependency>
+
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-api-mockito</artifactId>
+            <version>1.6.6</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-module-junit4</artifactId>
+            <version>1.6.6</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <version>1.10.19</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>