ContextTestCase.pas 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. unit ContextTestCase;
  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. ;
  17. type
  18. TContextTestCase = class(TTestCase)
  19. strict private
  20. context: TZMQContext;
  21. public
  22. procedure SetUp; override;
  23. procedure TearDown; override;
  24. published
  25. procedure ContextTerminate;
  26. {$ifdef zmq3}
  27. procedure ContextDefaults;
  28. procedure SetIOThreads;
  29. procedure SetMaxSockets;
  30. {$endif}
  31. procedure CreateReqSocket;
  32. procedure lazyPirateBugTest;
  33. end;
  34. implementation
  35. uses
  36. SysUtils;
  37. { TContextTestCase }
  38. procedure TContextTestCase.ContextTerminate;
  39. var
  40. st: TZMQSocketType;
  41. FZMQsocket: TZMQSocket;
  42. s: String;
  43. begin
  44. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  45. begin
  46. if context = nil then
  47. context := TZMQContext.Create;
  48. FZMQSocket := context.Socket( st );
  49. try
  50. FZMQSocket.bind('tcp://127.0.0.1:5555');
  51. context.Linger := 10;
  52. context.Free;
  53. //CheckEquals( True, FZMQSocket.Terminated, 'Socket has not terminated! socket type: ' + IntToStr( Ord( st ) ) );
  54. finally
  55. context := nil;
  56. //FZMQsocket.Free;
  57. end;
  58. end;
  59. end;
  60. procedure TContextTestCase.CreateReqSocket;
  61. var
  62. s: TZMQSocket;
  63. p: TZMQPoller;
  64. begin
  65. s := context.Socket( streq );
  66. p := TZMQPoller.Create( true );
  67. s.connect( 'tcp://127.0.0.1:5555' );
  68. s.send('hhhh');
  69. p.Register( s , [pepollin] );
  70. p.poll(1000);
  71. p.Free;
  72. s.linger := 0;
  73. s.Free;
  74. context.Free;
  75. context := nil;
  76. end;
  77. procedure TContextTestCase.lazyPirateBugTest;
  78. var
  79. sclient,
  80. sserver: TZMQSocket;
  81. begin
  82. sserver := context.Socket( stRep );
  83. sserver.bind( 'tcp://*:5555' );
  84. sclient := context.Socket( stReq );
  85. sclient.connect( 'tcp://localhost:5555' );
  86. sclient.send('request1');
  87. sleep(500);
  88. sclient.Free;
  89. sclient := context.Socket( stReq );
  90. sclient.connect( 'tcp://localhost:5555' );
  91. sclient.send('request1');
  92. sclient.Free;
  93. sleep(500);
  94. sserver.Free;
  95. sleep(500);
  96. context.Free;
  97. context := nil;
  98. end;
  99. procedure TContextTestCase.SetUp;
  100. begin
  101. inherited;
  102. context := TZMQContext.Create;
  103. end;
  104. procedure TContextTestCase.TearDown;
  105. begin
  106. inherited;
  107. if context <> nil then
  108. context.Free;
  109. end;
  110. {$ifdef zmq3}
  111. procedure TContextTestCase.ContextDefaults;
  112. begin
  113. CheckEquals( ZMQ_IO_THREADS_DFLT, context.IOThreads );
  114. CheckEquals( ZMQ_MAX_SOCKETS_DFLT, context.MaxSockets );
  115. end;
  116. procedure TContextTestCase.SetIOThreads;
  117. begin
  118. CheckEquals( ZMQ_IO_THREADS_DFLT, context.IOThreads );
  119. context.IOThreads := 0;
  120. CheckEquals( 0, context.IOThreads );
  121. context.IOThreads := 2;
  122. CheckEquals( 2, context.IOThreads );
  123. end;
  124. procedure TContextTestCase.SetMaxSockets;
  125. begin
  126. CheckEquals( ZMQ_MAX_SOCKETS_DFLT, context.MaxSockets );
  127. context.MaxSockets := 16;
  128. CheckEquals( 16, context.MaxSockets );
  129. end;
  130. {$endif}
  131. initialization
  132. {$ifdef fpc}
  133. RegisterTest(TContextTestCase);
  134. {$else}
  135. RegisterTest(TContextTestCase.Suite);
  136. {$endif}
  137. end.