use of com.axway.ats.action.objects.MimePackage in project ats-framework by Axway.
the class StringInMimePartRule method performMatch.
@Override
public boolean performMatch(MetaData metaData) throws RbvException {
boolean actualResult = false;
//get the emailMessage
//the meta data type check already passed, so it is safe to cast
MimePackage emailMessage = getNeededMimePackage(metaData);
InputStream actualPartDataStream = null;
BufferedInputStream bufferedStream = null;
try {
List<MimePart> partsToCheck = new ArrayList<MimePart>();
if (partIndex == PART_MAIN_MESSAGE) {
partsToCheck = emailMessage.getMimeParts();
} else {
partsToCheck.add(emailMessage.getPart(partIndex, isPartAttachment));
}
for (MimePart partToCheck : partsToCheck) {
Object partContent = partToCheck.getContent();
ContentType partContentType = new ContentType(partToCheck.getContentType());
//skip if no content
if (partContent == null) {
log.debug("MIME part does not have any content");
continue;
}
String partContentAsString;
if (partContent instanceof String) {
//directly read the content of the part
partContentAsString = (String) partContent;
} else if (partContent instanceof InputStream && partContentType.getBaseType().toLowerCase().startsWith(TEXT_MIME_TYPE_LC)) {
// to be closed in finally
actualPartDataStream = (InputStream) partContent;
//get the charset of the part - default to us-ascii
String charset = partContentType.getParameter("charset");
if (charset == null) {
charset = "us-ascii";
}
//read stream by large chunks to minimize memory fragmentation
int bufLen = 4096;
byte[] buffer = new byte[bufLen];
StringBuffer dataStringBuffer = new StringBuffer();
bufferedStream = new BufferedInputStream(actualPartDataStream);
int numBytesRead = bufLen;
while (numBytesRead == bufLen) {
numBytesRead = bufferedStream.read(buffer, 0, bufLen);
if (numBytesRead != -1) {
dataStringBuffer.append(new String(buffer, 0, numBytesRead, charset));
} else {
//we've reached end of stream
break;
}
}
partContentAsString = dataStringBuffer.toString();
} else {
log.debug("Skipping MIME part as it is binary");
continue;
}
if (isValueRegularExpression) {
actualResult = Pattern.compile(expectedValue).matcher(partContentAsString).find();
} else {
actualResult = partContentAsString.indexOf(expectedValue) >= 0;
}
//continue anymore
if (actualResult) {
break;
}
}
return actualResult;
} catch (MessagingException me) {
throw new RbvException(me);
} catch (PackageException pe) {
throw new RbvException(pe);
} catch (IOException ioe) {
throw new RbvException(ioe);
} finally {
IoUtils.closeStream(actualPartDataStream);
IoUtils.closeStream(bufferedStream);
}
}
use of com.axway.ats.action.objects.MimePackage in project ats-framework by Axway.
the class SubjectRule method performMatch.
@Override
protected boolean performMatch(MetaData metaData) throws RbvException {
//get the emailMessage
//the meta data type check already passed, so it is safe to cast
MimePackage emailMessage = getNeededMimePackage(metaData);
//get the actual subject value
String subjectValue;
try {
subjectValue = emailMessage.getSubject();
} catch (PackageException pe) {
throw new RbvException(pe);
}
//if there is no such header return false
boolean actualResult = false;
if (subjectValue != null) {
switch(matchMode) {
case LEFT:
actualResult = subjectValue.startsWith(expectedValue);
break;
case RIGHT:
actualResult = subjectValue.endsWith(expectedValue);
break;
case EQUALS:
actualResult = subjectValue.equals(expectedValue);
break;
case FIND:
actualResult = subjectValue.indexOf(expectedValue) >= 0;
break;
case REGEX:
actualResult = Pattern.compile(expectedValue).matcher(subjectValue).find();
break;
}
log.info("Actual subject is '" + subjectValue + "'");
} else {
log.info("No subject was found");
}
return actualResult;
}
use of com.axway.ats.action.objects.MimePackage in project ats-framework by Axway.
the class MimePartCountRule method performMatch.
@Override
protected boolean performMatch(MetaData metaData) throws RbvException {
//get the emailMessage
//the meta data type check already passed, so it is safe to cast
MimePackage emailMessage = getNeededMimePackage(metaData);
int actualNumParts;
if (lookForAttachments) {
actualNumParts = emailMessage.getAttachmentPartCount();
} else {
actualNumParts = emailMessage.getRegularPartCount();
}
log.debug("Actual number of parts is " + actualNumParts);
boolean actualResult = actualNumParts == expectedNumParts;
return actualResult;
}
use of com.axway.ats.action.objects.MimePackage in project ats-framework by Axway.
the class MimePartRule method performMatch.
@Override
protected boolean performMatch(MetaData metaData) throws RbvException {
boolean actualResult = false;
//get the emailMessage
//the meta data type check already passed, so it is safe to cast
MimePackage emailMessage = ((ImapMetaData) metaData).getMimePackage();
try {
InputStream actualPartDataStream = null;
try {
actualPartDataStream = emailMessage.getPartData(partIndex, isPartAttachment);
} catch (NoSuchMimePartException e) {
//if there is no such mime part then the parts do not match
log.debug("No MIME part at position '" + partIndex + "'");
return false;
}
if (actualPartDataStream != null) {
long actualChecksum = emailMessage.getPartChecksum(partIndex, isPartAttachment);
actualResult = (expectedChecksum == actualChecksum);
} else {
log.debug("MIME part at position '" + partIndex + "' does not have any content");
return false;
}
} catch (PackageException pe) {
throw new RbvException(pe);
}
return actualResult;
}
use of com.axway.ats.action.objects.MimePackage in project ats-framework by Axway.
the class Test_MimePackage method testGetContentOfSavedMail.
@Test
public void testGetContentOfSavedMail() throws PackageException {
String nestedMailPath = Test_MimePackage.class.getResource("nestedMessageGetContentTest.msg").getPath();
MimePackage mimePack = PackageLoader.loadMimePackageFromFile(nestedMailPath);
String contentHtml = mimePack.getHtmlTextBody();
assertNotNull(contentHtml);
assertTrue(contentHtml.contains("Some text<br>"));
assertEquals(null, mimePack.getPlainTextBody());
// nested MimePackage test
MimePackage nested = mimePack.getNeededMimePackage(new int[] { 0 });
String nestedHtmlBody = nested.getHtmlTextBody();
System.out.println("nestedHtmlBody: " + nestedHtmlBody);
assertTrue(nestedHtmlBody.contains("Message body<br>"));
assertNull(nested.getPlainTextBody());
}
Aggregations