Skip to content

Add unit tests for TokenUtils #24

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CODE_COVERAGE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Code Coverage Report generation

To generate the code coverage report, execute the following command:
> mvn clean verify

This will generate code coverage report in target folder. In order to view the same, open the following file in your browser.
> target/site/cobertura/index.html
42 changes: 42 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
<org.hsqldb.version>2.3.2</org.hsqldb.version>
<commons-dbcp.version>1.4</commons-dbcp.version>
<junit.version>4.11</junit.version>
<powermockito.version>1.6.2</powermockito.version>
<org.eclipse.jetty.jetty-maven-plugin.version>9.1.1.v20140108</org.eclipse.jetty.jetty-maven-plugin.version>
</properties>

Expand All @@ -41,6 +42,33 @@

<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.6</version>
<configuration>
<check>
true
</check>
<formats>
<format>html</format>
<format>xml</format>
</formats>
<outputDirectory>${project.build.directory}/site/cobertura</outputDirectory>
<instrumentation>
<ignoreTrivial>true</ignoreTrivial>
</instrumentation>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>cobertura</goal>
</goals>
</execution>
</executions>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
Expand Down Expand Up @@ -184,6 +212,20 @@
<version>${junit.version}</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>${powermockito.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>${powermockito.version}</version>
<scope>test</scope>
</dependency>

</dependencies>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package net.dontdrinkandroot.example.angularrestspringsecurity.rest;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.springframework.security.core.userdetails.UserDetails;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

@RunWith(PowerMockRunner.class)
@PrepareForTest({TokenUtils.class, MessageDigest.class})
public class TokenUtilsTest {

private UserDetails userDetails;

private UserDetails secondUser;

@Before
public void setup() {
//mocking the system class to generate a constant time always
PowerMockito.mockStatic(System.class);
PowerMockito.when(System.currentTimeMillis()).thenReturn(1453210000000L);

//mocking the userdetails to retuen provided username and password
userDetails = Mockito.mock(UserDetails.class);
Mockito.when(userDetails.getUsername()).thenReturn("Tom");
Mockito.when(userDetails.getPassword()).thenReturn("pass");

secondUser = Mockito.mock(UserDetails.class);
Mockito.when(secondUser.getUsername()).thenReturn("Peter");
Mockito.when(secondUser.getPassword()).thenReturn("password");
}

@Test
public void testCreateToken() throws Exception {
//when
String token = TokenUtils.createToken(userDetails);

//then
assertEquals("Tom:1453213600000:3b9a243b4c39e7da5f3b8de187c25a36", token);
}

@Test
public void testComputeSignature() throws Exception {
//when
String signature = TokenUtils.computeSignature(userDetails, 1000);

//then
assertEquals("e3a0186e2fe21128fb94f9ee5c97ac4a", signature);
}

@Test
public void testComputeSignature_ForExceptionScenario() throws Exception {
//given
PowerMockito.mockStatic(MessageDigest.class);
PowerMockito.doThrow(new NoSuchAlgorithmException()).when(MessageDigest.class);
MessageDigest.getInstance("MD5");

try {
//when
TokenUtils.computeSignature(userDetails, 1000);

//then
fail("an IllegalArgument Exception ust have already occurred");
} catch (IllegalStateException ex) {

//then
assertEquals("No MD5 algorithm available!", ex.getMessage());
}
}

@Test
public void testGetUserNameFromToken() throws Exception {
//when
String username = TokenUtils.getUserNameFromToken("Tom:1453273439335:68dcf777ddbaed7b1cecfb0034ec9155");

//then
assertEquals("Tom", username);
}

@Test
public void testGetUserNameFromToken_forNullToken() throws Exception {
//when
String username = TokenUtils.getUserNameFromToken(null);

//then
assertEquals(null, username);
}

@Test
public void testValidateToken() throws Exception {

assertTrue(TokenUtils.validateToken("Tom:1453273439335:68dcf777ddbaed7b1cecfb0034ec9155", userDetails));

assertFalse(TokenUtils.validateToken("Tom:1453273439335:68dcf777ddbaed7b1cecfb0034ec9155", secondUser));
}

@Test
public void testValidateToken_forExpiredOnes() throws Exception {
//given
String twoHourOneMilliOldToken = "Tom:1453209999999:68dcf777ddbaed7b1cecfb0034ec9155";

//then
assertFalse(TokenUtils.validateToken(twoHourOneMilliOldToken, userDetails));
}
}