public void OnSubscribeTest() { var requestXML = @"<?xml version=""1.0"" encoding=""utf-8""?> <xml> <ToUserName><![CDATA[gh_0fe614101343]]></ToUserName> <FromUserName><![CDATA[oxRg0uLsnpHjb8o93uVnwMK_WAVw]]></FromUserName> <CreateTime>1516545128</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event>subscribe</Event> <EventKey><![CDATA[]]></EventKey> </xml> "; var messageHandlers = new CustomMessageHandlers(XDocument.Parse(requestXML)); Assert.IsNotNull(messageHandlers.RequestDocument); Assert.IsInstanceOfType(messageHandlers.RequestMessage, typeof(RequestMessageEvent_Subscribe)); Assert.AreEqual("", ((RequestMessageEvent_Subscribe)messageHandlers.RequestMessage).EventKey);//EventKey为空 messageHandlers.Execute(); Assert.IsNotNull(messageHandlers.ResponseMessage); Assert.IsNotNull(messageHandlers.ResponseDocument); Assert.IsInstanceOfType(messageHandlers.ResponseMessage, typeof(ResponseMessageText)); Assert.AreEqual("欢迎关注", ((ResponseMessageText)messageHandlers.ResponseMessage).Content); Console.WriteLine(messageHandlers.FinalResponseDocument); }
public void UnknowTypeMessageTest() { var requestXmlFormat = @"<?xml version=""1.0"" encoding=""utf-8""?> <xml> <ToUserName><![CDATA[gh_a96a4a619366]]></ToUserName> <FromUserName><![CDATA[{0}]]></FromUserName> <CreateTime>1357986928</CreateTime> <MsgType><![CDATA[{1}]]></MsgType> <Content><![CDATA[TNT2]]></Content> <MsgId>5832509444155992350</MsgId> </xml> "; var types = new[] { "unknown1", "unknown2", "unknown3" }; foreach (var type in types) { var fileXml = requestXmlFormat.FormatWith("JeffreySu", type); var messageHandler = new CustomMessageHandlers(XDocument.Parse(fileXml)); messageHandler.OmitRepeatedMessage = false;//禁用去重机制 messageHandler.Execute(); Assert.IsInstanceOfType(messageHandler.ResponseMessage, typeof(ResponseMessageText)); Assert.AreEqual("未知消息类型:{0}".FormatWith(type), ((ResponseMessageText)messageHandler.ResponseMessage).Content); } }
public void ContextTest() { var messageHandlers = new CustomMessageHandlers(XDocument.Parse(xmlText)); messageHandlers.Execute(); var messageContext = messageHandlers.GlobalMessageContext.GetMessageContext(messageHandlers.RequestMessage); Assert.IsTrue(messageContext.RequestMessages.Count > 0); Assert.IsNotNull(messageHandlers.CurrentMessageContext); Assert.AreEqual("olPjZjsXuQPJoV0HlruZkNzKc91E", messageHandlers.CurrentMessageContext.UserName); messageHandlers.GlobalMessageContext.ExpireMinutes = 0;//马上过期 messageHandlers.Execute(); messageContext = messageHandlers.GlobalMessageContext.GetMessageContext(messageHandlers.RequestMessage); Assert.AreEqual(0, messageContext.RequestMessages.Count); }
public void FileTest() { //数据不全,未开始正式测试 var postModel = new PostModel() { AppId = "wx43899fc5fd7ab4dc", Msg_Signature = "a61aaa287b63782f8e5d801075e20e75bfe37af4", Timestamp = "1519483978", Nonce = "1122185331", Token = "moZ05vVoeueufLTuCqv", EncodingAESKey = "68JptSBfCdTa12VRKa3Ztv4cDRbqlor8Kgy6c9l6bKK", }; var messageHandler = new CustomMessageHandlers(XDocument.Parse(testFileXml), postModel, 10); messageHandler.Execute(); Assert.IsInstanceOfType(messageHandler.RequestMessage, typeof(RequestMessageFile)); Console.WriteLine(messageHandler.RequestDocument); Console.WriteLine(messageHandler.ResponseDocument); Assert.IsInstanceOfType(messageHandler.ResponseMessage, typeof(ResponseMessageText)); Assert.AreEqual("95d98d3bf1b251a9e4a40f3bd88eef29", ((ResponseMessageText)messageHandler.ResponseMessage).Content); }
public void Event_LocationSelectTest() { var requestXML = @"<?xml version=""1.0"" encoding=""utf-8""?> <xml> <ToUserName>ToUserName</ToUserName> <FromUserName>FromUserName</FromUserName> <CreateTime>1444293582</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[location_select]]></Event> <EventKey><![CDATA[ZBZXC]]></EventKey> <SendLocationInfo><Location_X><![CDATA[31]]></Location_X> <Location_Y><![CDATA[121]]></Location_Y> <Scale><![CDATA[15]]></Scale> <Label><![CDATA[嘉兴市南湖区政府东栅街道办事处(中环南路南)]]></Label> <Poiname><![CDATA[南湖区富润路/中环南路(路口)旁]]></Poiname> </SendLocationInfo> </xml> "; var messageHandlers = new CustomMessageHandlers(XDocument.Parse(requestXML)); Assert.IsNotNull(messageHandlers.RequestDocument); Assert.IsInstanceOfType(messageHandlers.RequestMessage, typeof(RequestMessageEvent_Location_Select)); Assert.AreEqual("ZBZXC", ((RequestMessageEvent_Location_Select)messageHandlers.RequestMessage).EventKey); messageHandlers.Execute(); Assert.IsNotNull(messageHandlers.ResponseMessage); Assert.IsNotNull(messageHandlers.ResponseDocument); Assert.IsFalse(messageHandlers.UsingEcryptMessage); //没有使用加密模式 Assert.IsFalse(messageHandlers.UsingCompatibilityModelEcryptMessage); //没有加密模式,所以也没有兼容模式 Console.WriteLine(messageHandlers.ResponseDocument.ToString()); Assert.AreEqual("ToUserName", messageHandlers.ResponseMessage.FromUserName); Assert.IsInstanceOfType(messageHandlers.ResponseMessage, typeof(ResponseMessageText)); Assert.AreEqual("OnEvent_LocationSelectRequest", ((ResponseMessageText)messageHandlers.ResponseMessage).Content); }
public void RestoreTest() { var messageHandlers = new CustomMessageHandlers(XDocument.Parse(xmlText)); messageHandlers.Execute(); Assert.IsTrue(messageHandlers.GlobalMessageContext.MessageCollection.Count > 0); messageHandlers.GlobalMessageContext.Restore(); Assert.AreEqual(0, messageHandlers.GlobalMessageContext.MessageCollection.Count); }
public void SyncTest() { //测试缓存同步 var messageHandlers1 = new CustomMessageHandlers(XDocument.Parse(xmlText)); var messageHandlers2 = new CustomMessageHandlers(XDocument.Parse(xmlText)); messageHandlers1.Execute(); Assert.AreEqual(messageHandlers1.GlobalMessageContext.GetHashCode(), messageHandlers2.GlobalMessageContext.GetHashCode()); }
public void DefaultResponseMessageTest() { var messageHandler = new CustomMessageHandlers(XDocument.Parse(xmlLocation)); messageHandler.Execute(); //TestMessageHandlers中没有处理坐标信息的重写方法,将返回默认消息 Assert.IsInstanceOfType(messageHandler.ResponseMessage, typeof(ResponseMessageText)); Assert.AreEqual("您发送的消息类型暂未被识别。", ((ResponseMessageText)messageHandler.ResponseMessage).Content); }
/// <summary> /// 微信认证事件测试 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="xml"></param> /// <param name="eventType"></param> /// <returns></returns> private CustomMessageHandlers VerifyEventTest <T>(string xml, Event eventType) where T : RequestMessageEventBase { var messageHandlers = new CustomMessageHandlers(XDocument.Parse(xml)); Assert.IsNotNull(messageHandlers.RequestDocument); messageHandlers.Execute(); Assert.IsNotNull(messageHandlers.TextResponseMessage); var requestMessage = messageHandlers.RequestMessage as T; Assert.IsNotNull(requestMessage); Assert.AreEqual(eventType, requestMessage.Event); return(messageHandlers); }
public void MutipleThreadsTest() { // var weixinContext = MessageHandler <MessageContext <IRequestMessageBase, IResponseMessageBase> > .GlobalWeixinContext;//全局共享的WeixinContext上下文对象 weixinContext.Restore(); //多线程并发写入测试 List <Thread> threadList = new List <Thread>(); for (int i = 0; i < 200; i++) { var testContext = new TestContext(); var thread = new Thread(testContext.Run); thread.Name = i.ToString(); threadList.Add(thread); } threadList.ForEach(z => z.Start()); //开始所有线程 while (TestContext.FinishCount < 200) { } Assert.AreEqual(200 * 10, weixinContext.MessageCollection.Count); //用户数量 //判断消息上下是否自动移到底部 { var userName = "******"; var xml = string.Format(TestContext.RequestXmlFormat, userName); var messageHandlers = new CustomMessageHandlers(XDocument.Parse(xml)); messageHandlers.Execute(); var lastQueueMessage = weixinContext.MessageQueue.Last(); Assert.AreEqual(userName, lastQueueMessage.UserName); } //判断超时信息是否被及时删除 { weixinContext.ExpireMinutes = 0.001; //设置过期时间(0.06秒) Thread.Sleep(100); weixinContext.GetLastRequestMessage("new"); //触发过期判断 Assert.AreEqual(1, weixinContext.MessageCollection.Count); //只删除剩下当前这一个 } }
public void Run() { for (int i = 0; i < 10; i++) { //模拟10个不同用户名 var userName = Thread.CurrentThread.Name + "_" + i; var xml = string.Format(RequestXmlFormat, userName); for (int j = 0; j < 2; j++) { //每个用户请求2次 var messageHandlers = new CustomMessageHandlers(XDocument.Parse(xml)); messageHandlers.Execute(); } Thread.Sleep(5); } TestContext.FinishCount++; }
public void SendMenuTest() { var xml = @"<?xml version=""1.0"" encoding=""utf-8""?> <xml> <ToUserName><![CDATA[gh_a96a4a619366]]></ToUserName> <FromUserName><![CDATA[olPjZjsXuQPJoV0HlruZkNzKc91E]]></FromUserName> <CreateTime>1552115230</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[满意]]></Content> <MsgId>22220946756594166</MsgId> <bizmsgmenuid>101</bizmsgmenuid> </xml>"; var messageHandler = new CustomMessageHandlers(XDocument.Parse(xml)); messageHandler.Execute(); Assert.IsInstanceOfType(messageHandler.ResponseMessage, typeof(ResponseMessageText)); Assert.AreEqual("选择菜单:101,文字:满意", ((ResponseMessageText)messageHandler.ResponseMessage).Content); }
/// <summary> /// 事件测试 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="xml"></param> /// <param name="eventType"></param> /// <returns></returns> private CustomMessageHandlers VerifyEventTest <T>(string xml, Event eventType) where T : RequestMessageEventBase { var messageHandlers = new CustomMessageHandlers(XDocument.Parse(xml)); Assert.IsNotNull(messageHandlers.RequestDocument); //messageHandlers.DefaultMessageHandlerAsyncEvent = NeuChar.MessageHandlers.DefaultMessageHandlerAsyncEvent.SelfSynicMethod; messageHandlers.Execute(); Assert.IsNotNull(messageHandlers.TextResponseMessage); var requestMessage = messageHandlers.RequestMessage as T; Console.WriteLine(messageHandlers.RequestMessage.GetType()); Assert.IsNotNull(requestMessage); Assert.AreEqual(eventType, requestMessage.Event); return(messageHandlers); }
public void TestConstructorTest() { var requestMessage = new RequestMessageText() { Content = "Hi", CreateTime = SystemTime.Now, FromUserName = "******", ToUserName = "******", MsgId = 123, }; var messageHandler = new CustomMessageHandlers(requestMessage); messageHandler.Execute(); //TestMessageHandlers中没有处理坐标信息的重写方法,将返回默认消息 Assert.IsInstanceOfType(messageHandler.ResponseMessage, typeof(ResponseMessageText)); Assert.AreEqual("文字信息", ((ResponseMessageText)messageHandler.ResponseMessage).Content); }
public void TextMessageRequestTest() { var messageHandlers = new CustomMessageHandlers(XDocument.Parse(xmlText)); Assert.IsNotNull(messageHandlers.RequestDocument); messageHandlers.Execute(); Assert.IsNotNull(messageHandlers.ResponseMessage); Assert.IsNotNull(messageHandlers.ResponseDocument); Assert.IsFalse(messageHandlers.UsingEcryptMessage); //没有使用加密模式 Assert.IsFalse(messageHandlers.UsingCompatibilityModelEcryptMessage); //没有加密模式,所以也没有兼容模式 Console.Write(messageHandlers.ResponseDocument.ToString()); Assert.AreEqual("gh_a96a4a619366", messageHandlers.ResponseMessage.FromUserName); var responseMessage = messageHandlers.ResponseMessage as ResponseMessageText; Assert.IsNotNull(responseMessage); Assert.AreEqual("文字信息", responseMessage.Content); }
public void OnEvent_MassSendJobFinishRequestTest() { var xml = @"<xml> <ToUserName><![CDATA[gh_3e8adccde292]]></ToUserName> <FromUserName><![CDATA[oR5Gjjl_eiZoUpGozMo7dbBJ362A]]></FromUserName> <CreateTime>1394524295</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[MASSSENDJOBFINISH]]></Event> <MsgID>1988</MsgID> <Status><![CDATA[sendsuccess]]></Status> <TotalCount>100</TotalCount> <FilterCount>80</FilterCount> <SentCount>75</SentCount> <ErrorCount>5</ErrorCount> </xml>"; var messageHandlers = new CustomMessageHandlers(XDocument.Parse(xml)); messageHandlers.Execute(); Assert.IsNotNull(messageHandlers.ResponseMessage); Console.Write(messageHandlers.ResponseDocument); }
public void NeuCharReplyTest() { string xmlText = @"<?xml version=""1.0"" encoding=""utf-8""?> <xml> <ToUserName><![CDATA[gh_a96a4a619366]]></ToUserName> <FromUserName><![CDATA[olPjZjsXuQPJoV0HlruZkNzKc91E]]></FromUserName> <CreateTime>1357986928</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[neuchar]]></Content> <MsgId>5832509444155992350</MsgId> </xml> "; var messageHandlers = new CustomMessageHandlers(XDocument.Parse(xmlText)); Assert.IsNotNull(messageHandlers.RequestDocument); messageHandlers.Execute(); Assert.IsNotNull(messageHandlers.ResponseMessage); Assert.IsNotNull(messageHandlers.ResponseDocument); Assert.IsFalse(messageHandlers.UsingEcryptMessage); //没有使用加密模式 Assert.IsFalse(messageHandlers.UsingCompatibilityModelEcryptMessage); //没有加密模式,所以也没有兼容模式 Console.Write(messageHandlers.ResponseDocument.ToString()); }
public void NeuCharDefineTest() { string xmlText = @"<xml> <ToUserName>Senparc</ToUserName> <FromUserName>NeuChar</FromUserName> <CreateTime>1537966819</CreateTime> <MsgType>NeuChar</MsgType> <MsgId>636735924194707412</MsgId> <NeuCharMessageType>SaveConfig</NeuCharMessageType> <ConfigRoot><![CDATA[{ ""version"": ""0.0.1"", ""name"": ""NeuChar"", ""guid"": ""9F88AF01CC084F658DDD31F022B18053"", ""key"": """", ""Configs"": { ""Version"": ""0.0.1"", ""MaterialData"": [ { ""Name"": ""2d71a392-6055-425d-9433-cf3d88d3e0d6"", ""Id"": ""2d71a392-6055-425d-9433-cf3d88d3e0d6"", ""Note"": null, ""Version"": ""20180926"", ""Type"": 1, ""Content"": ""Test"" } ], ""Config"": { ""MessagePair"": [ { ""Name"": ""规则一"", ""Id"": null, ""Note"": null, ""Version"": ""20180926"", ""Request"": { ""Type"": 0, ""Keywords"": [ ""1"" ] }, ""Responses"": [ { ""Type"": 1, ""MaterialId"": ""2d71a392-6055-425d-9433-cf3d88d3e0d6"" } ] } ] }, ""Name"": ""MessageHandlerNode"", ""ChildrenNodes"": [] } }]]></ConfigRoot> </xml> "; var messageHandlers = new CustomMessageHandlers(XDocument.Parse(xmlText)); Assert.IsNotNull(messageHandlers.RequestDocument); messageHandlers.Execute(); Assert.IsNull(messageHandlers.ResponseMessage); Assert.IsNull(messageHandlers.ResponseDocument); Assert.IsFalse(messageHandlers.UsingEcryptMessage); //没有使用加密模式 Assert.IsFalse(messageHandlers.UsingCompatibilityModelEcryptMessage); //没有加密模式,所以也没有兼容模式 Console.Write(messageHandlers.TextResponseMessage); }