summaryrefslogtreecommitdiff
path: root/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug51Test.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug51Test.php')
-rw-r--r--vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug51Test.php110
1 files changed, 110 insertions, 0 deletions
diff --git a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug51Test.php b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug51Test.php
new file mode 100644
index 0000000..48074f0
--- /dev/null
+++ b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug51Test.php
@@ -0,0 +1,110 @@
+<?php
+
+class Swift_Bug51Test extends \SwiftMailerTestCase
+{
+ private $_attachmentFile;
+ private $_outputFile;
+
+ protected function setUp()
+ {
+ $this->_attachmentFile = sys_get_temp_dir().'/attach.rand.bin';
+ file_put_contents($this->_attachmentFile, '');
+
+ $this->_outputFile = sys_get_temp_dir().'/attach.out.bin';
+ file_put_contents($this->_outputFile, '');
+ }
+
+ protected function tearDown()
+ {
+ unlink($this->_attachmentFile);
+ unlink($this->_outputFile);
+ }
+
+ public function testAttachmentsDoNotGetTruncatedUsingToByteStream()
+ {
+ //Run 100 times with 10KB attachments
+ for ($i = 0; $i < 10; ++$i) {
+ $message = $this->_createMessageWithRandomAttachment(
+ 10000, $this->_attachmentFile
+ );
+
+ file_put_contents($this->_outputFile, '');
+ $message->toByteStream(
+ new Swift_ByteStream_FileByteStream($this->_outputFile, true)
+ );
+
+ $emailSource = file_get_contents($this->_outputFile);
+
+ $this->assertAttachmentFromSourceMatches(
+ file_get_contents($this->_attachmentFile),
+ $emailSource
+ );
+ }
+ }
+
+ public function testAttachmentsDoNotGetTruncatedUsingToString()
+ {
+ //Run 100 times with 10KB attachments
+ for ($i = 0; $i < 10; ++$i) {
+ $message = $this->_createMessageWithRandomAttachment(
+ 10000, $this->_attachmentFile
+ );
+
+ $emailSource = $message->toString();
+
+ $this->assertAttachmentFromSourceMatches(
+ file_get_contents($this->_attachmentFile),
+ $emailSource
+ );
+ }
+ }
+
+ public function assertAttachmentFromSourceMatches($attachmentData, $source)
+ {
+ $encHeader = 'Content-Transfer-Encoding: base64';
+ $base64declaration = strpos($source, $encHeader);
+
+ $attachmentDataStart = strpos($source, "\r\n\r\n", $base64declaration);
+ $attachmentDataEnd = strpos($source, "\r\n--", $attachmentDataStart);
+
+ if (false === $attachmentDataEnd) {
+ $attachmentBase64 = trim(substr($source, $attachmentDataStart));
+ } else {
+ $attachmentBase64 = trim(substr(
+ $source, $attachmentDataStart,
+ $attachmentDataEnd - $attachmentDataStart
+ ));
+ }
+
+ $this->assertIdenticalBinary($attachmentData, base64_decode($attachmentBase64));
+ }
+
+ private function _fillFileWithRandomBytes($byteCount, $file)
+ {
+ // I was going to use dd with if=/dev/random but this way seems more
+ // cross platform even if a hella expensive!!
+
+ file_put_contents($file, '');
+ $fp = fopen($file, 'wb');
+ for ($i = 0; $i < $byteCount; ++$i) {
+ $byteVal = rand(0, 255);
+ fwrite($fp, pack('i', $byteVal));
+ }
+ fclose($fp);
+ }
+
+ private function _createMessageWithRandomAttachment($size, $attachmentPath)
+ {
+ $this->_fillFileWithRandomBytes($size, $attachmentPath);
+
+ $message = Swift_Message::newInstance()
+ ->setSubject('test')
+ ->setBody('test')
+ ->setFrom('a@b.c')
+ ->setTo('d@e.f')
+ ->attach(Swift_Attachment::fromPath($attachmentPath))
+ ;
+
+ return $message;
+ }
+}