PollTestCase.pas 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. unit PollTestCase;
  2. interface
  3. {$I zmq.inc}
  4. uses
  5. {$ifdef fpc}
  6. fpcunit, testutils, testregistry
  7. {$else}
  8. TestFramework
  9. {$endif}
  10. , Classes
  11. {$ifndef UNIX}
  12. , Windows
  13. {$endif}
  14. , zmqapi
  15. , zmq
  16. // , zmqpoller
  17. ;
  18. type
  19. TPollTestCase = class(TTestCase)
  20. strict private
  21. context: TZMQContext;
  22. poller: TZMQPoller;
  23. procedure PollEvent( socket: TZMQSocket; events: TZMQPollEvents );
  24. public
  25. procedure SetUp; override;
  26. procedure TearDown; override;
  27. published
  28. procedure PollRegister;
  29. end;
  30. implementation
  31. var
  32. ehandle: THandle;
  33. zmqPollItem: ^TZMQPollItem;
  34. {$ifdef UNIX}
  35. {$else}
  36. procedure TPollTestCase.PollEvent( socket: TZMQSocket; events: TZMQPollEvents );
  37. begin
  38. zmqPollItem^.socket := socket;
  39. zmqPollItem^.events := events;
  40. SetEvent( ehandle );
  41. end;
  42. {$endif}
  43. { TPollTestCase }
  44. procedure TPollTestCase.SetUp;
  45. begin
  46. inherited;
  47. context := TZMQContext.Create;
  48. poller := TZMQPoller.Create( false, context );
  49. poller.onEvent := PollEvent;
  50. end;
  51. procedure TPollTestCase.TearDown;
  52. begin
  53. inherited;
  54. poller.Free;
  55. context.Free;
  56. end;
  57. procedure TPollTestCase.PollRegister;
  58. var
  59. sb,sc: TZMQSocket;
  60. s: Utf8String;
  61. begin
  62. New( zmqPollItem );
  63. ehandle := CreateEvent( nil, true, false, nil );
  64. sb := context.Socket( stPair );
  65. sb.bind( 'inproc://pair' );
  66. sc := context.Socket( stPair );
  67. sc.connect( 'inproc://pair' );
  68. //poller.register( sb, [pePollIn]);
  69. //sleep( 1000 );
  70. poller.Register( sb, [pePollIn], true );
  71. sc.send('Hello');
  72. WaitForSingleObject( ehandle, INFINITE );
  73. ResetEvent( ehandle );
  74. Check( zmqPollItem.socket = sb, 'wrong socket' );
  75. Check( zmqPollItem.events = [pePollIn], 'wrong event' );
  76. zmqPollItem.socket.recv( s );
  77. CheckEquals( 'Hello', s, 'wrong message received' );
  78. CloseHandle( ehandle );
  79. Dispose( zmqPollItem );
  80. end;
  81. initialization
  82. {$ifdef fpc}
  83. RegisterTest(TPollTestCase);
  84. {$else}
  85. RegisterTest(TPollTestCase.Suite);
  86. {$endif}
  87. end.