Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • project/acquia_connector
  • issue/acquia_connector-3188311
  • issue/acquia_connector-3192395
  • issue/acquia_connector-3200283
  • issue/acquia_connector-3209611
  • issue/acquia_connector-3210423
  • issue/acquia_connector-3201106
  • issue/acquia_connector-3233595
  • issue/acquia_connector-3253746
  • issue/acquia_connector-3255174
  • issue/acquia_connector-3259047
  • issue/acquia_connector-3274090
  • issue/acquia_connector-3274902
  • issue/acquia_connector-3273706
  • issue/acquia_connector-3308236
  • issue/acquia_connector-3308389
  • issue/acquia_connector-3308244
  • issue/acquia_connector-3309784
  • issue/acquia_connector-3312634
  • issue/acquia_connector-3313561
  • issue/acquia_connector-3314126
  • issue/acquia_connector-3314139
  • issue/acquia_connector-3316596
  • issue/acquia_connector-3316912
  • issue/acquia_connector-3318337
  • issue/acquia_connector-3320657
  • issue/acquia_connector-3328402
  • issue/acquia_connector-3325093
  • issue/acquia_connector-3330332
  • issue/acquia_connector-3332244
  • issue/acquia_connector-3330358
  • issue/acquia_connector-3333633
  • issue/acquia_connector-3333629
  • issue/acquia_connector-3334091
  • issue/acquia_connector-3334085
  • issue/acquia_connector-3334104
  • issue/acquia_connector-3333836
  • issue/acquia_connector-3349846
  • issue/acquia_connector-3398246
  • issue/acquia_connector-3407014
  • issue/acquia_connector-3416551
  • issue/acquia_connector-3419983
  • issue/acquia_connector-3423897
  • issue/acquia_connector-3444024
  • issue/acquia_connector-3442134
  • issue/acquia_connector-3398737
  • issue/acquia_connector-3390572
  • issue/acquia_connector-3438113
  • issue/acquia_connector-3449297
  • issue/acquia_connector-3450811
  • issue/acquia_connector-3455857
  • issue/acquia_connector-3465463
  • issue/acquia_connector-3469459
  • issue/acquia_connector-3474563
  • issue/acquia_connector-3491727
55 results
Show changes
Commits on Source (3)
......@@ -160,3 +160,14 @@ function acquia_connector_cron() {
$auth_service = \Drupal::service('acquia_connector.auth_service');
$auth_service->cronRefresh();
}
/**
* Implements hook_module_implements_alter().
*/
function acquia_connector_module_implements_alter(&$implementations, $hook) {
// The acquia_telemetry is deprecated, if the module could not be uninstalled
// while upgrading to acquia_connector:4.0.0.
if (isset($implementations['acquia_telemetry'])) {
unset($implementations['acquia_telemetry']);
}
}
......@@ -5,6 +5,8 @@
* Connector updates once other modules have made their own updates.
*/
use Drupal\Core\Extension\ModuleUninstallValidatorException;
/**
* Remove deprecated update functions.
*/
......@@ -31,7 +33,14 @@ function acquia_connector_post_update_migrate_acquia_telemetry() {
}
/** @var \Drupal\Core\Extension\ModuleInstallerInterface $module_installer */
$module_installer = \Drupal::service('module_installer');
$module_installer->uninstall(['acquia_telemetry']);
try {
$module_installer->uninstall(['acquia_telemetry'], FALSE);
}
catch (ModuleUninstallValidatorException $e) {
// Do nothing, versions of acquia_cms_common and lightning_core declared
// acquia_telemetry as a dependency, and we cannot automatically uninstall
// the module.
}
}
else {
$api_key = 'f32aacddde42ad34f5a3078a621f37a9';
......
......@@ -3,6 +3,7 @@
namespace Drupal\acquia_connector\Client;
use Drupal\acquia_connector\AuthService;
use Drupal\acquia_connector\ConnectorException;
use Drupal\Component\Datetime\TimeInterface;
use Drupal\Core\Extension\ModuleExtensionList;
use Drupal\Core\Http\ClientFactory as HttpClientFactory;
......@@ -102,6 +103,10 @@ class ClientFactory {
* The client.
*/
public function getCloudApiClient(): Client {
if (!$this->authService->getAccessToken()) {
throw new ConnectorException("Missing access token.", 403);
}
// Do not influence global handler stack.
$stack = clone $this->stack;
$stack->after('prepare_body', Middleware::mapRequest(function (RequestInterface $request) {
......
......@@ -275,11 +275,11 @@ class AcquiaTelemetry implements EventSubscriberInterface {
public function getAcquiaExtensionNames() {
$module_names = array_keys($this->moduleList->getAllAvailableInfo());
return array_filter($module_names, function ($name) {
return strpos($name, 'acquia') !== FALSE ||
return array_values(array_filter($module_names, function ($name) {
return $name === 'cohesion' || strpos($name, 'acquia') !== FALSE ||
strpos($name, 'lightning_') !== FALSE ||
strpos($name, 'acms') !== FALSE;
});
}));
}
}
......@@ -178,9 +178,9 @@ class Subscription {
return $subscriptionData;
}
// If there is no local subscription data, retrieve it.
$client = $this->clientFactory->getCloudApiClient();
$subscriptionData += $this->getDefaultSubscriptionData();
try {
$client = $this->clientFactory->getCloudApiClient();
$application_response = $client->get('/api/applications/' . $this->settings->getApplicationUuid());
$application_data = Json::decode((string) $application_response->getBody());
$subscription_uuid = $application_data['subscription']['uuid'];
......@@ -194,7 +194,7 @@ class Subscription {
'value' => $subscription_info['expire_at'],
];
}
catch (RequestException $exception) {
catch (RequestException | ConnectorException $e) {
}
// If subscription expiration date passed, set gratis value to TRUE.
......
......@@ -127,4 +127,28 @@ abstract class AcquiaConnectorTestBase extends KernelTestBase {
return (string) $this->container->get('renderer')->renderPlain($build);
}
/**
* Populates the oAuth settings with dummy data.
*
* @param array $data
* oAuth settings data.
*/
protected function populateOauthSettings(array $data = []): void {
if (!$data) {
$data = [
'access_token' => 'ACCESS_TOKEN',
'refresh_token' => 'REFRESH_TOKEN',
];
}
$this->container
->get('keyvalue.expirable')
->get('acquia_connector')
->setWithExpire(
'oauth',
$data,
5400
);
}
}
<?php
declare(strict_types=1);
namespace Drupal\Tests\acquia_connector\Kernel;
use Drupal\acquia_telemetry\Telemetry;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\DependencyInjection\ServiceModifierInterface;
/**
* @group acquia_connector
* @requires module acquia_telemetry
*/
final class AcquiaTelemetryIntegrationTest extends AcquiaConnectorTestBase implements ServiceModifierInterface {
/**
* {@inheritdoc}
*/
protected static $modules = [
'acquia_telemetry',
];
/**
* {@inheritdoc}
*/
public function alter(ContainerBuilder $container) {
if ($container->hasDefinition('acquia.telemetry')) {
$mocked_telemetry = $this->createMock(Telemetry::class);
$mocked_telemetry->expects($this->never())->method('sendTelemetry');
$mocked_telemetry->expects($this->never())->method('getAcquiaExtensionNames');
$container->set('acquia.telemetry', $mocked_telemetry);
}
}
/**
* {@inheritdoc}
*/
protected function setUp(): void {
$this->checkRequirements();
parent::setUp();
$this->installSchema('user', ['users_data']);
}
/**
* Verifies acquia_telemetry's hooks are disabled.
*
* The telemetry service is mocked to not expect to be called, invoking the
* hooks provide the assertion.
*/
public function testHooksDisabled(): void {
$module_handler = $this->container->get('module_handler');
$module_handler->invokeAll('cron');
$modules = ['acquia_foo', 'lightning_bar'];
$module_handler->invokeAll('modules_installed', [$modules]);
$module_handler->invokeAll('modules_uninstalled', [$modules]);
}
}
......@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Drupal\Tests\acquia_connector\Kernel\Client;
use Drupal\acquia_connector\ConnectorException;
use Drupal\Tests\acquia_connector\Kernel\AcquiaConnectorTestBase;
/**
......@@ -16,6 +17,7 @@ final class ClientFactoryTest extends AcquiaConnectorTestBase {
* Tests the config for the created client.
*/
public function testClientConfig(): void {
$this->populateOauthSettings();
$client = $this->container->get('acquia_connector.client.factory')->getCloudApiClient();
$config = $client->getConfig();
self::assertEquals('https://cloud.acquia.com', (string) $config['base_uri']);
......@@ -27,20 +29,22 @@ final class ClientFactoryTest extends AcquiaConnectorTestBase {
* Tests the refresh token and retry middleware.
*/
public function testRefreshRetryMiddleware(): void {
$this->container
->get('keyvalue.expirable')
->get('acquia_connector')
->setWithExpire(
'oauth',
[
'access_token' => 'ACCESS_TOKEN_RETRY_MIDDLEWARE',
'refresh_token' => 'REFRESH_TOKEN',
],
5400
);
$this->populateOauthSettings([
'access_token' => 'ACCESS_TOKEN_RETRY_MIDDLEWARE',
'refresh_token' => 'REFRESH_TOKEN',
]);
$client = $this->container->get('acquia_connector.client.factory')->getCloudApiClient();
$response = $client->get('/test-retry-middleware');
self::assertEquals(200, $response->getStatusCode());
}
/**
* Tests exception if we don't have a token set.
*/
public function testConnectorException(): void {
$this->expectException(ConnectorException::class);
$this->expectExceptionMessage("Missing access token.");
$this->container->get('acquia_connector.client.factory')->getCloudApiClient();
}
}
......@@ -33,6 +33,7 @@ final class AcquiaTelemetryTest extends AcquiaConnectorTestBase {
*/
public function testTelemetry(): void {
$state = $this->container->get('state');
$request = Request::create('/');
$this->container->get('http_kernel')->terminate(
$request,
......
......@@ -133,4 +133,34 @@ final class SubscriptionRefreshTest extends AcquiaConnectorTestBase {
}
/**
* Test getSubscription().
*/
public function testGetSubscription(): void {
$this->container->get('state')->setMultiple([
'acquia_connector.identifier' => 'ABC',
'acquia_connector.key' => 'DEF',
'acquia_connector.application_uuid' => 'a47ac10b-58cc-4372-a567-0e02b2c3d470',
]);
$this->container->get('acquia_connector.subscription')->populateSettings();
// Assert that we don't get data if oAuth data is empty.
$keys = ["subscription_name", "expiration_date"];
$subscription_data_no_oauth = $this->container->get('acquia_connector.subscription')
->getSubscription(TRUE);
foreach ($keys as $key) {
$this->assertEmpty($subscription_data_no_oauth[$key]);
}
// Assert again with oAuth data set.
$this->populateOauthSettings();
$subscription_data_with_oauth = $this->container->get('acquia_connector.subscription')
->getSubscription(TRUE);
foreach ($keys as $key) {
$this->assertNotEmpty($subscription_data_with_oauth[$key]);
}
}
}
<?php
declare(strict_types=1);
namespace Drupal\Tests\acquia_connector\Unit;
use Drupal\acquia_connector\EventSubscriber\KernelTerminate\AcquiaTelemetry;
use Drupal\Component\Datetime\TimeInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Extension\ModuleExtensionList;
use Drupal\Core\State\StateInterface;
use Drupal\Tests\UnitTestCase;
use GuzzleHttp\ClientInterface;
/**
* @group acquia_connector
*/
final class AcquiaTelemetryTest extends UnitTestCase {
/**
* Tests the filtered module names for Acquia extensions.
*/
public function testGetAcquiaExtensionNames() {
$modules = [
'token',
'acquia_connector',
'acquia_perz',
'acquia_cms_page',
'cohesion',
'acquia_cms_toolbar',
'media_acquiadam',
];
sort($modules);
$module_list = $this->createMock(ModuleExtensionList::class);
$module_list->method('getAllAvailableInfo')->willReturn(array_combine($modules, $modules));
$sut = new AcquiaTelemetry(
$module_list,
$this->createMock(ClientInterface::class),
$this->createMock(ConfigFactoryInterface::class),
$this->createMock(StateInterface::class),
$this->createMock(TimeInterface::class)
);
self::assertEquals(
[
'acquia_cms_page',
'acquia_cms_toolbar',
'acquia_connector',
'acquia_perz',
'cohesion',
'media_acquiadam',
],
$sut->getAcquiaExtensionNames()
);
}
}