Advertisement
Guest User

Untitled

a guest
Apr 16th, 2017
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.49 KB | None | 0 0
  1. package org.example.jmssampler;
  2.  
  3. import org.apache.activemq.ActiveMQConnectionFactory;
  4. import org.apache.camel.component.crypto.DigitalSignatureConstants;
  5. import org.apache.jmeter.config.Arguments;
  6. import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
  7. import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
  8. import org.apache.jmeter.samplers.SampleResult;
  9.  
  10. import javax.jms.*;
  11. import java.io.FileInputStream;
  12. import java.io.Serializable;
  13. import java.security.KeyStore;
  14. import java.security.PrivateKey;
  15. import java.security.Signature;
  16. import java.util.Base64;
  17. import java.util.HashMap;
  18. import java.util.Map;
  19.  
  20.  
  21. public class JMSSampler extends AbstractJavaSamplerClient implements Serializable {
  22. private static final long serialVersionUID = 1L;
  23.  
  24. // set up default arguments for the JMeter GUI
  25. @Override
  26. public Arguments getDefaultParameters() {
  27. Arguments defaultParameters = new Arguments();
  28. defaultParameters.addArgument("username", "");
  29. defaultParameters.addArgument("password", "");
  30. defaultParameters.addArgument("queueName", "");
  31. defaultParameters.addArgument("protocol", "tcp");
  32. defaultParameters.addArgument("hostname", "localhost");
  33. defaultParameters.addArgument("port", "61616");
  34. defaultParameters.addArgument("keystorePath", "keystore.jks");
  35. defaultParameters.addArgument("keystorePassword", "password");
  36. defaultParameters.addArgument("truststorePath", "truststore.jks");
  37. defaultParameters.addArgument("truststorePassword", "password");
  38. defaultParameters.addArgument("signingAlias", "localclient");
  39. defaultParameters.addArgument("messagePath", "jmstest.xml");
  40. return defaultParameters;
  41. }
  42.  
  43. @Override
  44. public SampleResult runTest(JavaSamplerContext context) {
  45. // pull parameters
  46. String username = context.getParameter("username");
  47. String password = context.getParameter("password");
  48. String queueName = context.getParameter("queueName");
  49. String protocol = context.getParameter("protocol");
  50. String hostname = context.getParameter("hostname");
  51. String port = context.getParameter("port");
  52. String endpoint = protocol + "://" + hostname + ":" + port;
  53. String keystorePath = context.getParameter("keystorePath");
  54. String keystorePassword = context.getParameter("keystorePassword");
  55. String trustStorePath = context.getParameter("trustStorePath");
  56. String trustStorePassword = context.getParameter("trustStorePassword");
  57. String signingAlias = context.getParameter("signingAlias");
  58. String message;
  59. String messagePath = context.getParameter("messagePath");
  60. SampleResult result = new SampleResult();
  61. result.sampleStart(); // start stopwatch
  62.  
  63. try {
  64. // Get message from file
  65. // System.out.println("step 0: Load message");
  66. // System.out.println("Working Directory = " + System.getProperty("user.dir"));
  67. FileInputStream xml = null;
  68. StringBuilder builder = new StringBuilder();
  69. xml = new FileInputStream(messagePath);
  70. int content;
  71. while ((content = xml.read()) != -1) {
  72. // convert to char and display it
  73. builder.append((char) content);
  74. }
  75. message = builder.toString();
  76.  
  77. // Get private key from keystore
  78. // System.out.println("step 1: Get keystore");
  79. KeyStore ks = KeyStore.getInstance("jks");
  80. char [] keyPwd = keystorePassword.toCharArray();
  81. ks.load(new FileInputStream(keystorePath), keyPwd);
  82. PrivateKey key = (PrivateKey) ks.getKey(signingAlias, keyPwd);
  83.  
  84. // If private key available proceed
  85. if (key != null) {
  86. // System.out.println("step 2: Get signature instance");
  87. Signature signature = Signature.getInstance("SHA256withRSA");
  88.  
  89. // System.out.println("step 3: Initiate signature");
  90. signature.initSign(key);
  91.  
  92. // System.out.println("step 4: Update signature with message content");
  93. signature.update(message.getBytes());
  94.  
  95. // System.out.println("step 5: Sign message with private key");
  96. byte[] messageSignatureByteArray = signature.sign();
  97.  
  98. // System.out.println("step 6: Encode message to base64");
  99. String messageSignature = Base64.getEncoder().encodeToString(messageSignatureByteArray);
  100.  
  101. // System.out.println("step 7: Get jms header content");
  102. // // System.out.println(messageSignature);
  103.  
  104. // System.out.println("step 8: Start jms connection");
  105. ConnectionFactory factory = new ActiveMQConnectionFactory(endpoint);
  106. Connection jmsConnection = factory.createConnection(username, password);
  107. jmsConnection.start();
  108.  
  109. // System.out.println("step 9: Start session on jms queue");
  110. Session session = jmsConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
  111. Destination destinationQueue = session.createQueue(queueName);
  112. MessageProducer producer = session.createProducer(destinationQueue);
  113. producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
  114.  
  115. // Create the message
  116. // System.out.println("step 10: Create the message");
  117. Message outgoingMessage = session.createTextMessage(message);
  118.  
  119. // Set JMS headers
  120. // System.out.println("step 11: Add header to jms request");
  121. Map<String,String> jmsHeaders = new HashMap<String, String>();
  122. jmsHeaders.put(DigitalSignatureConstants.SIGNATURE, messageSignature);
  123. outgoingMessage.setJMSCorrelationID(jmsHeaders.get("id"));
  124. for (Map.Entry<String,String> header: jmsHeaders.entrySet()) {
  125. // // System.out.println("key: " + header.getKey() + "\tvalue: " + header.getValue());
  126. outgoingMessage.setStringProperty(header.getKey(),header.getValue());
  127. }
  128.  
  129. // System.out.println("step 12: Send message to queue");
  130. producer.send(outgoingMessage);
  131.  
  132. // System.out.println("step 13: Close queue session");
  133. session.close();
  134.  
  135. // System.out.println("step 14: Close jms connection");
  136. jmsConnection.close();
  137.  
  138. result.sampleEnd(); // stop stopwatch
  139. result.setSuccessful(true);
  140. result.setResponseMessage("Successfully posted message into the queue");
  141. result.setResponseCodeOK(); // 200 code
  142.  
  143. } else {
  144. result.sampleEnd(); // stop stopwatch
  145. result.setSuccessful(false);
  146. result.setResponseMessage("\tError: No private key found on keystore.");
  147. result.setResponseCode("500");
  148. }
  149.  
  150. } catch (Exception e) {
  151. result.sampleEnd(); // stop stopwatch
  152. result.setSuccessful(false);
  153. result.setResponseMessage("Exception: " + e );
  154.  
  155. // get stack trace as a String to return as document data
  156. java.io.StringWriter stringWriter = new java.io.StringWriter();
  157. e.printStackTrace(new java.io.PrintWriter(stringWriter));
  158. result.setDataType(org.apache.jmeter.samplers.SampleResult.TEXT);
  159. result.setResponseCode("500");
  160. }
  161.  
  162. return result;
  163. }
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement