package de.jpaw.bonaparte.api.auth.tests; import java.util.Map; import java.util.UUID; import org.joda.time.Instant; import org.testng.Assert; import org.testng.annotations.Test; import de.jpaw.bonaparte.api.auth.JwtConverter; import de.jpaw.bonaparte.core.BonaparteJsonEscaper; import de.jpaw.bonaparte.pojos.api.OperationType; import de.jpaw.bonaparte.pojos.api.auth.JwtInfo; import de.jpaw.bonaparte.pojos.api.auth.JwtPayload; import de.jpaw.bonaparte.pojos.api.auth.Permissionset; import de.jpaw.bonaparte.pojos.api.auth.UserLogLevelType; import de.jpaw.bonaparte.util.ToStringHelper; public class JwtConverterTest { private JwtInfo createSampleInfo(Instant now, UUID sessionId) { // test one field per data type at least JwtInfo info = new JwtInfo(); info.setUserId("John"); info.setUserRef(4711L); info.setIssuedAt(now); info.setLogLevel(UserLogLevelType.REQUESTS); info.setPermissionsMax(Permissionset.of(OperationType.EXECUTE, OperationType.SEARCH)); info.setResource("B.test"); info.setResourceIsWildcard(Boolean.TRUE); info.setSessionId(sessionId); return info; } @Test public void testInfoToMap() throws Exception { Instant now = JwtConverter.lastFullSecond(); UUID sessionId = UUID.randomUUID(); // test one field per data type at least JwtInfo info = createSampleInfo(now, sessionId); Map<String, Object> jsonMap = JwtConverter.asMap(info); Assert.assertEquals(jsonMap.size(), 8); Assert.assertEquals(jsonMap.get("sub"), "John"); Assert.assertEquals(jsonMap.get("iat"), now); Assert.assertEquals(jsonMap.get("u"), Long.valueOf(4711L)); Assert.assertEquals(jsonMap.get("l"), UserLogLevelType.REQUESTS.ordinal()); Assert.assertEquals(jsonMap.get("pu"), Permissionset.of(OperationType.EXECUTE, OperationType.SEARCH).getBitmap()); Assert.assertEquals(jsonMap.get("w"), Boolean.TRUE); Assert.assertEquals(jsonMap.get("p"), "B.test"); Assert.assertEquals(jsonMap.get("o"), sessionId); // test the conversion back to the JwtInfo JwtPayload payload = JwtConverter.parsePayload(jsonMap); JwtInfo info2 = JwtConverter.parseJwtInfo(payload); System.out.println(ToStringHelper.toStringML(payload)); System.out.println(ToStringHelper.toStringML(info2)); Assert.assertEquals(info2, info); } @Test public void testInfoJson() { Instant now = JwtConverter.lastFullSecond(); UUID sessionId = UUID.randomUUID(); // test one field per data type at least JwtInfo info = createSampleInfo(now, sessionId); String json = BonaparteJsonEscaper.asJson(JwtConverter.asMap(info)); System.out.println(json); } }