security upadtes
This commit is contained in:
200
sites/all/modules/smtp/tests/smtp.unit.test
Normal file
200
sites/all/modules/smtp/tests/smtp.unit.test
Normal file
@@ -0,0 +1,200 @@
|
||||
<?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();
|
||||
}
|
||||
|
||||
}
|
12
sites/all/modules/smtp/tests/smtp_tests.info
Normal file
12
sites/all/modules/smtp/tests/smtp_tests.info
Normal file
@@ -0,0 +1,12 @@
|
||||
name = SMTP tests
|
||||
description = Contains helper logic for the SMTP tests.
|
||||
package = Mail
|
||||
core = 7.x
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2017-06-27
|
||||
version = "7.x-1.7"
|
||||
core = "7.x"
|
||||
project = "smtp"
|
||||
datestamp = "1498593247"
|
||||
|
16
sites/all/modules/smtp/tests/smtp_tests.module
Normal file
16
sites/all/modules/smtp/tests/smtp_tests.module
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
/**
|
||||
* @file
|
||||
* Primary hook implementations for the SMTP test helper module.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Implements hook_mail().
|
||||
*/
|
||||
function smtp_tests_mail($key, &$message, $params) {
|
||||
// A very rudimentary test.
|
||||
if ($key == 'smtp_basic_test') {
|
||||
$message['subject'] = t('Test email subject');
|
||||
$message['body'][] = t('Test email body.');
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user