You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2010/02/22 20:31:30 UTC

svn commit: r915029 - /jakarta/jmeter/trunk/src/protocol/mail/org/apache/jmeter/protocol/mail/sampler/MailReaderSampler.java

Author: sebb
Date: Mon Feb 22 19:31:29 2010
New Revision: 915029

URL: http://svn.apache.org/viewvc?rev=915029&view=rev
Log:
Always default the encoding
Allow for nested MimeMultipart message parts
Don't include '@' in toString() if user name was not provided

Modified:
    jakarta/jmeter/trunk/src/protocol/mail/org/apache/jmeter/protocol/mail/sampler/MailReaderSampler.java

Modified: jakarta/jmeter/trunk/src/protocol/mail/org/apache/jmeter/protocol/mail/sampler/MailReaderSampler.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/mail/org/apache/jmeter/protocol/mail/sampler/MailReaderSampler.java?rev=915029&r1=915028&r2=915029&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/protocol/mail/org/apache/jmeter/protocol/mail/sampler/MailReaderSampler.java (original)
+++ jakarta/jmeter/trunk/src/protocol/mail/org/apache/jmeter/protocol/mail/sampler/MailReaderSampler.java Mon Feb 22 19:31:29 2010
@@ -68,6 +68,8 @@
     private final static String STORE_MIME_MESSAGE = "storeMimeMessage";
     //-
     
+    private static final String RFC_822_DEFAULT_ENCODING = "iso-8859-1"; // RFC 822 uses ascii per default
+
     public static final String DEFAULT_PROTOCOL = "pop3";  // $NON-NLS-1$
 
     public static final int ALL_MESSAGES = -1; // special value
@@ -148,6 +150,8 @@
 
                 final String contentType = message.getContentType();
                 child.setContentType(contentType);// Store the content-type
+                child.setDataEncoding(RFC_822_DEFAULT_ENCODING); // RFC 822 uses ascii per default
+                child.setEncodingAndType(contentType);// Parse the content-type
 
                 if (isStoreMimeMessage()) {
                     // Don't save headers - they are already in the raw message
@@ -155,10 +159,7 @@
                     message.writeTo(bout);
                     child.setResponseData(bout.toByteArray()); // Save raw message
                     child.setDataType(SampleResult.TEXT);
-                    child.setDataEncoding("iso-8859-1"); // RFC 822 uses ascii
-                    child.setEncodingAndType(contentType);// Parse the content-type
                 } else {
-                    child.setEncodingAndType(contentType);// Parse the content-type
                     @SuppressWarnings("unchecked") // Javadoc for the API says this is OK
                     Enumeration<Header> hdrs = message.getAllHeaders();
                     while(hdrs.hasMoreElements()){
@@ -250,38 +251,45 @@
         cdata.append(NEW_LINE);
         Object content = message.getContent();
         if (content instanceof MimeMultipart) {
-            MimeMultipart mmp = (MimeMultipart) content;
-            String preamble = mmp.getPreamble();
-            if (preamble != null ){
-                cdata.append(preamble);
-            }
-            child.setResponseData(cdata.toString(),child.getDataEncodingNoDefault());
-            int count = mmp.getCount();
-            for (int j=0; j<count;j++){
-                BodyPart bodyPart = mmp.getBodyPart(j);
-                final Object bodyPartContent = bodyPart.getContent();
-                final String contentType = bodyPart.getContentType();
-                SampleResult sr = new SampleResult();
-                sr.setSampleLabel("Part: "+j);
-                sr.setContentType(contentType);
-                sr.setEncodingAndType(contentType);
-                sr.sampleStart();
-                if (bodyPartContent instanceof InputStream){
-                    sr.setResponseData(IOUtils.toByteArray((InputStream) bodyPartContent));
-                } else {
-                    sr.setResponseData(bodyPartContent.toString(),sr.getDataEncodingNoDefault());
-                }
-                sr.setResponseOK();
-                sr.sampleEnd();
-                child.addSubResult(sr);
-            }
+            appendMultiPart(child, cdata, (MimeMultipart) content);
+        } else if (content instanceof InputStream){
+            child.setResponseData(IOUtils.toByteArray((InputStream) content));
         } else {
-            if (content instanceof InputStream){
-                child.setResponseData(IOUtils.toByteArray((InputStream) content));
+            cdata.append(content);
+            child.setResponseData(cdata.toString(),child.getDataEncodingNoDefault());
+        }
+    }
+
+    private void appendMultiPart(SampleResult child, StringBuilder cdata,
+            MimeMultipart mmp) throws MessagingException, IOException {
+        String preamble = mmp.getPreamble();
+        if (preamble != null ){
+            cdata.append(preamble);
+        }
+        child.setResponseData(cdata.toString(),child.getDataEncodingNoDefault());
+        int count = mmp.getCount();
+        for (int j=0; j<count;j++){
+            BodyPart bodyPart = mmp.getBodyPart(j);
+            final Object bodyPartContent = bodyPart.getContent();
+            final String contentType = bodyPart.getContentType();
+            SampleResult sr = new SampleResult();
+            sr.setSampleLabel("Part: "+j);
+            sr.setContentType(contentType);
+            sr.setDataEncoding(RFC_822_DEFAULT_ENCODING);
+            sr.setEncodingAndType(contentType);
+            sr.sampleStart();
+            if (bodyPartContent instanceof InputStream){
+                sr.setResponseData(IOUtils.toByteArray((InputStream) bodyPartContent));
+            } else if (bodyPartContent instanceof MimeMultipart){
+                appendMultiPart(sr, cdata, (MimeMultipart) bodyPartContent);
             } else {
-                cdata.append(content);
-                child.setResponseData(cdata.toString(),child.getDataEncodingNoDefault());
+                sr.setResponseData(bodyPartContent.toString(),sr.getDataEncodingNoDefault());
             }
+            sr.setResponseOK();
+            if (sr.getEndTime()==0){// not been set by any child samples
+                sr.sampleEnd();
+            }
+            child.addSubResult(sr);
         }
     }
 
@@ -450,8 +458,11 @@
         StringBuilder sb = new StringBuilder();
         sb.append(getServerType());
         sb.append("://");
-        sb.append(getUserName());
-        sb.append("@");
+        String name = getUserName();
+        if (name.length() > 0){
+            sb.append(name);
+            sb.append("@");
+        }
         sb.append(getServer());
         int port=getPortAsInt();
         if (port != -1){



---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org