cloud-8.x-2.0-beta1/modules/cloud_service_providers/aws_cloud/tests/src/Traits/AwsCloudTestMockTrait.php
modules/cloud_service_providers/aws_cloud/tests/src/Traits/AwsCloudTestMockTrait.php
<?php
namespace Drupal\Tests\aws_cloud\Traits;
use Drupal\Component\Serialization\Yaml;
use Drupal\Tests\aws_cloud\Functional\Utils;
use Drupal\aws_cloud\Entity\Ec2\Volume;
/**
* The trait creating mock data for aws cloud testing.
*/
trait AwsCloudTestMockTrait {
/**
* Add Elastic IP mock data.
*
* @param string $name
* The Elastic IP name.
* @param string $public_ip
* The public IP.
* @param string $domain
* The domain.
*/
protected function addElasticIpMockData($name = '', $public_ip = '', $domain = 'standard') {
$mock_data = $this->getMockDataFromConfig();
$elastic_ip = [
'AllocationId' => $name,
'PublicIp' => $public_ip,
'PrivateIpAddress' => Utils::getRandomPrivateIp(),
'Domain' => $domain,
];
$mock_data['DescribeAddresses']['Addresses'][] = $elastic_ip;
$this->updateMockDataToConfig($mock_data);
}
/**
* Add instance mock data.
*
* @param string $name
* Instance name.
* @param string $key_pair_name
* Key pair name.
* @param string $state
* Instance state.
* @param string $schedule_value
* Schedule value.
*
* @return string
* The instance ID.
*/
protected function addInstanceMockData($name = '', $key_pair_name = '', $state = 'running', $schedule_value = '') {
// Prepare the mock data for an instance.
$public_ip = Utils::getRandomPublicIp();
$private_ip = Utils::getRandomPrivateIp();
$regions = ['us-west-1', 'us-west-2'];
$region = $regions[array_rand($regions)];
$vars = [
'name' => $name,
'key_name' => $key_pair_name,
'account_id' => rand(100000000000, 999999999999),
'instance_id' => "i-{$this->getRandomAwsId()}",
'reservation_id' => "r-{$this->getRandomAwsId()}",
'group_name' => $this->random->name(8, TRUE),
'host_id' => $this->random->name(8, TRUE),
'affinity' => $this->random->name(8, TRUE),
'launch_time' => date('c'),
'security_group_id' => 'sg-' . $this->getRandomAwsId(),
'security_group_name' => $this->random->name(10, TRUE),
'public_dns_name' => Utils::getPublicDns($region, $public_ip),
'public_ip_address' => $public_ip,
'private_dns_name' => Utils::getPrivateDns($region, $private_ip),
'private_ip_address' => $private_ip,
'vpc_id' => "vpc-{$this->getRandomAwsId()}",
'subnet_id' => "subnet-{$this->getRandomAwsId()}",
'image_id' => "ami-{$this->getRandomAwsId()}",
'reason' => $this->random->string(16, TRUE),
'state' => $state,
'uid' => $this->loggedInUser->id(),
];
$vars = array_merge($this->getMockDataTemplateVars(), $vars);
$instance_mock_data_content = $this->getMockDataFileContent('Drupal\Tests\aws_cloud\Functional\Ec2\InstanceTest', $vars, '_instance');
$instance_mock_data = Yaml::decode($instance_mock_data_content);
// OwnerId and ReservationId need to be set.
$mock_data = $this->getMockDataFromConfig();
$mock_data['DescribeInstances']['Reservations'][0]['OwnerId'] = $this->random->name(8, TRUE);
$mock_data['DescribeInstances']['Reservations'][0]['ReservationId'] = $this->random->name(8, TRUE);
// Add Schedule information if available.
if (!empty($schedule_value)) {
$instance_mock_data['Tags'][] = [
'Key' => 'Schedule',
'Value' => $schedule_value,
];
}
$mock_data['DescribeInstances']['Reservations'][0]['Instances'][] = $instance_mock_data;
$this->updateMockDataToConfig($mock_data);
return $vars['instance_id'];
}
/**
* Add Network Interface mock data.
*
* @param array $data
* Array of Network Interface data.
*/
protected function addNetworkInterfaceMockData(array &$data) {
$mock_data = $this->getMockDataFromConfig();
$vars = $this->latestTemplateVars;
$network_interface = [
'NetworkInterfaceId' => $vars['network_interface_id'],
'VpcId' => $vars['vpc_id'],
'Description' => $data['description'],
'SubnetId' => $data['subnet_id'],
'MacAddress' => NULL,
'Status' => 'in-use',
'PrivateDnsName' => NULL,
'OwnerId' => $this->random->name(8, TRUE),
'SourceDestCheck' => NULL,
'PrivateIpAddress' => $data['primary_private_ip'],
'Attachment' => [
'AttachmentId' => isset($data['attachment_id']) ? $data['attachment_id'] : NULL,
'InstanceOwnerId' => NULL,
'Status' => NULL,
'InstanceId' => NULL,
'DeviceIndex' => '',
'DeleteOnTermination' => NULL,
],
'Association' => [
'AllocationId' => '',
],
'PrivateIpAddresses' => [
[
'Primary' => TRUE,
'PrivateIpAddress' => $data['primary_private_ip'],
],
],
'Groups' => [['GroupName' => $data['security_groups[]']]],
];
$data['name'] = $network_interface['NetworkInterfaceId'];
$mock_data['DescribeNetworkInterfaces']['NetworkInterfaces'][] = $network_interface;
$this->updateMockDataToConfig($mock_data);
}
/**
* Delete first Elastic IP in mock data.
*/
protected function deleteFirstElasticIpMockData() {
$mock_data = $this->getMockDataFromConfig();
$addresses = $mock_data['DescribeAddresses']['Addresses'];
array_shift($addresses);
$mock_data['DescribeAddresses']['Addresses'] = $addresses;
$this->updateMockDataToConfig($mock_data);
}
/**
* Delete all Elastic IP in mock data.
*/
protected function deleteAllElasticIpInMockData() {
$mock_data = $this->getMockDataFromConfig();
$mock_data['DescribeAddresses']['Addresses'] = [];
$this->updateMockDataToConfig($mock_data);
}
/**
* Update domain in mock data.
*
* @param string $domain
* A domain.
*/
protected function updateDomainMockData($domain) {
$mock_data = $this->getMockDataFromConfig();
$mock_data['AllocateAddress']['Domain'] = $domain;
$this->updateMockDataToConfig($mock_data);
}
/**
* Update Elastic IP mock data.
*
* @param int $elastic_ip_index
* The index of Elastic IP.
* @param string $name
* The Elastic IP name.
* @param string $association_id
* The association ID.
* @param string $instance_id
* The instance ID.
*/
protected function updateElasticIpMockData($elastic_ip_index = 0, $name = '', $association_id = '', $instance_id = '') {
$mock_data = $this->getMockDataFromConfig();
$mock_data['DescribeAddresses']['Addresses'][$elastic_ip_index]['AllocationId'] = $name;
$mock_data['DescribeAddresses']['Addresses'][$elastic_ip_index]['AssociationId'] = $association_id;
$mock_data['DescribeAddresses']['Addresses'][$elastic_ip_index]['InstanceId'] = $instance_id;
$this->updateMockDataToConfig($mock_data);
}
/**
* Update instance in mock data.
*
* @param int $index
* Instance index.
* @param string $name
* Instance name.
* @param string $state
* Instance state.
*/
protected function updateInstanceMockData($index = 0, $name = '', $state = 'stopped') {
$mock_data = $this->getMockDataFromConfig();
if (empty($name)) {
// Prepare the mock data for an instance.
$public_ip = Utils::getRandomPublicIp();
$private_ip = Utils::getRandomPrivateIp();
$regions = ['us-west-1', 'us-west-2'];
$region = $regions[array_rand($regions)];
// These key-value pairs are replaced into the place holder such as {{..}}
// in <ResourceName>Test.hml.
$vars = [
// 12 digits.
'account_id' => rand(100000000000, 999999999999),
'reservation_id' => 'r-' . $this->getRandomAwsId(),
'group_name' => $this->random->name(8, TRUE),
'host_id' => $this->random->name(8, TRUE),
'affinity' => $this->random->name(8, TRUE),
'launch_time' => date('c'),
'security_group_id' => 'sg-' . $this->getRandomAwsId(),
'security_group_name' => $this->random->name(10, TRUE),
'public_dns_name' => Utils::getPublicDns($region, $public_ip),
'public_ip_address' => $public_ip,
'private_dns_name' => Utils::getPrivateDns($region, $private_ip),
'private_ip_address' => $private_ip,
'vpc_id' => 'vpc-' . $this->getRandomAwsId(),
'subnet_id' => 'subnet-' . $this->getRandomAwsId(),
'image_id' => 'ami-' . $this->getRandomAwsId(),
'reason' => $this->random->string(16, TRUE),
'instance_id' => 'i-' . $this->getRandomAwsId(),
'uid' => $this->loggedInUser->id(),
];
// Create a mock data for an Instance.
$instance_mock_data_content = $this->getMockDataFileContent('Drupal\Tests\aws_cloud\Functional\Ec2\InstanceTest', $vars, '_instance');
$instance_mock_data = Yaml::decode($instance_mock_data_content);
// OwnerId and ReservationId need to be set.
$mock_data['DescribeInstances']['Reservations'][0]['OwnerId'] = $this->random->name(8, TRUE);
$mock_data['DescribeInstances']['Reservations'][0]['ReservationId'] = $this->random->name(8, TRUE);
$mock_data['DescribeInstances']['Reservations'][0]['Instances'][$index] = $instance_mock_data;
}
$mock_data['DescribeInstances']['Reservations'][0]['Instances'][$index]['Tags'][0]['Value'] = $name;
$mock_data['DescribeInstances']['Reservations'][0]['Instances'][$index]['State']['Name'] = $state;
$this->updateMockDataToConfig($mock_data);
}
/**
* Add Image mock data.
*
* @param string $name
* The Image name.
* @param string $instance_id
* The instance ID.
* @param string $description
* The description.
* @param string $cloud_context
* The cloud context.
*/
protected function addImageMockData($name, $instance_id, $description, $cloud_context) {
$cloud_config_plugin = \Drupal::service('plugin.manager.cloud_config_plugin');
$cloud_config_plugin->setCloudContext($cloud_context);
$cloud_config = $cloud_config_plugin->loadConfigEntity();
$account_id = $cloud_config->get('field_account_id')->value;
$mock_data = $this->getMockDataFromConfig();
$vars = $this->getMockDataTemplateVars();
$image = [
'ImageId' => $vars['image_id'],
'OwnerId' => $account_id,
'Architecture' => 'x86_64',
'Description' => $description,
'VirtualizationType' => 'hvm',
'RootDeviceType' => 'ebs',
'RootDeviceName' => '/dev/sda1',
'Name' => $name,
'KernelId' => $vars['kernel_id'],
'RamdiskId' => $vars['ramdisk_id'],
'ImageType' => 'machine',
'ProductCodes' => ['ProductCode' => [$vars['product_code1'], $vars['product_code2']]],
'ImageLocation' => $vars['image_location'],
'StateReason' => ['Message' => $vars['state_reason_message']],
'Platform' => $vars['platform'],
'Public' => NULL,
'State' => 'available',
'CreationDate' => $vars['creation_date'],
'BlockDeviceMappings' => [['DeviceName' => NULL]],
];
$mock_data['DescribeImages']['Images'][] = $image;
$this->updateMockDataToConfig($mock_data);
}
/**
* Update image mock data.
*
* @param string $image_id
* Image ID.
* @param string $name
* Image name.
* @param string $product_code1
* Product code1.
* @param string $product_code2
* Product code2.
*/
protected function updateImageMockData($image_id, $name, $product_code1, $product_code2) {
$mock_data = $this->getMockDataFromConfig();
$mock_data['DescribeImages']['Images'][0]['ImageId'] = $image_id;
$mock_data['DescribeImages']['Images'][0]['Name'] = $name;
$mock_data['DescribeImages']['Images'][0]['ProductCodes'][0]['ProductCode'] = $product_code1;
$mock_data['DescribeImages']['Images'][0]['ProductCodes'][1]['ProductCode'] = $product_code2;
$this->updateMockDataToConfig($mock_data);
}
/**
* Delete first Image in mock data.
*/
protected function deleteFirstImageMockData() {
$mock_data = $this->getMockDataFromConfig();
$images = $mock_data['DescribeImages']['Images'];
array_shift($images);
$mock_data['DescribeImages']['Images'] = $images;
$this->updateMockDataToConfig($mock_data);
}
/**
* Add KeyPair mock data.
*
* @param string $name
* The key pair name.
*/
protected function addKeyPairMockData($name) {
$mock_data = $this->getMockDataFromConfig();
$vars = $this->getMockDataTemplateVars();
$key_pair = [
'KeyName' => $name,
'KeyFingerprint' => $vars['key_fingerprint'],
];
$mock_data['DescribeKeyPairs']['KeyPairs'][] = $key_pair;
$this->updateMockDataToConfig($mock_data);
}
/**
* Delete first Key Pair in mock data.
*/
protected function deleteFirstKeyPairMockData() {
$mock_data = $this->getMockDataFromConfig();
$key_pairs = $mock_data['DescribeKeyPairs']['KeyPairs'];
array_shift($key_pairs);
$mock_data['DescribeKeyPairs']['KeyPairs'] = $key_pairs;
$this->updateMockDataToConfig($mock_data);
}
/**
* Update Key Pair mock data.
*
* @param int $key_pair_index
* The index of key pair.
* @param string $name
* The key pair name.
*/
protected function updateKeyPairMockData($key_pair_index, $name) {
$mock_data = $this->getMockDataFromConfig();
$mock_data['DescribeKeyPairs']['KeyPairs'][$key_pair_index]['KeyName'] = $name;
$this->updateMockDataToConfig($mock_data);
}
/**
* Delete first Network Interface in mock data.
*/
protected function deleteFirstNetworkInterfaceMockData() {
$mock_data = $this->getMockDataFromConfig();
$network_interfaces = $mock_data['DescribeNetworkInterfaces']['NetworkInterfaces'];
array_shift($network_interfaces);
$mock_data['DescribeNetworkInterfaces']['NetworkInterfaces'] = $network_interfaces;
$this->updateMockDataToConfig($mock_data);
}
/**
* Update Network Interface mock data.
*
* @param int $network_interface_index
* The index of Network Interface.
* @param string $name
* The network Interface name.
*/
protected function updateNetworkInterfaceMockData($network_interface_index, $name) {
$mock_data = $this->getMockDataFromConfig();
$mock_data['DescribeNetworkInterfaces']['NetworkInterfaces'][$network_interface_index]['NetworkInterfaceId'] = $name;
$this->updateMockDataToConfig($mock_data);
}
/**
* Add security group mock data.
*
* @param string $name
* The security group name.
* @param string $description
* The description.
* @param string $vpc_id
* The VPC ID.
*
* @return string
* The security group ID.
*/
protected function addSecurityGroupMockData($name, $description, $vpc_id = NULL) {
$mock_data = $this->getMockDataFromConfig();
$vars = $this->getMockDataTemplateVars();
$security_group = [
'GroupId' => $vars['group_id'],
'GroupName' => $name,
'Description' => $description,
'VpcId' => isset($vpc_id) ? $vpc_id : $vars['vpc_id'],
'OwnerId' => $this->random->name(8, TRUE),
];
$mock_data['DescribeSecurityGroups']['SecurityGroups'][] = $security_group;
$this->updateMockDataToConfig($mock_data);
return $vars['group_id'];
}
/**
* Delete first security group in mock data.
*/
protected function deleteFirstSecurityGroupMockData() {
$mock_data = $this->getMockDataFromConfig();
$security_groups = $mock_data['DescribeSecurityGroups']['SecurityGroups'];
array_shift($security_groups);
$mock_data['DescribeSecurityGroups']['SecurityGroups'] = $security_groups;
$this->updateMockDataToConfig($mock_data);
}
/**
* Add Snapshot mock data.
*
* @param string $name
* The snapshot name.
* @param string $volume_id
* The volume ID.
* @param string $description
* The description.
*/
protected function addSnapshotMockData(&$name, $volume_id, $description) {
$mock_data = $this->getMockDataFromConfig();
$vars = $this->getMockDataTemplateVars();
$snapshot = [
'SnapshotId' => $vars['snapshot_id'],
'VolumeSize' => 10,
'Description' => $description,
'State' => 'completed',
'VolumeId' => $volume_id,
'Progress' => 100,
'Encrypted' => FALSE,
'KmsKeyId' => NULL,
'OwnerId' => $this->random->name(8, TRUE),
'OwnerAlias' => NULL,
'StateMessage' => NULL,
'StartTime' => $vars['start_time'],
];
$name = $snapshot['SnapshotId'];
$mock_data['DescribeSnapshots']['Snapshots'][] = $snapshot;
$this->updateMockDataToConfig($mock_data);
return $vars['snapshot_id'];
}
/**
* Delete first Snapshot in mock data.
*/
protected function deleteFirstSnapshotMockData() {
$mock_data = $this->getMockDataFromConfig();
$snapshots = $mock_data['DescribeSnapshots']['Snapshots'];
array_shift($snapshots);
$mock_data['DescribeSnapshots']['Snapshots'] = $snapshots;
$this->updateMockDataToConfig($mock_data);
}
/**
* Update Snapshot mock data.
*
* @param int $snapshot_index
* The index of Snapshot.
* @param string $name
* The snapshot name.
*/
protected function updateSnapshotMockData($snapshot_index, $name) {
$mock_data = $this->getMockDataFromConfig();
$mock_data['DescribeSnapshots']['Snapshots'][$snapshot_index]['Tags'][0] = ['Key' => 'Name', 'Value' => $name];
$this->updateMockDataToConfig($mock_data);
}
/**
* Add Volume mock data.
*
* @param array $data
* Array of volume data.
*/
protected function addVolumeMockData(array $data) {
$mock_data = $this->getMockDataFromConfig();
$vars = $this->getMockDataTemplateVars();
$volume = [
'VolumeId' => $data['name'],
'Attachments' => ['InstanceId' => NULL],
'State' => 'available',
'SnapshotId' => $data['snapshot_id'],
'Size' => $data['size'],
'VirtualizationType' => NULL,
'VolumeType' => $data['volume_type'],
'Iops' => $data['iops'],
'AvailabilityZone' => $data['availability_zone'],
'Encrypted' => $data['encrypted'],
'KmsKeyId' => NULL,
'CreateTime' => $vars['create_time'],
'Tags' => [
[
'Key' => Volume::TAG_CREATED_BY_UID,
'Value' => Utils::getRandomUid(),
],
],
];
$mock_data['DescribeVolumes']['Volumes'][] = $volume;
$this->updateMockDataToConfig($mock_data);
$snapshot_name = 'snapshot-name' . $this->random->name(10, TRUE);
$this->updateDescribeSnapshotsMockData([['id' => $data['snapshot_id'], 'name' => $snapshot_name]]);
}
/**
* Delete first Volume in mock data.
*/
protected function deleteFirstVolumeMockData() {
$mock_data = $this->getMockDataFromConfig();
$addresses = $mock_data['DescribeVolumes']['Volumes'];
array_shift($addresses);
$mock_data['DescribeVolumes']['Volumes'] = $addresses;
$this->updateMockDataToConfig($mock_data);
}
/**
* Update Volume mock data.
*
* @param int $volume_index
* The index of Volume.
* @param string $name
* The volume name.
* @param string $instance_id
* The instance ID.
*/
protected function updateVolumeMockData($volume_index, $name, $instance_id) {
$mock_data = $this->getMockDataFromConfig();
$mock_data['DescribeVolumes']['Volumes'][$volume_index]['VolumeId'] = $name;
$mock_data['DescribeVolumes']['Volumes'][$volume_index]['InstanceId'] = $instance_id;
$mock_data['DescribeVolumes']['Volumes'][$volume_index]['State'] = 'in-use';
$this->updateMockDataToConfig($mock_data);
}
/**
* Update the volume state and instance.
*/
protected function updateAttachDetachVolumeMockData($api, $device, $volume_id, $instance_id, $state) {
$mock_data = $this->getMockDataFromConfig();
$mock_data[$api] = [
'Device' => $device,
'InstanceId' => $instance_id,
'State' => $state,
'VolumeId' => $volume_id,
];
$this->updateMockDataToConfig($mock_data);
}
/**
* Delete first instance in mock data.
*/
protected function deleteFirstInstanceMockData() {
$mock_data = $this->getMockDataFromConfig();
$instances = $mock_data['DescribeInstances']['Reservations'][0]['Instances'];
array_shift($instances);
$mock_data['DescribeInstances']['Reservations'][0]['Instances'] = $instances;
$this->updateMockDataToConfig($mock_data);
}
/**
* Update security group in mock data.
*
* @param string $security_group_name1
* Security group name1.
* @param string $security_group_name2
* Security group name2.
*/
protected function updateSecurityGroupsMockData($security_group_name1, $security_group_name2) {
$mock_data = $this->getMockDataFromConfig();
$mock_data['DescribeInstances']['Reservations'][0]['Instances'][0]['SecurityGroups']
= [['GroupName' => $security_group_name1], ['GroupName' => $security_group_name2]];
$this->updateMockDataToConfig($mock_data);
}
/**
* Add VPC to mock data.
*
* @param array $vpc_data
* VPC data.
* @param string $vpc_id
* VPC ID.
*/
protected function addVpcMockData(array $vpc_data, $vpc_id) {
$mock_data = $this->getMockDataFromConfig();
$mock_data['DescribeVpcs']['Vpcs'][] = [
'VpcId' => $vpc_id,
'State' => 'available',
'CidrBlock' => $vpc_data['cidr_block'],
'CidrBlockAssociationSet' => [
[
'CidrBlock' => $vpc_data['cidr_block'],
'AssociationId' => 'vpc-cidr-assoc' . $this->getRandomAwsId(),
'CidrBlockState' => [
'State' => 'associated',
],
],
],
'Ipv6CidrBlockAssociationSet' => [],
'DhcpOptionsId' => 'dopt-' . $this->getRandomAwsId(),
'InstanceTenancy' => 'default',
'IsDefault' => FALSE,
'Tags' => [
[
'Key' => 'Name',
'Value' => $vpc_data['name'],
],
],
];
$this->updateMockDataToConfig($mock_data);
}
/**
* Add subnet to mock data.
*
* @param array $subnet_data
* Subnet data.
* @param string $subnet_id
* Subnet ID.
*/
protected function addSubnetMockData(array $subnet_data, $subnet_id) {
$mock_data = $this->getMockDataFromConfig();
$mock_data['DescribeSubnets']['Subnets'][] = [
'VpcId' => $subnet_data['vpc_id'],
'SubnetId' => $subnet_id,
'State' => 'available',
'CidrBlock' => $subnet_data['cidr_block'],
'Tags' => [
[
'Key' => 'Name',
'Value' => $subnet_data['name'],
],
],
];
$this->updateMockDataToConfig($mock_data);
}
/**
* Delete the VPC of mock data.
*
* @param int $index
* The index of vpc.
*/
protected function deleteVpcMockData($index) {
$mock_data = $this->getMockDataFromConfig();
unset($mock_data['DescribeVpcs']['Vpcs'][$index]);
$this->updateMockDataToConfig($mock_data);
}
/**
* Delete the subnet of mock data.
*
* @param int $index
* The index of subnet.
*/
protected function deleteSubnetMockData($index) {
$mock_data = $this->getMockDataFromConfig();
unset($mock_data['DescribeSubnets']['Subnets'][$index]);
$this->updateMockDataToConfig($mock_data);
}
/**
* Modify the VPC of mock data.
*
* @param int $index
* The index of vpc.
* @param array $vpc_data
* VPC data.
*/
protected function modifyVpcMockData($index, array $vpc_data) {
$mock_data = $this->getMockDataFromConfig();
$mock_data['DescribeVpcs']['Vpcs'][$index]['Tags'] = [
[
'Key' => 'Name',
'Value' => $vpc_data['name'],
],
];
$this->updateMockDataToConfig($mock_data);
}
/**
* Modify the subnet of mock data.
*
* @param int $index
* The index of subnet.
* @param array $subnet_data
* Subnet data.
*/
protected function modifySubnetMockData($index, array $subnet_data) {
$mock_data = $this->getMockDataFromConfig();
$mock_data['DescribeSubnets']['Subnets'][$index]['Tags'] = [
[
'Key' => 'Name',
'Value' => $subnet_data['name'],
],
];
$this->updateMockDataToConfig($mock_data);
}
/**
* Update describe snapshot in mock data.
*
* @param array $test_cases
* Test cases array.
*/
protected function updateDescribeSnapshotsMockData(array $test_cases) {
$random = $this->random;
$mock_data = $this->getMockDataFromConfig();
$mock_data['DescribeSnapshots'] = ['Snapshots' => []];
foreach ($test_cases as $test_case) {
$snapshot = [
'SnapshotId' => $test_case['id'],
'VolumeSize' => 10,
'Description' => $random->string(32, TRUE),
'State' => 'completed',
'VolumeId' => 'vol-' . $this->getRandomAwsId(),
'Progress' => '100%',
'Encrypted' => TRUE,
'KmsKeyId' => 'arn:aws:kms:us-east-1:123456789012:key/6876fb1b-example',
'OwnerId' => strval(rand(100000000000, 999999999999)),
'OwnerAlias' => 'amazon',
'StateMessage' => $random->string(32, TRUE),
'StartTime' => date('c'),
];
if (isset($test_case['name'])) {
$snapshot['Tags'] = [
['Key' => 'Name', 'Value' => $test_case['name']],
];
}
$mock_data['DescribeSnapshots']['Snapshots'][] = $snapshot;
}
$this->updateMockDataToConfig($mock_data);
}
/**
* Update IAM roles to mock data.
*
* @param array $iam_roles
* The IAM roles.
*/
protected function updateIamRolesMockData(array $iam_roles) {
$mock_data = $this->getMockDataFromConfig();
$mock_data['ListInstanceProfiles']['InstanceProfiles'] = $iam_roles;
$this->updateMockDataToConfig($mock_data);
}
/**
* Update describe security groups in mock data.
*
* @param array $security_groups
* Security groups array.
*/
protected function updateDescribeSecurityGroupsMockData(array $security_groups) {
$mock_data = $this->getMockDataFromConfig();
$mock_data['DescribeSecurityGroups']['SecurityGroups'] = $security_groups;
$this->updateMockDataToConfig($mock_data);
}
/**
* Update instance type in mock data.
*
* @param string $instance_type
* Instance type.
*/
protected function updateInstanceTypeMockData($instance_type) {
$mock_data = $this->getMockDataFromConfig();
$mock_data['DescribeInstances']['Reservations'][0]['Instances'][0]['InstanceType']
= $instance_type;
$this->updateMockDataToConfig($mock_data);
}
/**
* Update image creation in mock data.
*
* @param string $image_id
* Image ID.
* @param string $image_name
* Image name.
* @param string $image_state
* Image state.
*/
protected function updateImageCreationMockData($image_id, $image_name, $image_state) {
$mock_data = $this->getMockDataFromConfig();
$vars = [
'image_id' => $image_id,
'name' => $image_name,
'state' => $image_state,
];
// Unset DescribeImages so that the state can be updated.
unset($mock_data['DescribeImages']);
unset($mock_data['CreateImage']);
$image_mock_data_content = $this->getMockDataFileContent('Drupal\Tests\aws_cloud\Functional\Ec2\ImageTest', $vars);
$image_mock_data = Yaml::decode($image_mock_data_content);
$image_mock_data['CreateImage']['ImageId'] = $image_id;
$image_mock_data['CreateImage']['Name'] = $image_name;
$image_mock_data['DescribeImages']['Images'][0]['ImageId'] = $image_id;
$image_mock_data['DescribeImages']['Images'][0]['Name'] = $image_name;
$image_mock_data['DescribeImages']['Images'][0]['State'] = $image_state;
$this->updateMockDataToConfig(array_merge($image_mock_data, $mock_data));
}
/**
* Update schedule tag in mock data.
*
* @param string $schedule_value
* Schedule value.
*/
protected function updateScheduleTagMockData($schedule_value) {
$mock_data = $this->getMockDataFromConfig();
$mock_data['DescribeInstances']['Reservations'][0]['Instances'][0]['Tags'][0]['Name'] = 'Schedule';
$mock_data['DescribeInstances']['Reservations'][0]['Instances'][0]['Tags'][0]['Value'] = $schedule_value;
$this->updateMockDataToConfig($mock_data);
}
/**
* Update create volume in mock data.
*
* @param string $state
* Volume state.
* @param string $volume_id
* Volume ID.
*/
protected function updateCreateVolumeMockData($state, $volume_id) {
$mock_data = $this->getMockDataFromConfig();
$mock_data['CreateVolume']['State'] = $state;
$mock_data['CreateVolume']['VolumeId'] = $volume_id;
$this->updateMockDataToConfig($mock_data);
}
/**
* Update mock data related to security group rules.
*
* @param array $rules
* The security group rules.
* @param int $rule_type
* The security group rule type.
*/
protected function updateRulesMockData(array $rules, $rule_type) {
$mock_data = $this->getMockDataFromConfig();
$security_group =& $mock_data['DescribeSecurityGroups']['SecurityGroups'][0];
$security_group['IpPermissions'] = [];
$security_group['IpPermissionsEgress'] = [];
foreach ($rules as $rule) {
$permission_name = 'IpPermissions';
if ($rule['type'] == $rule_type) {
$permission_name = 'IpPermissionsEgress';
}
$permission = [
'IpProtocol' => 'tcp',
'FromPort' => $rule['from_port'],
'ToPort' => $rule['to_port'],
];
if ($rule['source'] == 'ip4') {
$permission['IpRanges'] = [
['CidrIp' => $rule['cidr_ip']],
];
}
elseif ($rule['source'] == 'ip6') {
$permission['Ipv6Ranges'] = [
['CidrIpv6' => $rule['cidr_ip_v6']],
];
}
elseif ($rule['source'] == 'group') {
$permission['UserIdGroupPairs'] = [
[
'UserId' => $rule['user_id'],
'GroupId' => $rule['group_id'],
'VpcId' => $rule['vpc_id'],
'VpcPeeringConnectionId' => $rule['peering_connection_id'],
'PeeringStatus' => $rule['peering_status'],
],
];
}
$security_group[$permission_name][] = $permission;
}
$this->updateMockDataToConfig($mock_data);
}
/**
* Add describe snapshots in mock data.
*
* @param string $snapshot_id
* Snapshot ID.
*/
protected function addDescribeSnapshotsMockData($snapshot_id) {
$mock_data = $this->getMockDataFromConfig();
$mock_data['DescribeSnapshots'] = [
'Snapshots' => [
[
'SnapshotId' => $snapshot_id,
],
],
];
$this->updateMockDataToConfig($mock_data);
}
/**
* Update describe volumes in mock data.
*
* @param array $volumes
* Volumes array.
*/
protected function updateDescribeVolumesMockData(array $volumes) {
$mock_data = $this->getMockDataFromConfig();
$mock_data['DescribeVolumes']['Volumes'] = $volumes;
$this->updateMockDataToConfig($mock_data);
}
/**
* Update VPCs and subnets to mock data.
*
* @param array $vpcs
* The VPCs array.
* @param array $subnets
* The subnets array.
*/
protected function updateVpcsAndSubnetsMockData(array $vpcs, array $subnets) {
$mock_data = $this->getMockDataFromConfig();
$mock_data['DescribeVpcs']['Vpcs'] = $vpcs;
$mock_data['DescribeSubnets']['Subnets'] = $subnets;
$this->updateMockDataToConfig($mock_data);
}
/**
* Update DescribeVpcs in mock data.
*
* @param int $count
* The count of VPCs.
*
* @return array
* The IDs of VPCs.
*/
protected function updateVpcsMockData($count) {
$mock_data = $this->getMockDataFromConfig();
$vpcs = [];
$vpc_ids = [];
for ($i = 0; $i < $count; $i++) {
$vpc_id = 'vpc-' . $this->getRandomAwsId();
$vpcs[] = [
'VpcId' => $vpc_id,
'Name' => sprintf('vpc-random-data #%d - %s - %s', $i + 1, date('Y/m/d H:i:s'), $this->random->name(32, TRUE)),
'CidrBlock' => Utils::getRandomCidr(),
];
$vpc_ids[] = $vpc_id;
}
$mock_data['DescribeVpcs']['Vpcs'] = $vpcs;
$this->updateMockDataToConfig($mock_data);
return $vpc_ids;
}
/**
* Update tags in mock data.
*
* @param int $index
* The index to update tags.
* @param string $entity_name
* The entity name in mock data.
* @param string $key
* The tag key.
* @param string $value
* The tag value.
* @param bool $delete_flg
* Whether delete or not.
* @param string $tag_name
* The tag name.
*/
protected function updateTagsInMockData($index, $entity_name, $key, $value, $delete_flg = FALSE, $tag_name = 'Tags') {
$mock_data = $this->getMockDataFromConfig();
$describe_name = 'Describe' . $entity_name;
$data = &$mock_data[$describe_name][$entity_name][$index];
if ($delete_flg) {
if (isset($data[$tag_name])) {
foreach ($data[$tag_name] as $idx => $tag) {
if ($tag['Key'] == $key) {
unset($data[$tag_name][$idx]);
}
}
}
}
else {
if (!isset($data[$tag_name])) {
$data[$tag_name] = [];
}
else {
foreach ($data[$tag_name] as $idx => $tag) {
if ($tag['Key'] == $key) {
unset($data[$tag_name][$idx]);
}
}
}
$data[$tag_name][] = ['Key' => $key, 'Value' => $value];
}
$this->updateMockDataToConfig($mock_data);
}
/**
* Update tags of the interface in mock data.
*
* @param int $index
* The interface index.
* @param string $key
* The tag key.
* @param string $value
* The tag value.
* @param bool $delete_flg
* Whether delete or not.
*/
protected function updateInstanceTagsInMockData($index, $key, $value, $delete_flg = FALSE) {
$mock_data = $this->getMockDataFromConfig();
$data = &$mock_data['DescribeInstances']['Reservations'][0]['Instances'][$index];
if ($delete_flg) {
if (isset($data['Tags'])) {
foreach ($data['Tags'] as $idx => $tag) {
if ($tag['Key'] == $key) {
unset($data['Tags'][$idx]);
}
}
}
}
else {
if (!isset($data['Tags'])) {
$data['Tags'] = [];
}
else {
foreach ($data['Tags'] as $idx => $tag) {
if ($tag['Key'] == $key) {
unset($data['Tags'][$idx]);
}
}
}
$data['Tags'][] = ['Key' => $key, 'Value' => $value];
}
$this->updateMockDataToConfig($mock_data);
}
}
