完善 SaSession 模块相关单元测试

This commit is contained in:
click33
2022-09-04 06:04:42 +08:00
parent 37b11972b3
commit 153785880d
6 changed files with 158 additions and 62 deletions

View File

@@ -7,6 +7,8 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
import cn.dev33.satoken.util.SaFoxUtil;
/** /**
* Sa-Token配置文件的构建工厂类 * Sa-Token配置文件的构建工厂类
* <p> * <p>
@@ -17,6 +19,9 @@ import java.util.Properties;
*/ */
public class SaTokenConfigFactory { public class SaTokenConfigFactory {
private SaTokenConfigFactory() {
}
/** /**
* 配置文件地址 * 配置文件地址
*/ */
@@ -101,7 +106,7 @@ public class SaTokenConfigFactory {
continue; continue;
} }
try { try {
Object valueConvert = getObjectByClass(value, field.getType()); Object valueConvert = SaFoxUtil.getValueByType(value, field.getType());
field.setAccessible(true); field.setAccessible(true);
field.set(obj, valueConvert); field.set(obj, valueConvert);
} catch (IllegalArgumentException | IllegalAccessException e) { } catch (IllegalArgumentException | IllegalAccessException e) {
@@ -111,36 +116,4 @@ public class SaTokenConfigFactory {
return obj; return obj;
} }
/**
* 工具方法: 将字符串转化为指定数据类型
*
* @param str 值
* @param cs 要转换的类型
* @return 转化好的结果
*/
@SuppressWarnings("unchecked")
private static <T> T getObjectByClass(String str, Class<T> cs) {
Object value;
if (str == null) {
value = null;
} else if (cs.equals(String.class)) {
value = str;
} else if (cs.equals(int.class) || cs.equals(Integer.class)) {
value = Integer.valueOf(str);
} else if (cs.equals(long.class) || cs.equals(Long.class)) {
value = Long.valueOf(str);
} else if (cs.equals(short.class) || cs.equals(Short.class)) {
value = Short.valueOf(str);
} else if (cs.equals(float.class) || cs.equals(Float.class)) {
value = Float.valueOf(str);
} else if (cs.equals(double.class) || cs.equals(Double.class)) {
value = Double.valueOf(str);
} else if (cs.equals(boolean.class) || cs.equals(Boolean.class)) {
value = Boolean.valueOf(str);
} else {
throw new RuntimeException("未能将值:" + str + ",转换类型为:" + cs, null);
}
return (T) value;
}
} }

View File

@@ -23,6 +23,9 @@ import cn.dev33.satoken.strategy.SaStrategy;
*/ */
public class SaSessionCustomUtil { public class SaSessionCustomUtil {
private SaSessionCustomUtil() {
}
/** /**
* 添加上指定前缀防止恶意伪造Session * 添加上指定前缀防止恶意伪造Session
*/ */

View File

@@ -86,6 +86,8 @@ public class SaTokenConfigTest {
SaCookieConfig scc = new SaCookieConfig(); SaCookieConfig scc = new SaCookieConfig();
config.setCookie(scc); config.setCookie(scc);
Assertions.assertEquals(config.getCookie(), scc); Assertions.assertEquals(config.getCookie(), scc);
config.toString();
} }
// 从文件读取 // 从文件读取

View File

@@ -0,0 +1,52 @@
package cn.dev33.satoken.core.session;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.session.SaSessionCustomUtil;
/**
* SaSession 测试
*
* @author kong
* @since: 2022-2-9
*/
public class SaSessionCustomUtilTest {
// 测试自定义Session
@Test
public void testCustomSession() {
SaTokenDao dao = SaManager.getSaTokenDao();
// 刚开始不存在
Assertions.assertFalse(SaSessionCustomUtil.isExists("art-1"));
SaSession session = dao.getSession("satoken:custom:session:" + "art-1");
Assertions.assertNull(session);
// 调用一下
SaSessionCustomUtil.getSessionById("art-1");
SaSessionCustomUtil.getSessionById("art-1", false);
// 就存在了
Assertions.assertTrue(SaSessionCustomUtil.isExists("art-1"));
SaSession session2 = dao.getSession("satoken:custom:session:" + "art-1");
Assertions.assertNotNull(session2);
// 给删除掉
SaSessionCustomUtil.deleteSessionById("art-1");
// 就又不存在了
Assertions.assertFalse(SaSessionCustomUtil.isExists("art-1"));
SaSession session3 = dao.getSession("satoken:custom:session:" + "art-1");
Assertions.assertNull(session3);
// 调用了也不会存在
SaSessionCustomUtil.getSessionById("art-4", false);
SaSession session4 = dao.getSession("satoken:custom:session:" + "art-2");
Assertions.assertNull(session4);
}
}

View File

@@ -1,9 +1,16 @@
package cn.dev33.satoken.core.session; package cn.dev33.satoken.core.session;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.session.SaSession; import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.session.TokenSign;
/** /**
* SaSession 测试 * SaSession 测试
@@ -13,12 +20,27 @@ import cn.dev33.satoken.session.SaSession;
*/ */
public class SaSessionTest { public class SaSessionTest {
// 基础属性
@Test @Test
public void test() { public void testProp() {
SaSession session = new SaSession("session-1001"); SaSession session = new SaSession("session-1001");
Assertions.assertEquals(session.getId(), "session-1001"); Assertions.assertEquals(session.getId(), "session-1001");
// 属性读取
session = new SaSession();
session.setId("session-1009");
Assertions.assertEquals(session.getId(), "session-1009");
session.setCreateTime(1662241013902L);
Assertions.assertEquals(session.getCreateTime(), 1662241013902L);
}
// 基础存取值
@Test
public void testSetGet() {
// 基础取值 // 基础取值
SaSession session = new SaSession("session-1002");
session.set("name", "zhangsan"); session.set("name", "zhangsan");
session.set("age", 18); session.set("age", 18);
Assertions.assertEquals(session.get("name"), "zhangsan"); Assertions.assertEquals(session.get("name"), "zhangsan");
@@ -26,6 +48,12 @@ public class SaSessionTest {
Assertions.assertEquals((int)session.get("age2", 20), 20); Assertions.assertEquals((int)session.get("age2", 20), 20);
Assertions.assertEquals(session.getModel("age", Double.class).getClass(), Double.class); Assertions.assertEquals(session.getModel("age", Double.class).getClass(), Double.class);
// 原本无值时才会写入
session.setByNull("name", "lisi");
Assertions.assertEquals(session.get("name"), "zhangsan");
session.setByNull("name2", "lisi");
Assertions.assertEquals(session.get("name2"), "lisi");
// 复杂取值 // 复杂取值
class User { class User {
String name; String name;
@@ -42,17 +70,81 @@ public class SaSessionTest {
Assertions.assertNotNull(user2); Assertions.assertNotNull(user2);
Assertions.assertEquals(user2.name, "zhangsan"); Assertions.assertEquals(user2.name, "zhangsan");
Assertions.assertEquals(user2.age, 18); Assertions.assertEquals(user2.age, 18);
}
// Token签名 // 测试有效期
@Test
public void testSessionTimeout() {
// 修改剩余有效期
SaSession session = new SaSession("session-1005");
SaManager.getSaTokenDao().setSession(session, 20000);
session.updateMaxTimeout(100);
Assertions.assertTrue(session.getTimeout() <= 100);
System.out.println(session.getTimeout());
// 仍然是 <=100
session.updateMaxTimeout(1000);
Assertions.assertTrue(session.getTimeout() <= 100);
System.out.println(session.getTimeout());
// Min 修改
session.updateMinTimeout(-1);
System.out.println(session.getTimeout());
Assertions.assertTrue(session.getTimeout() == -1);
}
// 测试token 签名
@Test
public void testTokenSign() {
SaSession session = new SaSession("session-1002");
// 添加 Token 签名
session.addTokenSign("xxxx-xxxx-xxxx-xxxx-1", "PC"); session.addTokenSign("xxxx-xxxx-xxxx-xxxx-1", "PC");
session.addTokenSign("xxxx-xxxx-xxxx-xxxx-2", "APP"); session.addTokenSign("xxxx-xxxx-xxxx-xxxx-2", "APP");
// 查询
Assertions.assertEquals(session.getTokenSignList().size(), 2); Assertions.assertEquals(session.getTokenSignList().size(), 2);
Assertions.assertEquals(session.getTokenSign("xxxx-xxxx-xxxx-xxxx-1").getDevice(), "PC"); Assertions.assertEquals(session.getTokenSign("xxxx-xxxx-xxxx-xxxx-1").getDevice(), "PC");
Assertions.assertEquals(session.getTokenSign("xxxx-xxxx-xxxx-xxxx-2").getDevice(), "APP"); Assertions.assertEquals(session.getTokenSign("xxxx-xxxx-xxxx-xxxx-2").getDevice(), "APP");
// 删除一个
session.removeTokenSign("xxxx-xxxx-xxxx-xxxx-1"); session.removeTokenSign("xxxx-xxxx-xxxx-xxxx-1");
Assertions.assertEquals(session.getTokenSignList().size(), 1); Assertions.assertEquals(session.getTokenSignList().size(), 1);
// 删除一个不存在的,则不影响 TokenSign 列表
session.removeTokenSign("xxxx-xxxx-xxxx-xxxx-999");
Assertions.assertEquals(session.getTokenSignList().size(), 1);
// 重置整个签名列表
List<TokenSign> list = Arrays.asList(
new TokenSign("xxxx-xxxx-xxxx-xxxx-1", "WEB"),
new TokenSign("xxxx-xxxx-xxxx-xxxx-2", "phone"),
new TokenSign("xxxx-xxxx-xxxx-xxxx-3", "ipad")
);
session.setTokenSignList(list);
Assertions.assertEquals(session.getTokenSignList().size(), 3);
Assertions.assertEquals(session.getTokenSign("xxxx-xxxx-xxxx-xxxx-1").getDevice(), "WEB");
Assertions.assertEquals(session.getTokenSign("xxxx-xxxx-xxxx-xxxx-2").getDevice(), "phone");
Assertions.assertEquals(session.getTokenSign("xxxx-xxxx-xxxx-xxxx-3").getDevice(), "ipad");
}
// 测试重置 DataMap
@Test
public void testDataMap() {
SaSession session = new SaSession("session-1003");
session.set("key1", "value1");
session.set("key2", "value2");
session.set("key3", "value3");
// 所有数据
Assertions.assertEquals(session.keys().size(), 3);
Assertions.assertEquals(session.getDataMap().size(), 3);
// 重置所有数据
Map<String, Object> dataMap = new ConcurrentHashMap<>();
dataMap.put("aaa", "111");
dataMap.put("bbb", "222");
session.refreshDataMap(dataMap);
Assertions.assertEquals(session.keys().size(), 2);
} }
} }

View File

@@ -17,7 +17,6 @@ import cn.dev33.satoken.exception.NotPermissionException;
import cn.dev33.satoken.exception.NotRoleException; import cn.dev33.satoken.exception.NotRoleException;
import cn.dev33.satoken.exception.NotSafeException; import cn.dev33.satoken.exception.NotSafeException;
import cn.dev33.satoken.session.SaSession; import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.session.SaSessionCustomUtil;
import cn.dev33.satoken.stp.SaLoginConfig; import cn.dev33.satoken.stp.SaLoginConfig;
import cn.dev33.satoken.stp.SaLoginModel; import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.StpLogic; import cn.dev33.satoken.stp.StpLogic;
@@ -315,31 +314,6 @@ public class BasicsTest {
Assertions.assertEquals(tokenSession.getId(), tokenSession2.getId()); Assertions.assertEquals(tokenSession.getId(), tokenSession2.getId());
} }
// 测试自定义Session
@Test
public void testCustomSession() {
// 刚开始不存在
Assertions.assertFalse(SaSessionCustomUtil.isExists("art-1"));
SaSession session = dao.getSession("satoken:custom:session:" + "art-1");
Assertions.assertNull(session);
// 调用一下
SaSessionCustomUtil.getSessionById("art-1");
// 就存在了
Assertions.assertTrue(SaSessionCustomUtil.isExists("art-1"));
SaSession session2 = dao.getSession("satoken:custom:session:" + "art-1");
Assertions.assertNotNull(session2);
// 给删除掉
SaSessionCustomUtil.deleteSessionById("art-1");
// 就又不存在了
Assertions.assertFalse(SaSessionCustomUtil.isExists("art-1"));
SaSession session3 = dao.getSession("satoken:custom:session:" + "art-1");
Assertions.assertNull(session3);
}
// 测试根据账号id踢人 // 测试根据账号id踢人
@Test @Test
public void kickoutByLoginId() { public void kickoutByLoginId() {