smtp.unit.test in SMTP Authentication Support 7
Same filename and directory in other branches
Some tests for the SMTP module.
File
tests/smtp.unit.testView source
<?php
/**
* @file
* Some tests for the SMTP module.
*/
class SmtpUnitTest extends DrupalWebTestCase {
/**
* {@inheritdoc}
*/
public static function getInfo() {
return array(
'name' => 'SMTP unit tests',
'description' => 'Test the SMTP module.',
'group' => 'SMTP',
);
}
/**
* {@inheritdoc}
*/
function setUp(array $modules = array()) {
// Requirements.
$modules[] = 'smtp';
// Some extra logic for fully testing the module.
$modules[] = 'smtp_tests';
// This module is used to log all emails so that the delivery can be
// confirmed.
$modules[] = 'maillog';
parent::setUp($modules);
// Take over the email system.
variable_set('mail_system', array(
'default-system' => 'SmtpMailSystem',
));
// Turn on the mail module.
variable_set('smtp_on', TRUE);
// Do not actually deliver the emails.
variable_set('smtp_deliver', FALSE);
// Use Maillog to log all emails.
variable_set('maillog_log', TRUE);
}
/**
* Confirm that SMTP has taken over the 'mail_system' variable.
*/
function testSetup() {
$enabled = variable_get('mail_system', array());
$should_be = array(
'default-system' => 'SmtpMailSystem',
);
$this
->assertEqual($enabled, $should_be, 'SMTP is controlling mail delivery.');
$delivery = variable_get('smtp_on', TRUE);
$this
->assertEqual($delivery, TRUE, 'SMTP is enabled.');
$delivery = variable_get('smtp_deliver', FALSE);
$this
->assertEqual($delivery, FALSE, 'Email delivery is disabled.');
$logging = variable_get('maillog_log', TRUE);
$this
->assertEqual($logging, TRUE, 'Email delivery is being logged.');
}
/**
* Tests logging mail with maillog module.
*/
public function testLogging() {
$langcode = language_default('language');
// This is automatically assigned by Simpletest.
$sender = 'simpletest@example.com';
// Send an email.
$to_email = 'to_test@example.com';
$reply_email = 'reply_test@example.com';
$params = array();
drupal_mail('smtp_tests', 'smtp_basic_test', $to_email, $langcode, $params);
// The SMTP module controls the 'from' address but defaults to using the
// site's system email address.
$from_email = variable_get('site_mail', '');
// Compare the maillog db entry with the sent mail.
$logged_email = $this
->getLatestMaillogEntry();
$this
->assertTrue(!empty($logged_email), 'The test email was captured.');
$this
->assertEqual($to_email, $logged_email['header_to']);
//, 'Email "to" address is correct.');
$this
->assertEqual($from_email, $logged_email['header_from']);
//, 'Email "from" address is correct.');
$this
->assertEqual($from_email, $logged_email['header_all']['From']);
//, 'Email "from" header is correct.');
$this
->assertEqual($sender, $logged_email['header_all']['Sender']);
//, 'Email "sender" header is correct.');
$this
->assertEqual($sender, $logged_email['header_all']['Return-Path']);
//, 'Email "return-path" header is correct.');
$this
->assertEqual('Drupal', $logged_email['header_all']['X-Mailer']);
//, 'Email "x-mailer" header is correct.');
$this
->assertEqual(t('Test email subject'), $logged_email['subject']);
//, 'Email subject is correct.');
$this
->assertEqual(t('Test email body.') . "\n", $logged_email['body']);
//, 'Email body is correct.');
}
/**
* Confirm the queue works.
*/
public function testQueue() {
// Turn on the queue.
variable_set('smtp_queue', TRUE);
// Send a test message.
$langcode = language_default('language');
$sender = 'simpletest@example.com';
$to_email = 'to_test@example.com';
$reply_email = 'reply_test@example.com';
$params = array();
drupal_mail('smtp_tests', 'smtp_basic_test', $to_email, $langcode, $params);
// Check the queue for messages.
$queue_count = $this
->getQueueCount();
$this
->assertEqual($queue_count, 1, 'An email was found in the send queue.');
}
/**
* Confirm the queue works.
*/
public function testFailQueue() {
// Turn on the queue failover.
variable_set('smtp_queue_fail', TRUE);
// Make sure the queue is disabled.
variable_set('smtp_queue', FALSE);
// Turn on email delivery.
variable_set('smtp_deliver', TRUE);
// Set some fake values for the delivery, it should fail and then cause the
// email to go in to the queue.
variable_set('smtp_from', 'drupal@example.com');
variable_set('smtp_fromname', 'Drupal Simpletest');
variable_set('smtp_host', 'smtp.gmail.com');
variable_set('smtp_hostbackup', '');
variable_set('smtp_password', 'THIS WILL NOT WORK!');
variable_set('smtp_port', '465');
variable_set('smtp_protocol', 'ssl');
variable_set('smtp_username', 'hello@example.com');
// Send a test message.
$langcode = language_default('language');
$sender = 'simpletest@example.com';
$to_email = 'to_test@example.com';
$reply_email = 'reply_test@example.com';
$params = array();
drupal_mail('smtp_tests', 'smtp_basic_test', $to_email, $langcode, $params);
// Check the queue for messages.
$queue_count = $this
->getQueueCount('smtp_failure_queue');
$this
->assertEqual($queue_count, 1, 'An email was found in the failure queue.');
$queue_count = $this
->getQueueCount();
$this
->assertEqual($queue_count, 0, 'An email was not found in the regular email queue.');
// Run the queue so that messages can be moved to the normal email queue.
drupal_cron_run();
// Check the queue for messages.
$queue_count = $this
->getQueueCount();
$this
->assertEqual($queue_count, 1, 'An email was found in the regular email queue.');
$queue_count = $this
->getQueueCount('smtp_failure_queue');
$this
->assertEqual($queue_count, 0, 'An email was not found in the failure queue.');
}
/**
* Tests email address parsing.
*/
public function testAddressParsing() {
$scenarios = array(
array(
// Input.
'name@example.com',
// Expected.
array(
'email' => 'name@example.com',
),
),
array(
' name@example.com',
array(
'input' => 'name@example.com',
'email' => 'name@example.com',
),
),
array(
'name@example.com ',
array(
'input' => 'name@example.com',
'email' => 'name@example.com',
),
),
array(
'some name <address@example.com>',
array(
'name' => 'some name',
'email' => 'address@example.com',
),
),
array(
'"some name" <address@example.com>',
array(
'name' => 'some name',
'email' => 'address@example.com',
),
),
array(
'<address@example.com>',
array(
'email' => 'address@example.com',
),
),
);
$mail_system = new SmtpMailSystemWrapper();
foreach ($scenarios as $scenario) {
list($input, $expected) = $scenario;
$ret = $mail_system
->getComponents($input);
if (!empty($expected['input'])) {
$this
->assertIdentical($expected['input'], $ret['input']);
}
else {
$this
->assertIdentical($input, $ret['input']);
}
$this
->assertIdentical(!empty($expected['name']) ? $expected['name'] : '', $ret['name']);
$this
->assertIdentical(!empty($expected['email']) ? $expected['email'] : '', $ret['email']);
}
}
/**
* Gets the latest Maillog entry.
*
* @return array
* Maillog entry.
*/
protected function getLatestMaillogEntry() {
$query = 'SELECT id, header_from, header_to, header_reply_to, header_all, subject, body FROM {maillog} ORDER BY id DESC';
$result = db_query_range($query, 0, 1);
if ($maillog = $result
->fetchAssoc()) {
// Unserialize values.
$maillog['header_all'] = unserialize($maillog['header_all']);
}
return $maillog;
}
/**
* Get the number of emails in a specific queue.
*
* @param string $queue
* The name of the queue to add the emails to.
*
* @return int
* The number of messages found in the requested queue.
*/
protected function getQueueCount($queue = 'smtp_send_queue') {
return db_query("SELECT count('name') FROM {queue} WHERE name = :queue", array(
':queue' => $queue,
))
->fetchField();
}
}
Classes
Name | Description |
---|---|
SmtpUnitTest | @file Some tests for the SMTP module. |