test and finish FS
[brdnet.git] / TestFS.pas
blob3f608e3ec97d020c7f73763e3689df246cc772e6
1 unit TestFS;
3 INTERFACE
4 IMPLEMENTATION
5 USES ServerLoop,Chat,SysUtils,MemStream,NetAddr,opcode;
7 type t=object
8 ch: tChat;
9 //procedure UserInput
10 procedure ST1(msg:tSMsg; data:boolean);
11 procedure ST2(msg:tSMsg; data:boolean);
12 procedure ST3(msg:tSMsg; data:boolean);
13 procedure Rekt;
14 procedure HardTimeout;
15 end;
17 procedure t.ST1(msg:tSMsg; data:boolean);
18 var s:tMemoryStream;
19 begin
20 write('TestFS: ST1 reply from FS: ');
21 if not data then begin
22 writeln('ack');
23 s.init(GetMem(56),0,56);
24 ch.AddHeaders(s);
25 s.WriteByte(99);
26 ch.Send(s);
27 ch.Callback:=@ST2;
28 end else writeln('unexpected data');
29 end;
30 procedure t.ST2(msg:tSMsg; data:boolean);
31 var s:tMemoryStream;
32 begin
33 write('TestFS: ST2 reply from FS: ');
34 if data then begin
35 writeln(msg.stream.ReadByte,'-',msg.stream.ReadByte);
36 s.init(GetMem(56),0,56);
37 ch.AddHeaders(s);
38 s.WriteByte(opcode.upClose);
39 ch.Send(s);
40 ch.Callback:=@ST3;
41 end else writeln('ack');
42 end;
43 procedure t.ST3(msg:tSMsg; data:boolean);
44 begin
45 write('TestFS: ST3 reply from FS: ');
46 if data then writeln('unepected data') else begin
47 writeln('ack');
48 UnShedule(@HardTimeout);
49 ch.DisposeHook:=@Rekt;
50 ch.Close;
51 end;
52 end;
54 procedure t.Rekt;
55 begin
56 writeln('TestFS: rekt');
57 FreeMem(@self,sizeof(self));
58 end;
60 procedure t.HardTimeout;
61 begin
62 writeln('TestFS: hardtimeout');
63 ch.DisposeHook:=@Rekt;
64 ch.Close;
65 end;
67 procedure init;
68 var o:^t;
69 var oi:word;
70 var s:tMemoryStream;
71 const opt='-test-fs';
72 begin
73 oi:=OptIndex(opt);
74 if oi>0 then begin
75 assert(OptParamCount(oi)=1,opt+'(rcpt:tNetAddr)');
76 writeln('TestFS: rcpt '+paramstr(oi+1));
77 new(o); with o^ do begin
78 ch.Init(paramstr(oi+1));
79 ch.Callback:=@ST1;
80 Shedule(7000,@HardTimeout);
81 s.init(GetMem(56),0,56);
82 ch.AddHeaders(s);
83 s.WriteByte(opcode.upFileServer);
84 ch.Send(s);
85 end;
86 end;
87 end;
89 BEGIN
90 init;
91 END.