summaryrefslogtreecommitdiff
path: root/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ThrottlerPluginTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ThrottlerPluginTest.php')
-rw-r--r--vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ThrottlerPluginTest.php102
1 files changed, 102 insertions, 0 deletions
diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ThrottlerPluginTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ThrottlerPluginTest.php
new file mode 100644
index 0000000..309f506
--- /dev/null
+++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ThrottlerPluginTest.php
@@ -0,0 +1,102 @@
+<?php
+
+class Swift_Plugins_ThrottlerPluginTest extends \SwiftMailerTestCase
+{
+ public function testBytesPerMinuteThrottling()
+ {
+ $sleeper = $this->_createSleeper();
+ $timer = $this->_createTimer();
+
+ //10MB/min
+ $plugin = new Swift_Plugins_ThrottlerPlugin(
+ 10000000, Swift_Plugins_ThrottlerPlugin::BYTES_PER_MINUTE,
+ $sleeper, $timer
+ );
+
+ $timer->shouldReceive('getTimestamp')->once()->andReturn(0);
+ $timer->shouldReceive('getTimestamp')->once()->andReturn(1); //expected 0.6
+ $timer->shouldReceive('getTimestamp')->once()->andReturn(1); //expected 1.2 (sleep 1)
+ $timer->shouldReceive('getTimestamp')->once()->andReturn(2); //expected 1.8
+ $timer->shouldReceive('getTimestamp')->once()->andReturn(2); //expected 2.4 (sleep 1)
+ $sleeper->shouldReceive('sleep')->twice()->with(1);
+
+ //10,000,000 bytes per minute
+ //100,000 bytes per email
+
+ // .: (10,000,000/100,000)/60 emails per second = 1.667 emais/sec
+
+ $message = $this->_createMessageWithByteCount(100000); //100KB
+
+ $evt = $this->_createSendEvent($message);
+
+ for ($i = 0; $i < 5; ++$i) {
+ $plugin->beforeSendPerformed($evt);
+ $plugin->sendPerformed($evt);
+ }
+ }
+
+ public function testMessagesPerMinuteThrottling()
+ {
+ $sleeper = $this->_createSleeper();
+ $timer = $this->_createTimer();
+
+ //60/min
+ $plugin = new Swift_Plugins_ThrottlerPlugin(
+ 60, Swift_Plugins_ThrottlerPlugin::MESSAGES_PER_MINUTE,
+ $sleeper, $timer
+ );
+
+ $timer->shouldReceive('getTimestamp')->once()->andReturn(0);
+ $timer->shouldReceive('getTimestamp')->once()->andReturn(0); //expected 1 (sleep 1)
+ $timer->shouldReceive('getTimestamp')->once()->andReturn(2); //expected 2
+ $timer->shouldReceive('getTimestamp')->once()->andReturn(2); //expected 3 (sleep 1)
+ $timer->shouldReceive('getTimestamp')->once()->andReturn(4); //expected 4
+ $sleeper->shouldReceive('sleep')->twice()->with(1);
+
+ //60 messages per minute
+ //1 message per second
+
+ $message = $this->_createMessageWithByteCount(10);
+
+ $evt = $this->_createSendEvent($message);
+
+ for ($i = 0; $i < 5; ++$i) {
+ $plugin->beforeSendPerformed($evt);
+ $plugin->sendPerformed($evt);
+ }
+ }
+
+ private function _createSleeper()
+ {
+ return $this->getMockery('Swift_Plugins_Sleeper');
+ }
+
+ private function _createTimer()
+ {
+ return $this->getMockery('Swift_Plugins_Timer');
+ }
+
+ private function _createMessageWithByteCount($bytes)
+ {
+ $msg = $this->getMockery('Swift_Mime_Message');
+ $msg->shouldReceive('toByteStream')
+ ->zeroOrMoreTimes()
+ ->andReturnUsing(function ($is) use ($bytes) {
+ for ($i = 0; $i < $bytes; ++$i) {
+ $is->write('x');
+ }
+ });
+
+ return $msg;
+ }
+
+ private function _createSendEvent($message)
+ {
+ $evt = $this->getMockery('Swift_Events_SendEvent');
+ $evt->shouldReceive('getMessage')
+ ->zeroOrMoreTimes()
+ ->andReturn($message);
+
+ return $evt;
+ }
+}