Guest User

Untitled

a guest
Jun 20th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.52 KB | None | 0 0
  1. package blog.zeromq;
  2.  
  3. import com.sun.jna.Memory;
  4. import com.sun.jna.Native;
  5. import com.sun.jna.NativeLong;
  6. import com.sun.jna.Pointer;
  7. import com.sun.jna.ptr.LongByReference;
  8. import junit.framework.TestCase;
  9.  
  10. /**
  11. * These are smoke tests to verify the JNA mapping of the ZMQ library, no actual messaging is performed.
  12. */
  13. public class ZmqLibraryTest extends TestCase {
  14.  
  15. public void testVersion() {
  16. assertNotNull(zmqLibrary);
  17. int[] major = new int[1];
  18. int[] minor = new int[1];
  19. int[] patch = new int[1];
  20. zmqLibrary.zmq_version(major, minor, patch);
  21. assertEquals(2, major[0]);
  22. assertEquals(0, minor[0]);
  23. assertEquals(8, patch[0]);
  24. }
  25.  
  26. public void testError() {
  27. assertEquals(2, zmqLibrary.zmq_errno());
  28. assertEquals("Operation not permitted", zmqLibrary.zmq_strerror(ZmqLibrary.ENOTSUP));
  29. assertEquals("Input/output error", zmqLibrary.zmq_strerror(ZmqLibrary.EADDRINUSE));
  30. assertEquals("Invalid request descriptor", zmqLibrary.zmq_strerror(ZmqLibrary.ETERM));
  31. }
  32.  
  33. public void testMsgInit() {
  34. assertEquals(0, zmqLibrary.zmq_msg_init(new zmq_msg_t()));
  35. assertEquals(0, zmqLibrary.zmq_msg_init_size(new zmq_msg_t(), new NativeLong(10)));
  36.  
  37. String string = "data";
  38. zmq_msg_t message = new zmq_msg_t();
  39. Memory data = asMemory(string);
  40. assertEquals(0, zmqLibrary.zmq_msg_init_data(message, data, new NativeLong(data.size()), null, asMemory("hint")));
  41.  
  42. String content = zmqLibrary.zmq_msg_data(message).getString(0);
  43. assertEquals(string, asJavaString(content));
  44. }
  45.  
  46. private Memory asMemory(String data) {
  47. byte[] terminated = Native.toByteArray(data);
  48. Memory memory = new Memory(terminated.length);
  49. memory.write(0l, terminated, 0, terminated.length);
  50.  
  51. return memory;
  52. }
  53.  
  54. private String asJavaString(String data) {
  55. return Native.toString(data.getBytes());
  56. }
  57.  
  58. public void testMsgClose() {
  59. zmq_msg_t message = new zmq_msg_t();
  60. zmqLibrary.zmq_msg_init(message);
  61. assertEquals(0, zmqLibrary.zmq_msg_close(message));
  62. }
  63.  
  64. public void testMove() {
  65. zmq_msg_t source = new zmq_msg_t();
  66. zmq_msg_t destination = new zmq_msg_t();
  67.  
  68. Memory srcContent = asMemory("source");
  69. Memory dstContent = asMemory("destination");
  70. assertEquals(0, zmqLibrary.zmq_msg_init_data(source, srcContent, new NativeLong(srcContent.size()), null, null));
  71. assertEquals(0, zmqLibrary.zmq_msg_init_data(destination, dstContent, new NativeLong(dstContent.size()), null, null));
  72.  
  73. assertEquals(0, zmqLibrary.zmq_msg_move(source, destination));
  74.  
  75. assertEquals("destination", asJavaString(zmqLibrary.zmq_msg_data(source).getString(0)));
  76. assertEquals("", asJavaString(zmqLibrary.zmq_msg_data(destination).getString(0)));
  77. }
  78.  
  79. public void testCopy() {
  80. String content = "content";
  81. Memory payload = asMemory(content);
  82.  
  83. zmq_msg_t original = new zmq_msg_t();
  84. zmq_msg_t copy = new zmq_msg_t();
  85. assertEquals(0, zmqLibrary.zmq_msg_init_data(original, payload, new NativeLong(payload.size()), null, null));
  86. assertEquals(0, zmqLibrary.zmq_msg_init(copy));
  87. assertEquals(0, zmqLibrary.zmq_msg_copy(copy, original));
  88.  
  89. assertEquals(content, asJavaString(zmqLibrary.zmq_msg_data(copy).getString(0)));
  90.  
  91. }
  92.  
  93. public void testData() {
  94. String content = "content";
  95.  
  96. zmq_msg_t message = new zmq_msg_t();
  97. Memory payload = asMemory(content);
  98. zmqLibrary.zmq_msg_init_data(message, payload, new NativeLong(payload.size()), null, null);
  99.  
  100. Pointer pointer = zmqLibrary.zmq_msg_data(message);
  101. assertNotNull(pointer);
  102. assertEquals(content, asJavaString(pointer.getString(0)));
  103. }
  104.  
  105. public void testSize() {
  106. String content = "content";
  107.  
  108. zmq_msg_t message = new zmq_msg_t();
  109. Memory payload = asMemory(content);
  110. zmqLibrary.zmq_msg_init_data(message, payload, new NativeLong(payload.size()), null, null);
  111.  
  112. assertEquals(content.length() + 1, zmqLibrary.zmq_msg_size(message).intValue()); // +1 for nul termination
  113. }
  114.  
  115. public void testInit() {
  116. assertNotNull(zmqLibrary.zmq_init(1));
  117. }
  118.  
  119. public void testTerm() {
  120. Pointer context = zmqLibrary.zmq_init(1);
  121. assertEquals(0, zmqLibrary.zmq_term(context));
  122. }
  123.  
  124. public void testSocket() {
  125. Pointer context = zmqLibrary.zmq_init(1);
  126. assertNotNull(context);
  127.  
  128. Pointer socket = zmqLibrary.zmq_socket(context, ZmqLibrary.ZMQ_REP);
  129. assertNotNull(socket);
  130. }
  131.  
  132. public void testClose() {
  133. Pointer context = zmqLibrary.zmq_init(1);
  134. assertNotNull(context);
  135.  
  136. Pointer socket = zmqLibrary.zmq_socket(context, ZmqLibrary.ZMQ_REP);
  137. assertNotNull(socket);
  138. assertEquals(0, zmqLibrary.zmq_close(socket));
  139. }
  140.  
  141. public void testGetsockopt() {
  142. Pointer context = zmqLibrary.zmq_init(1);
  143. assertNotNull(context);
  144.  
  145. Pointer socket = zmqLibrary.zmq_socket(context, ZmqLibrary.ZMQ_REP);
  146. assertNotNull(socket);
  147.  
  148. assertEquals(0, getSocketOption(socket, ZmqLibrary.ZMQ_RCVMORE, 8).getInt(0));
  149. assertEquals(0, getSocketOption(socket, ZmqLibrary.ZMQ_HWM, 8).getInt(0));
  150. assertEquals(0, getSocketOption(socket, ZmqLibrary.ZMQ_SWAP, 8).getInt(0));
  151. assertEquals(0, getSocketOption(socket, ZmqLibrary.ZMQ_AFFINITY, 8).getInt(0));
  152. assertEquals(0, getSocketOption(socket, ZmqLibrary.ZMQ_IDENTITY, 255).getInt(0));
  153. assertEquals(100, getSocketOption(socket, ZmqLibrary.ZMQ_RATE, 255).getInt(0));
  154. assertEquals(10, getSocketOption(socket, ZmqLibrary.ZMQ_RECOVERY_IVL, 255).getInt(0));
  155. assertEquals(1, getSocketOption(socket, ZmqLibrary.ZMQ_MCAST_LOOP, 255).getInt(0));
  156. assertEquals(0, getSocketOption(socket, ZmqLibrary.ZMQ_SNDBUF, 255).getInt(0));
  157. assertEquals(0, getSocketOption(socket, ZmqLibrary.ZMQ_RCVBUF, 255).getInt(0));
  158. }
  159.  
  160. public void testSetsockopt() {
  161. Pointer context = zmqLibrary.zmq_init(1);
  162. assertNotNull(context);
  163.  
  164. Pointer socket = zmqLibrary.zmq_socket(context, ZmqLibrary.ZMQ_SUB);
  165. assertNotNull(socket);
  166.  
  167. checkSocketOption(socket, ZmqLibrary.ZMQ_HWM, 8, 1);
  168. checkSocketOption(socket, ZmqLibrary.ZMQ_SWAP, 8, 123);
  169. checkSocketOption(socket, ZmqLibrary.ZMQ_AFFINITY, 8, 0);
  170. // TO DO test identity with binary data
  171.  
  172. String prefix = "prefix";
  173. checkSocketOption(socket, ZmqLibrary.ZMQ_SUBSCRIBE, prefix); // Can't read this back
  174. checkSocketOption(socket, ZmqLibrary.ZMQ_UNSUBSCRIBE, prefix);
  175.  
  176. checkSocketOption(socket, ZmqLibrary.ZMQ_RATE, 8, 200);
  177. checkSocketOption(socket, ZmqLibrary.ZMQ_RECOVERY_IVL, 8, 200);
  178. // checkSocketOption(socket, ZmqLibrary.ZMQ_MCAST_LOOP, 8, 0);
  179.  
  180. checkSocketOption(socket, ZmqLibrary.ZMQ_SNDBUF, 8, 10);
  181. checkSocketOption(socket, ZmqLibrary.ZMQ_RCVBUF, 8, 10);
  182.  
  183. }
  184.  
  185. public void testBind() {
  186. Pointer context = zmqLibrary.zmq_init(1);
  187. assertNotNull(context);
  188.  
  189. Pointer socket = zmqLibrary.zmq_socket(context, ZmqLibrary.ZMQ_SUB);
  190.  
  191. assertEquals(0, zmqLibrary.zmq_bind(socket, "inproc://my_publisher"));
  192. }
  193.  
  194. public void testConnect() {
  195. Pointer context = zmqLibrary.zmq_init(1);
  196. assertNotNull(context);
  197.  
  198. Pointer socket = zmqLibrary.zmq_socket(context, ZmqLibrary.ZMQ_SUB);
  199. assertEquals(0, zmqLibrary.zmq_connect(socket, "tcp://localhost:23"));
  200. }
  201.  
  202. public void testSend() {
  203. Pointer context = zmqLibrary.zmq_init(1);
  204. assertNotNull(context);
  205.  
  206. Pointer socket = zmqLibrary.zmq_socket(context, ZmqLibrary.ZMQ_PUB);
  207. assertEquals(0, zmqLibrary.zmq_connect(socket, "tcp://localhost:23"));
  208.  
  209. zmq_msg_t message = new zmq_msg_t();
  210. zmqLibrary.zmq_msg_init(message);
  211. assertEquals(0, zmqLibrary.zmq_send(socket, message, 0));
  212. }
  213.  
  214. public void testReceive() {
  215. Pointer context = zmqLibrary.zmq_init(1);
  216. assertNotNull(context);
  217.  
  218. Pointer socket = zmqLibrary.zmq_socket(context, ZmqLibrary.ZMQ_SUB);
  219. assertEquals(0, zmqLibrary.zmq_bind(socket, "inproc://my_publisher"));
  220.  
  221. zmq_msg_t message = new zmq_msg_t();
  222. zmqLibrary.zmq_msg_init(message);
  223. // assertEquals(0, zmqLibrary.zmq_recv(socket, message, 0));
  224. }
  225.  
  226.  
  227. private void checkSocketOption(Pointer socket, int name, String expected) {
  228. Memory data = asMemory(expected);
  229. assertEquals(0, zmqLibrary.zmq_setsockopt(socket, name, data, new NativeLong(data.size())));
  230. }
  231.  
  232. private void checkSocketOption(Pointer socket, int name, int capacity, int expected) {
  233. Memory value = new Memory(capacity);
  234. value.setInt(0, expected);
  235. assertEquals(0, zmqLibrary.zmq_setsockopt(socket, name, value, new NativeLong(capacity)));
  236. assertEquals(expected, getSocketOption(socket, name, capacity).getInt(0));
  237. }
  238.  
  239. private Pointer getSocketOption(Pointer socket, int name, int capacity) {
  240. Memory value = new Memory(capacity);
  241. value.clear(capacity);
  242. LongByReference length = new LongByReference(capacity);
  243.  
  244. assertEquals(0, zmqLibrary.zmq_getsockopt(socket, name, value, length));
  245. assertNotNull(value);
  246.  
  247. return value;
  248. }
  249.  
  250. public void setUp() {
  251. zmqLibrary = (ZmqLibrary) Native.loadLibrary("zmq", ZmqLibrary.class);
  252. }
  253.  
  254. public void tearDown() {
  255. zmqLibrary = null;
  256. }
  257.  
  258. private ZmqLibrary zmqLibrary;
  259. }
Add Comment
Please, Sign In to add comment