popsu-d7/sites/all/modules/smtp/tests/smtp.unit.test
Bachir Soussi Chiadmi 8d8a60b615 security upadtes
2017-09-25 15:16:35 +02:00

201 lines
6.6 KiB
Plaintext

<?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.');
}
/**
* Gets the latest Maillog entry.
*
* @return array
* Maillog entry.
*/
protected function getLatestMaillogEntry() {
$query = 'SELECT idmaillog, header_from, header_to, header_reply_to, header_all, subject, body FROM {maillog} ORDER BY idmaillog 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();
}
}