From aadc3e1904ea4af54fb8f38fae8665be085b39c6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tom=C3=A1=C5=A1=20Brada?= Date: Tue, 22 Sep 2015 16:26:03 +0200 Subject: [PATCH] Add chat unit test. --- TestChat.pas | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ brodnetd.pas | 1 + 2 files changed, 99 insertions(+) create mode 100644 TestChat.pas diff --git a/TestChat.pas b/TestChat.pas new file mode 100644 index 0000000..85f611f --- /dev/null +++ b/TestChat.pas @@ -0,0 +1,98 @@ +unit TestChat; + +INTERFACE +IMPLEMENTATION +USES ServerLoop,Chat,SysUtils,MemStream,NetAddr; + +type t=object + ch: tChat; + //procedure UserInput + procedure Reply(msg:tSMsg; data:boolean); + procedure Rekt; + procedure Timeout(willwait:LongWord); + procedure HardTimeout; +end; + +procedure t.Reply(msg:tSMsg; data:boolean); + var d:string; + begin + write('TestChat: '); + if data then begin + setlength(d,msg.stream.RDBufLen); + msg.stream.read(d[1],msg.stream.RDBufLen); + writeln('reply '+d); + end else writeln('ack'); +end; + +procedure t.Rekt; + begin + writeln('TestChat: rekt'); + FreeMem(@self,sizeof(self)); +end; + +procedure t.Timeout(willwait:LongWord); + begin + if willwait>=16000 then begin + writeln('TestChat: timeout, give up'); + ch.Close; + end else + writeln('TestChat: resend willwait='+IntToStr(willwait)); +end; + +procedure t.HardTimeout; + begin + writeln('TestChat: hardtimeout'); + ch.Close; +end; + +procedure ChatHandler(var nchat:tChat; msg:tSMsg); + var d:ansistring; + var s:tMemoryStream; + begin + write('TestChat: '); + msg.stream.skip(1); + setlength(d,msg.stream.RDBufLen); + msg.stream.read(d[1],msg.stream.RDBufLen); + writeln('msg '+d); + //nchat.Ack; + s.init(GetMem(56),0,56); + nchat.AddHeaders(s); + d:='Test Chat Reply!'; + s.Write(d[1],length(d)); + nchat.Send(s); + nchat.Close; +end; + + +procedure init; + var o:^t; + var oi:word; + var s:tMemoryStream; + const opt='-test-chat'; + var msg:string[50]; + begin + oi:=OptIndex(opt); + if oi>0 then begin + assert(OptParamCount(oi)=1,opt+'(rcpt:tNetAddr)'); + writeln('TestChat: rcpt '+paramstr(oi+1)); + {init chat to rcpt, send message wait reply, print reply, done} + new(o); with o^ do begin + ch.Init(paramstr(oi+1)); + ch.Callback:=@Reply; + ch.DisposeHook:=@Rekt; + ch.TMHook:=@Timeout; + Shedule(7000,@HardTimeout); + s.init(GetMem(56),0,56); + ch.AddHeaders(s); + msg:='Test Chat Message!'; + s.WriteByte(32); + s.Write(msg[1],length(msg)); + ch.Send(s); + end; + end; + SetChatHandler(32,@ChatHandler); +end; + +BEGIN + init; +END. \ No newline at end of file diff --git a/brodnetd.pas b/brodnetd.pas index 942e7b5..bba01fc 100644 --- a/brodnetd.pas +++ b/brodnetd.pas @@ -4,6 +4,7 @@ PROGRAM brodnetd; uses ServerLoop ,TestWatch ,TestTC + ,TestChat ; BEGIN -- 2.11.4.GIT