SocketTestCase.pas 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729
  1. unit SocketTestCase;
  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. ;
  16. type
  17. TSocketTestCase = class(TTestCase)
  18. strict private
  19. context: TZMQContext;
  20. FZMQSocket: TZMQSocket;
  21. {$ifdef zmq3}
  22. {$ifndef UNIX}
  23. procedure MonitorEvent1( event: TZMQEvent );
  24. procedure MonitorEvent2( event: TZMQEvent );
  25. {$endif}
  26. {$endif}
  27. public
  28. procedure SetUp; override;
  29. procedure TearDown; override;
  30. published
  31. procedure TestSocketType;
  32. procedure TestrcvMore;
  33. procedure TestHWM;
  34. {$ifdef zmq3}
  35. procedure TestSndHWM;
  36. procedure TestRcvHWM;
  37. procedure TestLastEndpoint;
  38. procedure TestAcceptFilter;
  39. {$ifndef UNIX}
  40. procedure TestMonitor;
  41. procedure TestMonitorConnectDisconnect;
  42. {$endif}
  43. {$else}
  44. procedure TestSwap;
  45. procedure TestRecoveryIvlMSec;
  46. procedure TestMCastLoop;
  47. {$endif}
  48. procedure TestRcvTimeout;
  49. procedure TestSndTimeout;
  50. procedure TestAffinity;
  51. procedure TestIdentity;
  52. procedure TestRate;
  53. procedure TestRecoveryIvl;
  54. procedure TestSndBuf;
  55. procedure TestRcvBuf;
  56. procedure TestLinger;
  57. procedure TestReconnectIvl;
  58. procedure TestReconnectIvlMax;
  59. procedure TestBacklog;
  60. procedure TestFD;
  61. procedure TestEvents;
  62. procedure TestSubscribe;
  63. procedure TestunSubscribe;
  64. procedure SocketPair;
  65. end;
  66. implementation
  67. uses
  68. Sysutils
  69. ;
  70. {$ifdef zmq3}
  71. var
  72. ehandle1,
  73. ehandle2: THandle;
  74. zmqEvent: ^TZMQEvent;
  75. {$endif}
  76. { TSimpleTestCase }
  77. procedure TSocketTestCase.SetUp;
  78. begin
  79. inherited;
  80. context := TZMQContext.Create;
  81. end;
  82. procedure TSocketTestCase.TearDown;
  83. begin
  84. inherited;
  85. if context <> nil then
  86. context.Free;
  87. end;
  88. procedure TSocketTestCase.TestSocketType;
  89. var
  90. st: TZMQSocketType;
  91. begin
  92. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  93. begin
  94. FZMQSocket := context.Socket( st );
  95. try
  96. Check( FZMQSocket.SocketType = st, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  97. finally
  98. FZMQSocket.Free;
  99. end;
  100. end;
  101. end;
  102. procedure TSocketTestCase.TestrcvMore;
  103. var
  104. st: TZMQSocketType;
  105. begin
  106. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  107. begin
  108. FZMQSocket := context.Socket( st );
  109. try
  110. CheckEquals( False, FZMQSocket.rcvMore, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  111. finally
  112. FZMQSocket.Free;
  113. end;
  114. end;
  115. end;
  116. procedure TSocketTestCase.TestHWM;
  117. var
  118. st: TZMQSocketType;
  119. begin
  120. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  121. begin
  122. FZMQSocket := context.Socket( st );
  123. try
  124. CheckEquals( {$ifdef zmq3}1000{$else}0{$endif}, FZMQSocket.HWM, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  125. FZMQSocket.HWM := 42;
  126. CheckEquals( 42, FZMQSocket.HWM );
  127. finally
  128. FZMQSocket.Free;
  129. end;
  130. end;
  131. end;
  132. {$ifdef zmq3}
  133. procedure TSocketTestCase.TestSndHWM;
  134. var
  135. st: TZMQSocketType;
  136. begin
  137. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  138. begin
  139. FZMQSocket := context.Socket( st );
  140. try
  141. CheckEquals( 1000, FZMQSocket.SndHWM, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  142. FZMQSocket.SndHWM := 42;
  143. CheckEquals( 42, FZMQSocket.SndHWM );
  144. finally
  145. FZMQSocket.Free;
  146. end;
  147. end;
  148. end;
  149. procedure TSocketTestCase.TestRcvHWM;
  150. var
  151. st: TZMQSocketType;
  152. begin
  153. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  154. begin
  155. FZMQSocket := context.Socket( st );
  156. try
  157. CheckEquals( 1000, FZMQSocket.RcvHWM, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  158. FZMQSocket.RcvHWM := 42;
  159. CheckEquals( 42, FZMQSocket.RcvHWM );
  160. finally
  161. FZMQSocket.Free;
  162. end;
  163. end;
  164. end;
  165. procedure TSocketTestCase.TestLastEndpoint;
  166. var
  167. st: TZMQSocketType;
  168. begin
  169. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  170. begin
  171. FZMQSocket := context.Socket( st );
  172. try
  173. CheckEquals( '', FZMQSocket.LastEndpoint, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  174. FZMQSocket.bind('tcp://127.0.0.1:5555');
  175. Sleep(10);
  176. CheckEquals( 'tcp://127.0.0.1:5555', FZMQSocket.LastEndpoint, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  177. finally
  178. FZMQSocket.unbind('tcp://127.0.0.1:5555');
  179. Sleep(10);
  180. FZMQSocket.Free;
  181. end;
  182. end;
  183. end;
  184. procedure TSocketTestCase.TestAcceptFilter;
  185. var
  186. st: TZMQSocketType;
  187. begin
  188. exit; // <---- WARN
  189. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  190. begin
  191. FZMQSocket := context.Socket( st );
  192. try
  193. FZMQSocket.bind('tcp://*:5555');
  194. Sleep(10);
  195. FZMQSocket.AddAcceptFilter('192.168.1.1');
  196. CheckEquals( '192.168.1.1', FZMQSocket.AcceptFilter[0], 'Add Accept Filter 1' );
  197. FZMQSocket.AddAcceptFilter('192.168.1.2');
  198. CheckEquals( '192.168.1.2', FZMQSocket.AcceptFilter[1], 'Add Accept Filter 2' );
  199. FZMQSocket.AcceptFilter[0] := '192.168.1.3';
  200. CheckEquals( '192.168.1.3', FZMQSocket.AcceptFilter[0], 'Change Accept Filter 1' );
  201. try
  202. // trying to set wrong value
  203. FZMQSocket.AcceptFilter[0] := 'xraxsda';
  204. CheckEquals( '192.168.1.3', FZMQSocket.AcceptFilter[0], 'Change Accept Filter 2' );
  205. except
  206. on e: Exception do
  207. begin
  208. if e is EZMQException then
  209. begin
  210. CheckEquals( '192.168.1.3', FZMQSocket.AcceptFilter[0], 'set Invalid check 1' );
  211. CheckEquals( '192.168.1.2', FZMQSocket.AcceptFilter[1], 'set Invalid check 2' );
  212. end else
  213. raise;
  214. end;
  215. end;
  216. finally
  217. FZMQSocket.unbind('tcp://*:5555');
  218. Sleep(10);
  219. FZMQSocket.Free;
  220. end;
  221. end;
  222. end;
  223. {$ifndef UNIX}
  224. procedure TSocketTestCase.MonitorEvent1( event: TZMQEvent );
  225. begin
  226. zmqEvent^ := event;
  227. SetEvent( ehandle1 );
  228. end;
  229. procedure TSocketTestCase.MonitorEvent2( event: TZMQEvent );
  230. begin
  231. zmqEvent^ := event;
  232. SetEvent( ehandle2 );
  233. end;
  234. procedure TSocketTestCase.TestMonitor;
  235. var
  236. st: TZMQSocketType;
  237. begin
  238. New( zmqEvent );
  239. ehandle1 := CreateEvent( nil, true, false, nil );
  240. ehandle2 := CreateEvent( nil, true, false, nil );
  241. //ResetEvent( ehandle1 );
  242. //ResetEvent( ehandle2 );
  243. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  244. begin
  245. FZMQSocket := context.Socket( st );
  246. FZMQSocket.RegisterMonitor( MonitorEvent1 );
  247. try
  248. FZMQSocket.bind( 'tcp://*:5555' );
  249. WaitForSingleObject( ehandle1, INFINITE );
  250. ResetEvent( ehandle1 );
  251. CheckEquals( 'tcp://0.0.0.0:5555', zmqEvent.addr, 'addr not equal socket type: ' + IntToStr( Ord( st ) ) );
  252. Check( zmqEvent.event = meListening, 'event should nbe meListening addr not equal socket type: ' + IntToStr( Ord( st ) ) );
  253. FZMQSocket.DeRegisterMonitor;
  254. FZMQSocket.RegisterMonitor( MonitorEvent2 );
  255. sleep(100);
  256. FZMQSocket.unbind( 'tcp://*:5555' );
  257. WaitForSingleObject( ehandle2, INFINITE );
  258. ResetEvent( ehandle2 );
  259. CheckEquals( 'tcp://0.0.0.0:5555', zmqEvent.addr, 'addr not equal socket type: ' + IntToStr( Ord( st ) ) );
  260. Check( zmqEvent.event = meClosed, 'event should be meClosed addr not equal socket type: ' + IntToStr( Ord( st ) ) );
  261. finally
  262. FZMQSocket.Free;
  263. sleep(200);
  264. end;
  265. end;
  266. CloseHandle( ehandle1 );
  267. CloseHandle( ehandle2 );
  268. Dispose( zmqEvent );
  269. end;
  270. procedure TSocketTestCase.TestMonitorConnectDisconnect;
  271. const
  272. cAddr = 'tcp://127.0.0.1:5554';
  273. var
  274. dealer: TZMQSocket;
  275. i: Integer;
  276. begin
  277. New( zmqEvent );
  278. ehandle1 := CreateEvent( nil, true, false, nil );
  279. ehandle2 := CreateEvent( nil, true, false, nil );
  280. FZMQSocket := context.Socket( stRouter );
  281. FZMQSocket.RegisterMonitor( MonitorEvent1 );
  282. FZMQSocket.bind( cAddr );
  283. WaitForSingleObject( ehandle1, INFINITE );
  284. ResetEvent( ehandle1 );
  285. CheckEquals( cAddr, zmqEvent.addr );
  286. Check( zmqEvent.event = meListening );
  287. for i := 0 to 10 do
  288. begin
  289. dealer := context.Socket( stDealer );
  290. dealer.connect( cAddr );
  291. WaitForSingleObject( ehandle1, INFINITE );
  292. ResetEvent( ehandle1 );
  293. CheckEquals( cAddr, zmqEvent.addr, 'connect, i : ' + IntToStr( i ) );
  294. Check( zmqEvent.event = meAccepted, 'connect, i : ' + IntToStr( i ) );
  295. sleep(100);
  296. dealer.Free;
  297. WaitForSingleObject( ehandle1, INFINITE );
  298. ResetEvent( ehandle1 );
  299. CheckEquals( cAddr, zmqEvent.addr, 'disconnect, i : ' + IntToStr( i ) );
  300. Check( zmqEvent.event = meDisconnected, 'disconnect, i : ' + IntToStr( i ) );
  301. sleep(100);
  302. end;
  303. CloseHandle( ehandle1 );
  304. CloseHandle( ehandle2 );
  305. Dispose( zmqEvent );
  306. end;
  307. {$endif}
  308. {$else}
  309. procedure TSocketTestCase.TestSwap;
  310. var
  311. st: TZMQSocketType;
  312. begin
  313. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  314. begin
  315. FZMQSocket := context.Socket( st );
  316. try
  317. CheckEquals( 0, FZMQSocket.Swap, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  318. FZMQSocket.Swap := 1024;
  319. CheckEquals( 1024, FZMQSocket.Swap );
  320. finally
  321. FZMQSocket.Free;
  322. end;
  323. end;
  324. end;
  325. procedure TSocketTestCase.TestRecoveryIvlMSec;
  326. var
  327. st: TZMQSocketType;
  328. begin
  329. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  330. begin
  331. FZMQSocket := context.Socket( st );
  332. try
  333. CheckEquals( -1, FZMQSocket.RecoveryIvlMSec, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  334. FZMQSocket.RecoveryIvlMSec := 1024;
  335. CheckEquals( 1024, FZMQSocket.RecoveryIvlMSec );
  336. finally
  337. FZMQSocket.Free;
  338. end;
  339. end;
  340. end;
  341. procedure TSocketTestCase.TestMCastLoop;
  342. var
  343. st: TZMQSocketType;
  344. begin
  345. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  346. begin
  347. FZMQSocket := context.Socket( st );
  348. try
  349. CheckEquals( 1, FZMQSocket.MCastLoop, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  350. FZMQSocket.MCastLoop := 0;
  351. CheckEquals( 0, FZMQSocket.MCastLoop );
  352. finally
  353. FZMQSocket.Free;
  354. end;
  355. end;
  356. end;
  357. {$endif}
  358. procedure TSocketTestCase.TestRcvTimeout;
  359. var
  360. st: TZMQSocketType;
  361. begin
  362. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  363. begin
  364. FZMQSocket := context.Socket( st );
  365. try
  366. CheckEquals( -1, FZMQSocket.RcvTimeout, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  367. FZMQSocket.RcvTimeout := 42;
  368. CheckEquals( 42, FZMQSocket.RcvTimeout );
  369. finally
  370. FZMQSocket.Free;
  371. end;
  372. end;
  373. end;
  374. procedure TSocketTestCase.TestSndTimeout;
  375. var
  376. st: TZMQSocketType;
  377. begin
  378. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  379. begin
  380. FZMQSocket := context.Socket( st );
  381. try
  382. CheckEquals( -1, FZMQSocket.SndTimeout, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  383. FZMQSocket.SndTimeout := 42;
  384. CheckEquals( 42, FZMQSocket.SndTimeout );
  385. finally
  386. FZMQSocket.Free;
  387. end;
  388. end;
  389. end;
  390. procedure TSocketTestCase.TestAffinity;
  391. var
  392. st: TZMQSocketType;
  393. begin
  394. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  395. begin
  396. FZMQSocket := context.Socket( st );
  397. try
  398. CheckEquals( 0, FZMQSocket.Affinity, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  399. FZMQSocket.Affinity :=42;
  400. CheckEquals( 42, FZMQSocket.Affinity );
  401. finally
  402. FZMQSocket.Free;
  403. end;
  404. end;
  405. end;
  406. procedure TSocketTestCase.TestIdentity;
  407. var
  408. st: TZMQSocketType;
  409. begin
  410. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  411. begin
  412. FZMQSocket := context.Socket( st );
  413. try
  414. CheckEquals( '', FZMQSocket.Identity, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  415. FZMQSocket.Identity := 'mynewidentity';
  416. CheckEquals( 'mynewidentity', FZMQSocket.Identity );
  417. finally
  418. FZMQSocket.Free;
  419. end;
  420. end;
  421. end;
  422. procedure TSocketTestCase.TestRate;
  423. var
  424. st: TZMQSocketType;
  425. begin
  426. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  427. begin
  428. FZMQSocket := context.Socket( st );
  429. try
  430. //CheckEquals( 100, FZMQSocket.Rate, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  431. FZMQSocket.Rate := 200;
  432. CheckEquals( 200, FZMQSocket.Rate );
  433. finally
  434. FZMQSocket.Free;
  435. end;
  436. end;
  437. end;
  438. procedure TSocketTestCase.TestRecoveryIvl;
  439. var
  440. st: TZMQSocketType;
  441. begin
  442. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  443. begin
  444. FZMQSocket := context.Socket( st );
  445. try
  446. CheckEquals( {$ifdef zmq3}10000{$else}10{$endif}, FZMQSocket.RecoveryIvl, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  447. FZMQSocket.RecoveryIvl := 42;
  448. CheckEquals( 42, FZMQSocket.RecoveryIvl );
  449. finally
  450. FZMQSocket.Free;
  451. end;
  452. end;
  453. end;
  454. procedure TSocketTestCase.TestSndBuf;
  455. var
  456. st: TZMQSocketType;
  457. begin
  458. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  459. begin
  460. FZMQSocket := context.Socket( st );
  461. try
  462. CheckEquals( 0, FZMQSocket.SndBuf, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  463. FZMQSocket.SndBuf := 100000;
  464. CheckEquals( 100000, FZMQSocket.SndBuf );
  465. finally
  466. FZMQSocket.Free;
  467. end;
  468. end;
  469. end;
  470. procedure TSocketTestCase.TestRcvBuf;
  471. var
  472. st: TZMQSocketType;
  473. begin
  474. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  475. begin
  476. FZMQSocket := context.Socket( st );
  477. try
  478. CheckEquals( 0, FZMQSocket.RcvBuf, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  479. FZMQSocket.RcvBuf := 4096;
  480. CheckEquals( 4096, FZMQSocket.RcvBuf );
  481. finally
  482. FZMQSocket.Free;
  483. end;
  484. end;
  485. end;
  486. procedure TSocketTestCase.TestLinger;
  487. var
  488. st: TZMQSocketType;
  489. begin
  490. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  491. begin
  492. FZMQSocket := context.Socket( st );
  493. try
  494. //CheckEquals( -1, FZMQSocket.Linger, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  495. //Writeln('Socket type: '+IntToStr(ord(st))+' Default Linger: '+IntToStr(FZMQSocket.Linger));
  496. CheckTrue( (FZMQSocket.Linger = -1) or (FZMQSocket.Linger = 0), 'Default check for socket type: ' + IntToStr( Ord( st ) ) +' ('+IntToStr(FZMQSocket.Linger)+')');
  497. FZMQSocket.Linger := 1024;
  498. CheckEquals( 1024, FZMQSocket.Linger );
  499. finally
  500. FZMQSocket.Free;
  501. end;
  502. end;
  503. end;
  504. procedure TSocketTestCase.TestReconnectIvl;
  505. var
  506. st: TZMQSocketType;
  507. begin
  508. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  509. begin
  510. FZMQSocket := context.Socket( st );
  511. try
  512. CheckEquals( 100, FZMQSocket.ReconnectIvl, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  513. FZMQSocket.ReconnectIvl := 2048;
  514. CheckEquals( 2048, FZMQSocket.ReconnectIvl );
  515. finally
  516. FZMQSocket.Free;
  517. end;
  518. end;
  519. end;
  520. procedure TSocketTestCase.TestReconnectIvlMax;
  521. var
  522. st: TZMQSocketType;
  523. begin
  524. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  525. begin
  526. FZMQSocket := context.Socket( st );
  527. try
  528. CheckEquals( 0, FZMQSocket.ReconnectIvlMax, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  529. FZMQSocket.ReconnectIvlMax := 42;
  530. CheckEquals( 42, FZMQSocket.ReconnectIvlMax );
  531. finally
  532. FZMQSocket.Free;
  533. end;
  534. end;
  535. end;
  536. procedure TSocketTestCase.TestBacklog;
  537. var
  538. st: TZMQSocketType;
  539. begin
  540. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  541. begin
  542. FZMQSocket := context.Socket( st );
  543. try
  544. CheckEquals( 100, FZMQSocket.Backlog, 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  545. FZMQSocket.Backlog := 42;
  546. CheckEquals( 42, FZMQSocket.Backlog );
  547. finally
  548. FZMQSocket.Free;
  549. end;
  550. end;
  551. end;
  552. procedure TSocketTestCase.TestFD;
  553. var
  554. st: TZMQSocketType;
  555. begin
  556. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  557. begin
  558. FZMQSocket := context.Socket( st );
  559. try
  560. Check( Assigned( FZMQSocket.FD ) );
  561. finally
  562. FZMQSocket.Free;
  563. end;
  564. end;
  565. end;
  566. procedure TSocketTestCase.TestEvents;
  567. var
  568. st: TZMQSocketType;
  569. begin
  570. for st := Low( TZMQSocketType ) to High( TZMQSocketType ) do
  571. begin
  572. FZMQSocket := context.Socket( st );
  573. try
  574. //CheckEquals( True, FZMQSocket.Events = [], 'Default check for socket type: ' + IntToStr( Ord( st ) ) );
  575. finally
  576. FZMQSocket.Free;
  577. end;
  578. end;
  579. end;
  580. procedure TSocketTestCase.TestSubscribe;
  581. var
  582. filter: string;
  583. begin
  584. { FZMQSocket := context.Socket( st );
  585. try
  586. // TODO: Setup method call parameters
  587. FZMQSocket.Subscribe(filter);
  588. // TODO: Validate method results
  589. finally
  590. FZMQSocket.Free;
  591. end;
  592. }end;
  593. procedure TSocketTestCase.TestunSubscribe;
  594. var
  595. filter: string;
  596. begin
  597. { FZMQSocket := context.Socket( st );
  598. try
  599. // TODO: Setup method call parameters
  600. FZMQSocket.unSubscribe(filter);
  601. // TODO: Validate method results
  602. finally
  603. FZMQSocket.Free;
  604. end;
  605. }end;
  606. procedure TSocketTestCase.SocketPair;
  607. var
  608. socketbind,
  609. socketconnect: TZMQSocket;
  610. s: Utf8String;
  611. tsl: TStringList;
  612. begin
  613. socketbind := context.Socket( stPair );
  614. try
  615. socketbind.bind('tcp://127.0.0.1:5560');
  616. socketconnect := context.Socket( stPair );
  617. try
  618. socketconnect.connect('tcp://127.0.0.1:5560');
  619. socketbind.send('Hello');
  620. socketconnect.recv( s );
  621. CheckEquals( 'Hello', s, 'String' );
  622. socketbind.send(['Hello','World']);
  623. tsl := TStringList.Create;
  624. try
  625. socketconnect.recv( tsl );
  626. CheckEquals( 'Hello', tsl[0], 'Multipart 1 message 1' );
  627. CheckEquals( 'World', tsl[1], 'Multipart 1 message 2' );
  628. finally
  629. tsl.Free;
  630. end;
  631. tsl := TStringList.Create;
  632. try
  633. tsl.Add('Hello');
  634. tsl.Add('World');
  635. socketbind.send( tsl );
  636. tsl.Clear;
  637. socketconnect.recv( tsl );
  638. CheckEquals( 'Hello', tsl[0], 'Multipart 2 message 1' );
  639. CheckEquals( 'World', tsl[1], 'Multipart 2 message 2' );
  640. finally
  641. tsl.Free;
  642. end;
  643. finally
  644. socketconnect.Free;
  645. end;
  646. finally
  647. socketbind.Free;
  648. end;
  649. end;
  650. initialization
  651. {$ifdef fpc}
  652. RegisterTest(TSocketTestCase);
  653. {$else}
  654. RegisterTest(TSocketTestCase.Suite);
  655. {$endif}
  656. end.