add test case

This commit is contained in:
zhou-hao
2017-11-28 16:11:57 +08:00
parent a7f457a5f2
commit 515ff52ee1
4 changed files with 185 additions and 49 deletions

View File

@@ -86,10 +86,17 @@ public class SimpleAuthenticationBuilder implements AuthenticationBuilder {
JSONObject jsonObject = jsonArray.getJSONObject(0);
SimplePermission permission = new SimplePermission();
permission.setId(jsonObject.getString("id"));
permission.setActions(new HashSet<>(jsonObject.getJSONArray("actions").toJavaList(String.class)));
permission.setDataAccesses(jsonObject.getJSONArray("dataAccesses").stream().map(JSONObject.class::cast)
.map(dataJson -> dataBuilderFactory.create().fromJson(dataJson.toJSONString()).build())
.collect(Collectors.toSet()));
JSONArray actions = jsonObject.getJSONArray("actions");
if (actions != null) {
permission.setActions(new HashSet<>(actions.toJavaList(String.class)));
}
JSONArray dataAccess = jsonObject.getJSONArray("dataAccesses");
if (null != dataAccess) {
permission.setDataAccesses(dataAccess.stream().map(JSONObject.class::cast)
.map(dataJson -> dataBuilderFactory.create().fromJson(dataJson.toJSONString()).build())
.collect(Collectors.toSet()));
}
permissions.add(permission);
}
authentication.setPermissions(permissions);

View File

@@ -0,0 +1,82 @@
package org.hswebframework.web.authorization;
import org.hswebframework.web.authorization.builder.AuthenticationBuilder;
import org.hswebframework.web.authorization.exception.UnAuthorizedException;
import org.hswebframework.web.authorization.simple.builder.SimpleAuthenticationBuilder;
import org.hswebframework.web.authorization.simple.builder.SimpleDataAccessConfigBuilderFactory;
import org.hswebframework.web.authorization.token.*;
import org.junit.Assert;
import org.junit.Test;
import static org.junit.Assert.*;
public class AuthenticationTests {
private AuthenticationBuilder builder = new SimpleAuthenticationBuilder(new SimpleDataAccessConfigBuilderFactory());
/**
* 测试初始化基本的权限信息
*/
@Test
public void testInitUserRoleAndPermission() {
Authentication authentication = builder.user("{\"id\":\"admin\",\"username\":\"admin\",\"name\":\"Administrator\",\"type\":\"default\"}")
.role("[{\"id\":\"admin-role\",\"name\":\"admin\"}]")
.permission("[{\"id\":\"user-manager\",\"actions\":[\"GET\",\"UPDATE\"]}]")
.build();
//test user
assertEquals(authentication.getUser().getId(), "admin");
assertEquals(authentication.getUser().getUsername(), "admin");
assertEquals(authentication.getUser().getName(), "Administrator");
assertEquals(authentication.getUser().getType(), "default");
//test role
assertNotNull(authentication.getRole("admin-role").orElse(null));
assertEquals(authentication.getRole("admin-role").orElse(null).getName(), "admin");
assertTrue(authentication.hasRole("admin-role"));
//test permission
assertEquals(authentication.getPermissions().size(), 1);
assertTrue(authentication.hasPermission("user-manager"));
assertTrue(authentication.hasPermission("user-manager", "GET"));
assertTrue(!authentication.hasPermission("user-manager", "DELETE"));
}
/**
* 测试设置获取当前登录用户
*/
@Test
public void testGetSetCurrentUser() {
Authentication authentication = builder.user("{\"id\":\"admin\",\"username\":\"admin\",\"name\":\"Administrator\",\"type\":\"default\"}")
.build();
//初始化权限管理器,用于获取用户的权限信息
AuthenticationManager authenticationManager = new AuthenticationManager() {
@Override
public Authentication getByUserId(String userId) {
if (userId.equals("admin")) {
return authentication;
}
return null;
}
@Override
public Authentication sync(Authentication authentication) {
return authentication;
}
};
AuthenticationHolder.addSupplier(new UserTokenAuthenticationSupplier(authenticationManager));
//绑定用户token
UserTokenManager userTokenManager = new DefaultUserTokenManager();
UserToken token = userTokenManager.signIn("test", "token-test", "admin", -1);
UserTokenHolder.setCurrent(token);
//获取当前登录用户
Authentication current = Authentication.current().orElseThrow(UnAuthorizedException::new);
Assert.assertEquals(current.getUser().getId(), "admin");
}
}

View File

@@ -0,0 +1,92 @@
package org.hswebframework.web.authorization;
import org.hswebframework.web.authorization.exception.AccessDenyException;
import org.hswebframework.web.authorization.token.*;
import org.junit.Assert;
import org.junit.Test;
public class UserTokenManagerTests {
/**
* 基本功能测试
* @throws InterruptedException Thread.sleep error
*/
@Test
public void testDefaultSetting() throws InterruptedException {
DefaultUserTokenManager userTokenManager = new DefaultUserTokenManager();
userTokenManager.setAllopatricLoginMode(AllopatricLoginMode.allow); //允许异地登录
UserToken userToken = userTokenManager.signIn("test", "sessionId", "admin", 1000);
Assert.assertNotNull(userToken);
//可重复登录
userTokenManager.signIn("test2", "sessionId", "admin", 30000);
Assert.assertEquals(userTokenManager.totalToken(), 2); //2个token
Assert.assertEquals(userTokenManager.totalUser(), 1);//1个用户
//改变token状态
userTokenManager.changeUserState("admin", TokenState.deny);
userToken = userTokenManager.getByToken(userToken.getToken());
Assert.assertEquals(userToken.getState(), TokenState.deny);
userTokenManager.changeUserState("admin", TokenState.effective);
Thread.sleep(1200);
userToken = userTokenManager.getByToken(userToken.getToken());
Assert.assertTrue(userToken.isExpired());
userTokenManager.checkExpiredToken();
userToken = userTokenManager.getByToken(userToken.getToken());
Assert.assertTrue(userToken == null);
Assert.assertEquals(userTokenManager.totalToken(), 1);
Assert.assertEquals(userTokenManager.totalUser(), 1);
}
/**
* 测试异地登录模式之禁止登录
*/
@Test
public void testDeny() throws InterruptedException {
DefaultUserTokenManager userTokenManager = new DefaultUserTokenManager();
userTokenManager.setAllopatricLoginMode(AllopatricLoginMode.deny);//如果在其他地方登录,本地禁止登录
userTokenManager.signIn("test", "sessionId", "admin", 10000);
try {
userTokenManager.signIn("test2", "sessionId", "admin", 30000);
Assert.assertTrue(false);
} catch (AccessDenyException e) {
}
Assert.assertTrue(userTokenManager.getByToken("test").isEffective());
Assert.assertTrue(userTokenManager.getByToken("test2")==null);
}
/**
* 测试异地登录模式之踢下线
*/
@Test
public void testOffline() {
DefaultUserTokenManager userTokenManager = new DefaultUserTokenManager();
userTokenManager.setAllopatricLoginMode(AllopatricLoginMode.offlineOther); //将其他地方登录的用户踢下线
userTokenManager.signIn("test", "sessionId", "admin", 1000);
userTokenManager.signIn("test2", "sessionId", "admin", 30000);
Assert.assertTrue(userTokenManager.getByToken("test2").isEffective());
Assert.assertTrue(userTokenManager.getByToken("test").isOffline());
}
}

View File

@@ -1,45 +0,0 @@
package org.hswebframework.web.authorization;
import org.hswebframework.web.authorization.token.DefaultUserTokenManager;
import org.hswebframework.web.authorization.token.TokenState;
import org.hswebframework.web.authorization.token.UserToken;
import org.hswebframework.web.authorization.token.UserTokenManager;
import org.junit.Assert;
import org.junit.Test;
public class UserTokenManagerTests {
protected UserTokenManager userTokenManager = new DefaultUserTokenManager();
public void setUserTokenManager(UserTokenManager userTokenManager) {
this.userTokenManager = userTokenManager;
}
@Test
public void simpleTest() throws InterruptedException {
UserToken userToken = userTokenManager.signIn("test", "sessionId", "admin", 1000);
Assert.assertNotNull(userToken);
userTokenManager.changeUserState("admin", TokenState.deny);
userToken = userTokenManager.getByToken(userToken.getToken());
Assert.assertEquals(userToken.getState(), TokenState.deny);
userTokenManager.changeUserState("admin", TokenState.effective);
Thread.sleep(1200);
userToken = userTokenManager.getByToken(userToken.getToken());
Assert.assertTrue(userToken.isExpired());
userTokenManager.checkExpiredToken();
userToken = userTokenManager.getByToken(userToken.getToken());
Assert.assertTrue(userToken == null);
}
}