issue #69 添加Session的支持,添加测试用例
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package me.chanjar.weixin.mp.api;
|
||||
|
||||
import me.chanjar.weixin.common.api.WxConsts;
|
||||
import me.chanjar.weixin.common.session.StandardSessionManager;
|
||||
import me.chanjar.weixin.common.session.WxSessionManager;
|
||||
import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
|
||||
import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage;
|
||||
@@ -159,4 +160,136 @@ public class WxMpMessageRouterTest {
|
||||
|
||||
}
|
||||
|
||||
@DataProvider
|
||||
public Object[][] standardSessionManager() {
|
||||
|
||||
// 故意把session存活时间变短,清理更频繁
|
||||
StandardSessionManager ism = new StandardSessionManager();
|
||||
ism.setMaxInactiveInterval(1);
|
||||
ism.setProcessExpiresFrequency(1);
|
||||
ism.setBackgroundProcessorDelay(1);
|
||||
|
||||
return new Object[][] {
|
||||
new Object[] { ism }
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@Test(dataProvider = "standardSessionManager")
|
||||
public void testSessionClean1(StandardSessionManager ism) throws InterruptedException {
|
||||
|
||||
// 两个同步请求,看是否处理完毕后会被清理掉
|
||||
final WxMpMessageRouter router = new WxMpMessageRouter(null);
|
||||
router.setSessionManager(ism);
|
||||
router
|
||||
.rule().async(false).handler(new WxSessionMessageHandler()).next()
|
||||
.rule().async(false).handler(new WxSessionMessageHandler()).end();
|
||||
|
||||
WxMpXmlMessage msg = new WxMpXmlMessage();
|
||||
msg.setFromUserName("abc");
|
||||
router.route(msg);
|
||||
|
||||
Thread.sleep(2000l);
|
||||
Assert.assertEquals(ism.getActiveSessions(), 0);
|
||||
|
||||
}
|
||||
|
||||
@Test(dataProvider = "standardSessionManager")
|
||||
public void testSessionClean2(StandardSessionManager ism) throws InterruptedException {
|
||||
|
||||
// 1个同步,1个异步请求,看是否处理完毕后会被清理掉
|
||||
{
|
||||
final WxMpMessageRouter router = new WxMpMessageRouter(null);
|
||||
router.setSessionManager(ism);
|
||||
router
|
||||
.rule().async(false).handler(new WxSessionMessageHandler()).next()
|
||||
.rule().async(true).handler(new WxSessionMessageHandler()).end();
|
||||
|
||||
WxMpXmlMessage msg = new WxMpXmlMessage();
|
||||
msg.setFromUserName("abc");
|
||||
router.route(msg);
|
||||
|
||||
Thread.sleep(2000l);
|
||||
Assert.assertEquals(ism.getActiveSessions(), 0);
|
||||
}
|
||||
{
|
||||
final WxMpMessageRouter router = new WxMpMessageRouter(null);
|
||||
router.setSessionManager(ism);
|
||||
router
|
||||
.rule().async(true).handler(new WxSessionMessageHandler()).next()
|
||||
.rule().async(false).handler(new WxSessionMessageHandler()).end();
|
||||
|
||||
WxMpXmlMessage msg = new WxMpXmlMessage();
|
||||
msg.setFromUserName("abc");
|
||||
router.route(msg);
|
||||
|
||||
Thread.sleep(2000l);
|
||||
Assert.assertEquals(ism.getActiveSessions(), 0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Test(dataProvider = "standardSessionManager")
|
||||
public void testSessionClean3(StandardSessionManager ism) throws InterruptedException {
|
||||
|
||||
// 2个异步请求,看是否处理完毕后会被清理掉
|
||||
final WxMpMessageRouter router = new WxMpMessageRouter(null);
|
||||
router.setSessionManager(ism);
|
||||
router
|
||||
.rule().async(true).handler(new WxSessionMessageHandler()).next()
|
||||
.rule().async(true).handler(new WxSessionMessageHandler()).end();
|
||||
|
||||
WxMpXmlMessage msg = new WxMpXmlMessage();
|
||||
msg.setFromUserName("abc");
|
||||
router.route(msg);
|
||||
|
||||
Thread.sleep(2000l);
|
||||
Assert.assertEquals(ism.getActiveSessions(), 0);
|
||||
|
||||
}
|
||||
|
||||
@Test(dataProvider = "standardSessionManager")
|
||||
public void testSessionClean4(StandardSessionManager ism) throws InterruptedException {
|
||||
|
||||
// 一个同步请求,看是否处理完毕后会被清理掉
|
||||
{
|
||||
final WxMpMessageRouter router = new WxMpMessageRouter(null);
|
||||
router.setSessionManager(ism);
|
||||
router
|
||||
.rule().async(false).handler(new WxSessionMessageHandler()).end();
|
||||
|
||||
WxMpXmlMessage msg = new WxMpXmlMessage();
|
||||
msg.setFromUserName("abc");
|
||||
router.route(msg);
|
||||
|
||||
Thread.sleep(2000l);
|
||||
Assert.assertEquals(ism.getActiveSessions(), 0);
|
||||
}
|
||||
|
||||
{
|
||||
final WxMpMessageRouter router = new WxMpMessageRouter(null);
|
||||
router.setSessionManager(ism);
|
||||
router
|
||||
.rule().async(true).handler(new WxSessionMessageHandler()).end();
|
||||
|
||||
WxMpXmlMessage msg = new WxMpXmlMessage();
|
||||
msg.setFromUserName("abc");
|
||||
router.route(msg);
|
||||
|
||||
Thread.sleep(2000l);
|
||||
Assert.assertEquals(ism.getActiveSessions(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
public static class WxSessionMessageHandler implements WxMpMessageHandler {
|
||||
|
||||
@Override
|
||||
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService,
|
||||
WxSessionManager sessionManager) {
|
||||
sessionManager.getSession(wxMessage.getFromUserName());
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user