acquia_agent.test in Acquia Connector 7.3
Same filename and directory in other branches
Tests the functionality of the Acquia Agent module.
File
acquia_agent/tests/acquia_agent.testView source
<?php
/**
* @file
* Tests the functionality of the Acquia Agent module.
*/
/**
* AcquiaAgentTestCase.
*/
class AcquiaAgentTestCase extends DrupalWebTestCase {
/**
* Privileged user.
*
* @var string
*/
protected $privilegedUser;
/**
* Network user.
*
* @var string
*/
protected $networkUser;
/**
* Setup path.
*
* @var string
*/
protected $setupPath;
/**
* Credentials path.
*
* @var string
*/
protected $credentialsPath;
/**
* Settings path.
*
* @var string
*/
protected $settingsPath;
/**
* Help path.
*
* @var string
*/
protected $helpPath;
/**
* Cloud free URL.
*
* @var string
*/
protected $cloudFreeUrl;
/**
* Cloud status report URL.
*
* @var string
*/
protected $statusReportUrl;
/**
* Expose to Simpletest UI.
*/
public static function getInfo() {
// Note: getInfo() strings are not translated with t().
return array(
'name' => 'Acquia Agent UI & Connection',
'description' => 'Test Acquia Agent UI and connecting to Acquia Insight.',
'group' => 'Acquia',
);
}
/**
* {@inheritDoc}
*/
public function setUp() {
global $base_url;
// Enable any modules required for the test.
parent::setUp('acquia_agent', 'acquia_connector_test');
// Create and log in our privileged user.
$this->privilegedUser = $this
->drupalCreateUser(array(
'access toolbar',
'access dashboard',
'administer site configuration',
'access administration pages',
));
$this
->drupalLogin($this->privilegedUser);
// Create a user that has a Network subscription.
$this->networkUser = $this
->drupalCreateUser();
user_save($this->networkUser, array(
'mail' => ACQUIA_CONNECTOR_TEST_EMAIL,
'pass' => ACQUIA_CONNECTOR_TEST_PASS,
));
// Setup variables.
$this->setupPath = 'admin/config/system/acquia-agent/setup';
$this->credentialsPath = 'admin/config/system/acquia-agent/credentials';
$this->settingsPath = 'admin/config/system/acquia-agent';
$this->helpPath = 'admin/help/acquia_agent';
$this->cloudFreeUrl = 'https://www.acquia.com/acquia-cloud-free';
$this->statusReportUrl = 'admin/reports/status';
variable_set('acquia_network_address', $base_url);
variable_set('acquia_spi_server', $base_url);
variable_set('acquia_spi_ssl_override', TRUE);
variable_set('acquia_agent_verify_peer', FALSE);
}
/**
* Helper function for storing UI strings.
*
* @param string $id
* UI string id.
*
* @return string
* The message string.
*/
private function acquiaAgentStrings($id) {
switch ($id) {
case 'free':
return 'Sign up for Acquia Cloud Free, a free Drupal sandbox to experiment with new features, test your code quality, and apply continuous integration best practices.';
case 'get-connected':
return 'If you have an Acquia Subscription, connect now. Otherwise, you can turn this message off by disabling the Acquia Subscription modules.';
case 'enter-email':
return 'Enter the email address you use to sign in to Acquia';
case 'enter-password':
return 'Enter your Acquia account password';
case 'account-not-found':
return 'Account not found';
case 'id-key':
return 'Enter your product keys from your application overview or log in to connect your site to Acquia Insight.';
case 'enter-key':
return 'Network key';
case 'subscription-not-found':
return 'Error: Subscription not found (1800)';
case 'saved':
return 'The Acquia configuration options have been saved.';
case 'subscription':
// Assumes subscription name is same as id.
return 'Subscription: ' . ACQUIA_CONNECTOR_TEST_ID;
case 'menu-active':
return 'Subscription active (expires 2023/10/8)';
case 'menu-inactive':
return 'Subscription not active';
}
return '';
}
/**
* Test Acquia Agent connection.
*/
public function testAcquiaAgentGetConnected() {
// Check for call to get connected.
$this
->drupalGet('admin');
$this
->assertText($this
->acquiaAgentStrings('free'), 'The explanation of services text exists');
$this
->assertLinkByHref($this->cloudFreeUrl, 0, 'Link to Acquia.com Cloud Services exists');
$this
->assertText($this
->acquiaAgentStrings('get-connected'), 'The call-to-action to connect text exists');
$this
->assertLink('connect now', 0, 'The "connect now" link exists');
// Check connection setup page.
$this
->drupalGet($this->setupPath);
$this
->assertText($this
->acquiaAgentStrings('enter-email'), 'The email address field label exists');
$this
->assertText($this
->acquiaAgentStrings('enter-password'), 'The password field label exists');
$this
->assertLinkByHref($this->cloudFreeUrl, 0, 'Link to Acquia.com free signup exists');
// Check errors on automatic setup page.
$edit_fields = array(
'email' => $this
->randomName(),
'pass' => $this
->randomName(),
);
$submit_button = 'Next';
$this
->drupalPost($this->setupPath, $edit_fields, $submit_button);
$this
->assertText($this
->acquiaAgentStrings('account-not-found'), 'Account not found for random automatic setup attempt');
$this
->assertText($this
->acquiaAgentStrings('menu-inactive'), 'Subscription not active menu message appears');
// Check manual connection.
$this
->drupalGet($this->credentialsPath);
$this
->assertText($this
->acquiaAgentStrings('id-key'), 'The network key and id description exists');
$this
->assertText($this
->acquiaAgentStrings('enter-key'), 'The network key field label exists');
$this
->assertLinkByHref($this->cloudFreeUrl, 0, 'Link to Acquia.com free signup exists');
// Check errors on connection page.
$edit_fields = array(
'acquia_identifier' => $this
->randomName(),
'acquia_key' => $this
->randomName(),
);
$submit_button = 'Connect';
$this
->drupalPost($this->credentialsPath, $edit_fields, $submit_button);
$this
->assertText($this
->acquiaAgentStrings('subscription-not-found'), 'Subscription not found for random credentials');
$this
->assertText($this
->acquiaAgentStrings('menu-inactive'), 'Subscription not active menu message appears');
// Connect site on key and id.
$edit_fields = array(
'acquia_identifier' => ACQUIA_CONNECTOR_TEST_ID,
'acquia_key' => ACQUIA_CONNECTOR_TEST_KEY,
);
$submit_button = 'Connect';
$this
->drupalPost($this->credentialsPath, $edit_fields, $submit_button);
$this
->drupalGet($this->settingsPath);
$this
->assertText($this
->acquiaAgentStrings('subscription'), 'Subscription connected with key and identifier');
$this
->assertLinkByHref($this->setupPath, 0, 'Link to change subscription exists');
// Connect via automatic setup.
variable_del('acquia_identifier');
variable_del('acquia_key');
$edit_fields = array(
'email' => ACQUIA_CONNECTOR_TEST_EMAIL,
'pass' => ACQUIA_CONNECTOR_TEST_PASS,
);
$submit_button = 'Next';
$this
->drupalPost($this->setupPath, $edit_fields, $submit_button);
$this
->drupalGet($this->setupPath);
$this
->drupalGet($this->settingsPath);
$this
->assertText($this
->acquiaAgentStrings('subscription'), 'Subscription connected with credentials');
// Confirm menu reports active subscription.
$this
->drupalGet('admin');
$this
->assertText($this
->acquiaAgentStrings('menu-active'), 'Subscription active menu message appears');
// Test dynamic banner.
$edit_fields = array(
'acquia_dynamic_banner' => TRUE,
);
$submit_button = 'Save settings';
$this
->drupalPost($this->settingsPath, $edit_fields, $submit_button);
$this
->assertFieldChecked('edit-acquia-dynamic-banner', '"Receive updates from Acquia" option stays saved');
}
/**
* Test Agent subscription methods.
*/
public function testAcquiaAgentSubscription() {
// Starts as inactive.
$active = acquia_agent_subscription_is_active();
$this
->assertFalse($active, 'Subscription is not currently active.');
// Confirm HTTP request count is 0 because without credentials no request
// should have been made.
$this
->assertIdentical(variable_get('acquia_connector_test-requests', 0), 0);
$subscription = acquia_agent_check_subscription();
$this
->assertFalse($subscription, 'Subscription is currently false.');
// Confirm HTTP request count is still 0.
$this
->assertIdentical(variable_get('acquia_connector_test-requests', 0), 0);
// Fail a connection.
$random_id = $this
->randomName();
$edit_fields = array(
'acquia_identifier' => $random_id,
'acquia_key' => $this
->randomName(),
);
$submit_button = 'Connect';
$this
->drupalPost($this->credentialsPath, $edit_fields, $submit_button);
// Confirm HTTP request count is 1.
$this
->assertIdentical(variable_get('acquia_connector_test-requests', 0), 1, 'Made 1 HTTP request in attempt to connect subscription.');
$active = acquia_agent_subscription_is_active();
$this
->assertFalse($active, 'Subscription is not active after failed attempt to connect.');
$this
->assertIdentical(variable_get('acquia_connector_test-requests', 0), 1, 'Still have made only 1 HTTP request');
$subscription = acquia_agent_check_subscription();
$this
->assertFalse($subscription, 'Subscription is false after failed attempt to connect.');
$this
->assertIdentical(variable_get('acquia_connector_test-requests', 0), 1, 'Still have made only 1 HTTP request');
// Test default from acquia_agent_settings().
$stored = acquia_agent_settings('acquia_subscription_data');
// Not identical since acquia_agent_has_credentials() causes stored to be
// deleted.
$this
->assertNotIdentical($subscription, $stored, 'Stored subscription data not same before connected subscription.');
$this
->assertTrue($stored['active'] === FALSE, 'Default is inactive.');
// Reset HTTP request counter;.
variable_set('acquia_connector_test-requests', 0);
// Connect.
$edit_fields = array(
'acquia_identifier' => ACQUIA_CONNECTOR_TEST_ID,
'acquia_key' => ACQUIA_CONNECTOR_TEST_KEY,
);
$this
->drupalPost($this->credentialsPath, $edit_fields, $submit_button);
// HTTP requests should now be 3 (acquia.agent.subscription.name and
// acquia.agent.subscription and acquia.agent.validate.
$this
->assertIdentical(variable_get('acquia_connector_test-requests', 0), 3, '3 HTTP requests were made during first connection.');
$active = acquia_agent_subscription_is_active();
$this
->assertTrue($active, 'Subscription is active after successful connection.');
$subscription = acquia_agent_check_subscription();
$this
->assertTrue(is_array($subscription), 'Subscription is array after successful connection.');
// Now stored subscription data should match.
$stored = acquia_agent_settings('acquia_subscription_data');
$this
->assertIdentical($subscription, $stored, 'Stored expected subscription data.');
$this
->assertIdentical(variable_get('acquia_connector_test-requests', 0), 4, '1 additional HTTP request made via acquia_agent_check_subscription().');
$this
->drupalGet('/');
$this
->drupalGet('admin');
$this
->assertIdentical(variable_get('acquia_connector_test-requests', 0), 4, 'No extra requests made during visits to other pages.');
// Reset HTTP request counter;.
variable_set('acquia_connector_test-requests', 0);
// Connect on expired subscription.
$edit_fields = array(
'acquia_identifier' => ACQUIA_CONNECTOR_TEST_EXPIRED_ID,
'acquia_key' => ACQUIA_CONNECTOR_TEST_EXPIRED_KEY,
);
$this
->drupalPost($this->credentialsPath, $edit_fields, $submit_button);
$this
->assertIdentical(variable_get('acquia_connector_test-requests', 0), 3, '3 HTTP requests were made during expired connection attempt.');
$active = acquia_agent_subscription_is_active();
$this
->assertFalse($active, 'Subscription is not active after connection with expired subscription.');
$this
->assertIdentical(variable_get('acquia_connector_test-requests', 0), 3, 'No additional HTTP requests made via acquia_agent_subscription_is_active().');
$this
->drupalGet('/');
$this
->drupalGet('admin');
$this
->assertIdentical(variable_get('acquia_connector_test-requests', 0), 3, 'No HTTP requests made during visits to other pages.');
// Stored subscription data will now be the expired integer.
$subscription = acquia_agent_check_subscription();
$this
->assertIdentical($subscription, ACQUIA_AGENT_SUBSCRIPTION_EXPIRED, 'Subscription is expired after connection with expired subscription.');
$this
->assertIdentical(variable_get('acquia_connector_test-requests', 0), 4, '1 additional request made via acquia_agent_check_subscription().');
$stored = acquia_agent_settings('acquia_subscription_data');
$this
->assertIdentical($subscription, $stored, 'Stored expected subscription data.');
// Reset HTTP request counter;.
variable_set('acquia_connector_test-requests', 0);
// Connect on subscription that will trigger a 503 response..
$edit_fields = array(
'acquia_identifier' => ACQUIA_CONNECTOR_TEST_503_ID,
'acquia_key' => ACQUIA_CONNECTOR_TEST_503_KEY,
);
$this
->drupalPost($this->credentialsPath, $edit_fields, $submit_button);
$active = acquia_agent_subscription_is_active();
$this
->assertTrue($active, 'Subscription is active after successful connection.');
// Hold onto subcription data for comparison.
$stored = acquia_agent_settings('acquia_subscription_data');
// Make another request which will trigger 503 server error.
$subscription = acquia_agent_check_subscription();
$this
->assertNotIdentical($subscription, '503', 'Subscription is not storing 503.');
$this
->assertTrue(is_array($subscription), 'Storing subscription array data.');
$this
->assertIdentical($stored, $subscription, 'Subscription data is the same.');
$this
->assertIdentical(variable_get('acquia_connector_test-requests', 0), 4, 'Have made 4 HTTP requests so far.');
}
/**
* Tests the site status callback.
*/
public function testAcquiaAgentSiteStatus() {
module_load_include('inc', 'acquia_agent', 'acquia_agent.pages');
$uuid = '0dee0d07-4032-44ea-a2f2-84182dc10d54';
$test_url = "https://insight.acquia.com/node/uuid/{$uuid}/dashboard";
$variable_keys = array(
'maintenance_mode',
'cache',
'block_cache',
);
$test_data = array(
'active' => 1,
'href' => $test_url,
);
// Set some sample test data.
variable_set('acquia_subscription_data', $test_data);
// Test _acquia_agent_get_id_from_url().
$key = _acquia_agent_get_id_from_sub($test_data);
$this
->assertIdentical($key, $uuid);
// Add a 'uuid' key to the data and make sure that is returned.
$test_data['uuid'] = $uuid;
$test_data['href'] = 'http://example.com';
$key = _acquia_agent_get_id_from_sub($test_data);
$this
->assertIdentical($key, $uuid);
$query = array(
'key' => hash('sha1', "{$key}:test"),
'nonce' => 'test',
);
$json = $this
->drupalGetAJAX('system/acquia-connector-status', array(
'query' => $query,
));
// Test the version.
$this
->assertIdentical($json['version'], '1.0', 'Correct API version found.');
// Test all of the original values match.
foreach ($variable_keys as $variable) {
$this
->assertEqual($json['data'][$variable], variable_get($variable));
}
// Set the variables to TRUE.
foreach ($variable_keys as $variable) {
variable_set($variable, TRUE);
}
$json = $this
->drupalGetAJAX('system/acquia-connector-status', array(
'query' => $query,
));
// Test the the values again.
foreach ($variable_keys as $variable) {
$this
->assertEqual($json['data'][$variable], variable_get($variable));
}
// Test invalid query string parameters for access.
// A random key value should fail.
$query['key'] = $this
->randomString(16);
$this
->drupalGetAJAX('system/acquia-connector-status', array(
'query' => $query,
));
$this
->assertResponse(403);
}
/**
* Test acquia_agent_get_server_superglobal.
*/
public function testServerSuperglobal() {
$server = array(
'acquia_agent_test_string' => 'acquia_agent_test_string_value',
'acquia_agent_test_array' => array(
1,
2,
3,
),
'acquia_agent_test_empty_string' => '',
'acquia_agent_test_empty_array' => array(),
'acquia_agent_test_null' => NULL,
);
$this
->assertIdentical(acquia_agent_get_server_superglobal(), $_SERVER, 'acquia_agent_get_server_superglobal() returns expected value');
variable_set('acquia_agent_server_superglobal', $server);
$this
->assertIdentical(acquia_agent_get_server_superglobal(), $server, 'acquia_agent_get_server_superglobal() returns expected value');
variable_del('acquia_agent_server_superglobal');
}
}
/**
* Unit tests.
*/
class AquiaAgentUnitTestCase extends DrupalUnitTestCase {
/**
* Expose to Simpletest.
*/
public static function getInfo() {
// Note: getInfo() strings should not be translated.
return array(
'name' => 'Acquia Agent unit tests',
'description' => 'Test Acquia Agent methods.',
'group' => 'Acquia',
);
}
/**
* Overrides DrupalUnitTestCase::setUp().
*
* Includes the required files in the Acquia Agent module.
*/
public function setUp() {
parent::setUp();
require_once dirname(dirname(__FILE__)) . '/acquia_agent.module';
}
/**
* Test authenticators.
*/
public function testAuthenticators() {
$identifier = $this
->randomName();
$key = $this
->randomName();
$required_keys = array(
'time',
'nonce',
'hash',
);
// Test _acquia_agent_authenticator().
$result = _acquia_agent_authenticator(array(), $identifier, $key);
$valid = is_array($result);
$this
->assertTrue($valid, '_acquia_agent_authenticator returns an array');
if ($valid) {
foreach ($required_keys as $key) {
if (!array_key_exists($key, $result)) {
$valid = FALSE;
break;
}
}
$this
->assertTrue($valid, 'Array has expected keys');
}
// Test _acquia_agent_create_authenticator().
$result = _acquia_agent_create_authenticator(array(), $identifier);
$valid = is_array($result);
$this
->assertTrue($valid, '_acquia_agent_create_authenticator returns an array');
if ($valid) {
foreach ($required_keys as $key) {
if (!array_key_exists($key, $result)) {
$valid = FALSE;
break;
}
}
$this
->assertTrue($valid, 'Array has expected keys');
}
}
/**
* Test ID from sub.
*/
public function testIdFromSub() {
$uuid = _acquia_agent_get_id_from_sub(array(
'uuid' => 'test',
));
$this
->assertIdentical('test', $uuid, 'UUID property identical');
$data = array(
'href' => 'http://example.com/network/uuid/test/dashboard',
);
$uuid = _acquia_agent_get_id_from_sub($data);
$this
->assertIdentical('test', $uuid, 'UUID extracted from href');
}
/**
* Test acquia_agent_get_server_superglobal.
*/
public function testServerSuperglobal() {
$this
->assertIdentical(acquia_agent_get_server_superglobal(), $_SERVER, 'acquia_agent_get_server_superglobal() returns expected value');
}
}
Classes
Name | Description |
---|---|
AcquiaAgentTestCase | AcquiaAgentTestCase. |
AquiaAgentUnitTestCase | Unit tests. |