Merge in autoscaling
This commit is contained in:
parent
674a85ba0b
commit
d57157e749
12 changed files with 1165 additions and 0 deletions
0
tests/__init__.py
Normal file
0
tests/__init__.py
Normal file
19
tests/helpers.py
Normal file
19
tests/helpers.py
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
import boto
|
||||
from nose.plugins.skip import SkipTest
|
||||
|
||||
|
||||
def version_tuple(v):
|
||||
return tuple(map(int, (v.split("."))))
|
||||
|
||||
|
||||
class requires_boto_gte(object):
|
||||
"""Decorator for requiring boto version greater than or equal to 'version'"""
|
||||
def __init__(self, version):
|
||||
self.version = version
|
||||
|
||||
def __call__(self, test):
|
||||
boto_version = version_tuple(boto.__version__)
|
||||
required = version_tuple(self.version)
|
||||
if boto_version >= required:
|
||||
return test()
|
||||
raise SkipTest
|
||||
290
tests/test_autoscaling/test_autoscaling.py
Normal file
290
tests/test_autoscaling/test_autoscaling.py
Normal file
|
|
@ -0,0 +1,290 @@
|
|||
import boto
|
||||
from boto.ec2.autoscale.launchconfig import LaunchConfiguration
|
||||
from boto.ec2.autoscale.group import AutoScalingGroup
|
||||
from nose.plugins.attrib import attr
|
||||
import sure # flake8: noqa
|
||||
from unittest import skipIf
|
||||
|
||||
from moto import mock_autoscaling, mock_ec2
|
||||
from tests.helpers import requires_boto_gte
|
||||
|
||||
|
||||
@mock_autoscaling
|
||||
def test_create_autoscaling_group():
|
||||
conn = boto.connect_autoscale()
|
||||
config = LaunchConfiguration(
|
||||
name='tester',
|
||||
image_id='ami-abcd1234',
|
||||
instance_type='m1.small',
|
||||
)
|
||||
conn.create_launch_configuration(config)
|
||||
|
||||
group = AutoScalingGroup(
|
||||
name='tester_group',
|
||||
availability_zones=['us-east-1c', 'us-east-1b'],
|
||||
desired_capacity=2,
|
||||
max_size=2,
|
||||
min_size=2,
|
||||
launch_config=config,
|
||||
vpc_zone_identifier='subnet-1234abcd',
|
||||
)
|
||||
conn.create_auto_scaling_group(group)
|
||||
|
||||
group = conn.get_all_groups()[0]
|
||||
group.name.should.equal('tester_group')
|
||||
set(group.availability_zones).should.equal(set(['us-east-1c', 'us-east-1b']))
|
||||
group.desired_capacity.should.equal(2)
|
||||
group.max_size.should.equal(2)
|
||||
group.min_size.should.equal(2)
|
||||
group.vpc_zone_identifier.should.equal('subnet-1234abcd')
|
||||
group.launch_config_name.should.equal('tester')
|
||||
|
||||
|
||||
@mock_autoscaling
|
||||
def test_create_autoscaling_groups_defaults():
|
||||
""" Test with the minimum inputs and check that all of the proper defaults
|
||||
are assigned for the other attributes """
|
||||
conn = boto.connect_autoscale()
|
||||
config = LaunchConfiguration(
|
||||
name='tester',
|
||||
image_id='ami-abcd1234',
|
||||
instance_type='m1.small',
|
||||
)
|
||||
conn.create_launch_configuration(config)
|
||||
|
||||
group = AutoScalingGroup(
|
||||
name='tester_group',
|
||||
max_size=2,
|
||||
min_size=2,
|
||||
launch_config=config,
|
||||
)
|
||||
conn.create_auto_scaling_group(group)
|
||||
|
||||
group = conn.get_all_groups()[0]
|
||||
group.name.should.equal('tester_group')
|
||||
group.max_size.should.equal(2)
|
||||
group.min_size.should.equal(2)
|
||||
group.launch_config_name.should.equal('tester')
|
||||
|
||||
# Defaults
|
||||
list(group.availability_zones).should.equal([])
|
||||
group.desired_capacity.should.equal(2)
|
||||
group.vpc_zone_identifier.should.equal('')
|
||||
|
||||
|
||||
@mock_autoscaling
|
||||
def test_autoscaling_group_describe_filter():
|
||||
conn = boto.connect_autoscale()
|
||||
config = LaunchConfiguration(
|
||||
name='tester',
|
||||
image_id='ami-abcd1234',
|
||||
instance_type='m1.small',
|
||||
)
|
||||
conn.create_launch_configuration(config)
|
||||
|
||||
group = AutoScalingGroup(
|
||||
name='tester_group',
|
||||
max_size=2,
|
||||
min_size=2,
|
||||
launch_config=config,
|
||||
)
|
||||
conn.create_auto_scaling_group(group)
|
||||
group.name = 'tester_group2'
|
||||
conn.create_auto_scaling_group(group)
|
||||
group.name = 'tester_group3'
|
||||
conn.create_auto_scaling_group(group)
|
||||
|
||||
conn.get_all_groups(names=['tester_group', 'tester_group2']).should.have.length_of(2)
|
||||
conn.get_all_groups().should.have.length_of(3)
|
||||
|
||||
|
||||
@mock_autoscaling
|
||||
def test_autoscaling_update():
|
||||
conn = boto.connect_autoscale()
|
||||
config = LaunchConfiguration(
|
||||
name='tester',
|
||||
image_id='ami-abcd1234',
|
||||
instance_type='m1.small',
|
||||
)
|
||||
conn.create_launch_configuration(config)
|
||||
|
||||
group = AutoScalingGroup(
|
||||
name='tester_group',
|
||||
availability_zones=['us-east-1c', 'us-east-1b'],
|
||||
desired_capacity=2,
|
||||
max_size=2,
|
||||
min_size=2,
|
||||
launch_config=config,
|
||||
vpc_zone_identifier='subnet-1234abcd',
|
||||
)
|
||||
conn.create_auto_scaling_group(group)
|
||||
|
||||
group = conn.get_all_groups()[0]
|
||||
group.vpc_zone_identifier.should.equal('subnet-1234abcd')
|
||||
|
||||
group.vpc_zone_identifier = 'subnet-5678efgh'
|
||||
group.update()
|
||||
|
||||
group = conn.get_all_groups()[0]
|
||||
group.vpc_zone_identifier.should.equal('subnet-5678efgh')
|
||||
|
||||
|
||||
@mock_autoscaling
|
||||
def test_autoscaling_group_delete():
|
||||
conn = boto.connect_autoscale()
|
||||
config = LaunchConfiguration(
|
||||
name='tester',
|
||||
image_id='ami-abcd1234',
|
||||
instance_type='m1.small',
|
||||
)
|
||||
conn.create_launch_configuration(config)
|
||||
|
||||
group = AutoScalingGroup(
|
||||
name='tester_group',
|
||||
max_size=2,
|
||||
min_size=2,
|
||||
launch_config=config,
|
||||
)
|
||||
conn.create_auto_scaling_group(group)
|
||||
|
||||
conn.get_all_groups().should.have.length_of(1)
|
||||
|
||||
conn.delete_auto_scaling_group('tester_group')
|
||||
conn.get_all_groups().should.have.length_of(0)
|
||||
|
||||
|
||||
@mock_ec2
|
||||
@mock_autoscaling
|
||||
def test_autoscaling_group_describe_instances():
|
||||
conn = boto.connect_autoscale()
|
||||
config = LaunchConfiguration(
|
||||
name='tester',
|
||||
image_id='ami-abcd1234',
|
||||
instance_type='m1.small',
|
||||
)
|
||||
conn.create_launch_configuration(config)
|
||||
|
||||
group = AutoScalingGroup(
|
||||
name='tester_group',
|
||||
max_size=2,
|
||||
min_size=2,
|
||||
launch_config=config,
|
||||
)
|
||||
conn.create_auto_scaling_group(group)
|
||||
|
||||
instances = list(conn.get_all_autoscaling_instances())
|
||||
instances.should.have.length_of(2)
|
||||
instances[0].launch_config_name.should.equal('tester')
|
||||
autoscale_instance_ids = [instance.instance_id for instance in instances]
|
||||
|
||||
ec2_conn = boto.connect_ec2()
|
||||
reservations = ec2_conn.get_all_instances()
|
||||
instances = reservations[0].instances
|
||||
instances.should.have.length_of(2)
|
||||
instance_ids = [instance.id for instance in instances]
|
||||
set(autoscale_instance_ids).should.equal(set(instance_ids))
|
||||
|
||||
|
||||
@requires_boto_gte("2.8")
|
||||
@mock_autoscaling
|
||||
def test_set_desired_capacity_up():
|
||||
conn = boto.connect_autoscale()
|
||||
config = LaunchConfiguration(
|
||||
name='tester',
|
||||
image_id='ami-abcd1234',
|
||||
instance_type='m1.small',
|
||||
)
|
||||
conn.create_launch_configuration(config)
|
||||
|
||||
group = AutoScalingGroup(
|
||||
name='tester_group',
|
||||
availability_zones=['us-east-1c', 'us-east-1b'],
|
||||
desired_capacity=2,
|
||||
max_size=2,
|
||||
min_size=2,
|
||||
launch_config=config,
|
||||
vpc_zone_identifier='subnet-1234abcd',
|
||||
)
|
||||
conn.create_auto_scaling_group(group)
|
||||
|
||||
group = conn.get_all_groups()[0]
|
||||
group.desired_capacity.should.equal(2)
|
||||
instances = list(conn.get_all_autoscaling_instances())
|
||||
instances.should.have.length_of(2)
|
||||
|
||||
conn.set_desired_capacity("tester_group", 3)
|
||||
group = conn.get_all_groups()[0]
|
||||
group.desired_capacity.should.equal(3)
|
||||
|
||||
instances = list(conn.get_all_autoscaling_instances())
|
||||
instances.should.have.length_of(3)
|
||||
|
||||
|
||||
@requires_boto_gte("2.8")
|
||||
@mock_autoscaling
|
||||
def test_set_desired_capacity_down():
|
||||
conn = boto.connect_autoscale()
|
||||
config = LaunchConfiguration(
|
||||
name='tester',
|
||||
image_id='ami-abcd1234',
|
||||
instance_type='m1.small',
|
||||
)
|
||||
conn.create_launch_configuration(config)
|
||||
|
||||
group = AutoScalingGroup(
|
||||
name='tester_group',
|
||||
availability_zones=['us-east-1c', 'us-east-1b'],
|
||||
desired_capacity=2,
|
||||
max_size=2,
|
||||
min_size=2,
|
||||
launch_config=config,
|
||||
vpc_zone_identifier='subnet-1234abcd',
|
||||
)
|
||||
conn.create_auto_scaling_group(group)
|
||||
|
||||
group = conn.get_all_groups()[0]
|
||||
group.desired_capacity.should.equal(2)
|
||||
instances = list(conn.get_all_autoscaling_instances())
|
||||
instances.should.have.length_of(2)
|
||||
|
||||
conn.set_desired_capacity("tester_group", 1)
|
||||
group = conn.get_all_groups()[0]
|
||||
group.desired_capacity.should.equal(1)
|
||||
|
||||
instances = list(conn.get_all_autoscaling_instances())
|
||||
instances.should.have.length_of(1)
|
||||
|
||||
|
||||
@requires_boto_gte("2.8")
|
||||
@mock_autoscaling
|
||||
def test_set_desired_capacity_the_same():
|
||||
conn = boto.connect_autoscale()
|
||||
config = LaunchConfiguration(
|
||||
name='tester',
|
||||
image_id='ami-abcd1234',
|
||||
instance_type='m1.small',
|
||||
)
|
||||
conn.create_launch_configuration(config)
|
||||
|
||||
group = AutoScalingGroup(
|
||||
name='tester_group',
|
||||
availability_zones=['us-east-1c', 'us-east-1b'],
|
||||
desired_capacity=2,
|
||||
max_size=2,
|
||||
min_size=2,
|
||||
launch_config=config,
|
||||
vpc_zone_identifier='subnet-1234abcd',
|
||||
)
|
||||
conn.create_auto_scaling_group(group)
|
||||
|
||||
group = conn.get_all_groups()[0]
|
||||
group.desired_capacity.should.equal(2)
|
||||
instances = list(conn.get_all_autoscaling_instances())
|
||||
instances.should.have.length_of(2)
|
||||
|
||||
conn.set_desired_capacity("tester_group", 2)
|
||||
group = conn.get_all_groups()[0]
|
||||
group.desired_capacity.should.equal(2)
|
||||
|
||||
instances = list(conn.get_all_autoscaling_instances())
|
||||
instances.should.have.length_of(2)
|
||||
93
tests/test_autoscaling/test_launch_configurations.py
Normal file
93
tests/test_autoscaling/test_launch_configurations.py
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
import boto
|
||||
from boto.ec2.autoscale.launchconfig import LaunchConfiguration
|
||||
|
||||
import sure # flake8: noqa
|
||||
|
||||
from moto import mock_autoscaling
|
||||
|
||||
|
||||
@mock_autoscaling
|
||||
def test_create_launch_configuration():
|
||||
conn = boto.connect_autoscale()
|
||||
config = LaunchConfiguration(
|
||||
name='tester',
|
||||
image_id='ami-abcd1234',
|
||||
instance_type='m1.small',
|
||||
key_name='the_keys',
|
||||
security_groups=["default", "default2"],
|
||||
user_data="This is some user_data",
|
||||
instance_monitoring=True,
|
||||
instance_profile_name='arn:aws:iam::123456789012:instance-profile/testing',
|
||||
spot_price=0.1)
|
||||
conn.create_launch_configuration(config)
|
||||
|
||||
launch_config = conn.get_all_launch_configurations()[0]
|
||||
launch_config.name.should.equal('tester')
|
||||
launch_config.image_id.should.equal('ami-abcd1234')
|
||||
launch_config.instance_type.should.equal('m1.small')
|
||||
launch_config.key_name.should.equal('the_keys')
|
||||
set(launch_config.security_groups).should.equal(set(['default', 'default2']))
|
||||
launch_config.user_data.should.equal("This is some user_data")
|
||||
launch_config.instance_monitoring.enabled.should.equal('true')
|
||||
launch_config.instance_profile_name.should.equal('arn:aws:iam::123456789012:instance-profile/testing')
|
||||
launch_config.spot_price.should.equal(0.1)
|
||||
|
||||
|
||||
@mock_autoscaling
|
||||
def test_create_launch_configuration_defaults():
|
||||
""" Test with the minimum inputs and check that all of the proper defaults
|
||||
are assigned for the other attributes """
|
||||
conn = boto.connect_autoscale()
|
||||
config = LaunchConfiguration(
|
||||
name='tester',
|
||||
image_id='ami-abcd1234',
|
||||
instance_type='m1.small',
|
||||
)
|
||||
conn.create_launch_configuration(config)
|
||||
|
||||
launch_config = conn.get_all_launch_configurations()[0]
|
||||
launch_config.name.should.equal('tester')
|
||||
launch_config.image_id.should.equal('ami-abcd1234')
|
||||
launch_config.instance_type.should.equal('m1.small')
|
||||
|
||||
# Defaults
|
||||
launch_config.key_name.should.equal('')
|
||||
list(launch_config.security_groups).should.equal([])
|
||||
launch_config.user_data.should.equal("")
|
||||
launch_config.instance_monitoring.enabled.should.equal('false')
|
||||
launch_config.instance_profile_name.should.equal(None)
|
||||
launch_config.spot_price.should.equal(None)
|
||||
|
||||
|
||||
@mock_autoscaling
|
||||
def test_launch_configuration_describe_filter():
|
||||
conn = boto.connect_autoscale()
|
||||
config = LaunchConfiguration(
|
||||
name='tester',
|
||||
image_id='ami-abcd1234',
|
||||
instance_type='m1.small',
|
||||
)
|
||||
conn.create_launch_configuration(config)
|
||||
config.name = 'tester2'
|
||||
conn.create_launch_configuration(config)
|
||||
config.name = 'tester3'
|
||||
conn.create_launch_configuration(config)
|
||||
|
||||
conn.get_all_launch_configurations(names=['tester', 'tester2']).should.have.length_of(2)
|
||||
conn.get_all_launch_configurations().should.have.length_of(3)
|
||||
|
||||
|
||||
@mock_autoscaling
|
||||
def test_launch_configuration_delete():
|
||||
conn = boto.connect_autoscale()
|
||||
config = LaunchConfiguration(
|
||||
name='tester',
|
||||
image_id='ami-abcd1234',
|
||||
instance_type='m1.small',
|
||||
)
|
||||
conn.create_launch_configuration(config)
|
||||
|
||||
conn.get_all_launch_configurations().should.have.length_of(1)
|
||||
|
||||
conn.delete_launch_configuration('tester')
|
||||
conn.get_all_launch_configurations().should.have.length_of(0)
|
||||
186
tests/test_autoscaling/test_policies.py
Normal file
186
tests/test_autoscaling/test_policies.py
Normal file
|
|
@ -0,0 +1,186 @@
|
|||
import boto
|
||||
from boto.ec2.autoscale.launchconfig import LaunchConfiguration
|
||||
from boto.ec2.autoscale.group import AutoScalingGroup
|
||||
from boto.ec2.autoscale.policy import ScalingPolicy
|
||||
import sure # flake8: noqa
|
||||
|
||||
from moto import mock_autoscaling, mock_ec2
|
||||
|
||||
|
||||
def setup_autoscale_group():
|
||||
conn = boto.connect_autoscale()
|
||||
config = LaunchConfiguration(
|
||||
name='tester',
|
||||
image_id='ami-abcd1234',
|
||||
instance_type='m1.small',
|
||||
)
|
||||
conn.create_launch_configuration(config)
|
||||
|
||||
group = AutoScalingGroup(
|
||||
name='tester_group',
|
||||
max_size=2,
|
||||
min_size=2,
|
||||
launch_config=config,
|
||||
)
|
||||
conn.create_auto_scaling_group(group)
|
||||
return group
|
||||
|
||||
|
||||
@mock_autoscaling
|
||||
def test_create_policy():
|
||||
group = setup_autoscale_group()
|
||||
conn = boto.connect_autoscale()
|
||||
policy = ScalingPolicy(
|
||||
name='ScaleUp',
|
||||
adjustment_type='ExactCapacity',
|
||||
as_name='tester_group',
|
||||
scaling_adjustment=3,
|
||||
cooldown=60,
|
||||
)
|
||||
conn.create_scaling_policy(policy)
|
||||
|
||||
policy = conn.get_all_policies()[0]
|
||||
policy.name.should.equal('ScaleUp')
|
||||
policy.adjustment_type.should.equal('ExactCapacity')
|
||||
policy.as_name.should.equal('tester_group')
|
||||
policy.scaling_adjustment.should.equal(3)
|
||||
policy.cooldown.should.equal(60)
|
||||
|
||||
|
||||
@mock_autoscaling
|
||||
def test_create_policy_default_values():
|
||||
group = setup_autoscale_group()
|
||||
conn = boto.connect_autoscale()
|
||||
policy = ScalingPolicy(
|
||||
name='ScaleUp',
|
||||
adjustment_type='ExactCapacity',
|
||||
as_name='tester_group',
|
||||
scaling_adjustment=3,
|
||||
)
|
||||
conn.create_scaling_policy(policy)
|
||||
|
||||
policy = conn.get_all_policies()[0]
|
||||
policy.name.should.equal('ScaleUp')
|
||||
|
||||
# Defaults
|
||||
policy.cooldown.should.equal(300)
|
||||
|
||||
|
||||
@mock_autoscaling
|
||||
def test_update_policy():
|
||||
group = setup_autoscale_group()
|
||||
conn = boto.connect_autoscale()
|
||||
policy = ScalingPolicy(
|
||||
name='ScaleUp',
|
||||
adjustment_type='ExactCapacity',
|
||||
as_name='tester_group',
|
||||
scaling_adjustment=3,
|
||||
)
|
||||
conn.create_scaling_policy(policy)
|
||||
|
||||
policy = conn.get_all_policies()[0]
|
||||
policy.scaling_adjustment.should.equal(3)
|
||||
|
||||
# Now update it by creating another with the same name
|
||||
policy = ScalingPolicy(
|
||||
name='ScaleUp',
|
||||
adjustment_type='ExactCapacity',
|
||||
as_name='tester_group',
|
||||
scaling_adjustment=2,
|
||||
)
|
||||
conn.create_scaling_policy(policy)
|
||||
policy = conn.get_all_policies()[0]
|
||||
policy.scaling_adjustment.should.equal(2)
|
||||
|
||||
|
||||
@mock_autoscaling
|
||||
def test_delete_policy():
|
||||
group = setup_autoscale_group()
|
||||
conn = boto.connect_autoscale()
|
||||
policy = ScalingPolicy(
|
||||
name='ScaleUp',
|
||||
adjustment_type='ExactCapacity',
|
||||
as_name='tester_group',
|
||||
scaling_adjustment=3,
|
||||
)
|
||||
conn.create_scaling_policy(policy)
|
||||
|
||||
conn.get_all_policies().should.have.length_of(1)
|
||||
|
||||
conn.delete_policy('ScaleUp')
|
||||
conn.get_all_policies().should.have.length_of(0)
|
||||
|
||||
|
||||
@mock_autoscaling
|
||||
def test_execute_policy_exact_capacity():
|
||||
group = setup_autoscale_group()
|
||||
conn = boto.connect_autoscale()
|
||||
policy = ScalingPolicy(
|
||||
name='ScaleUp',
|
||||
adjustment_type='ExactCapacity',
|
||||
as_name='tester_group',
|
||||
scaling_adjustment=3,
|
||||
)
|
||||
conn.create_scaling_policy(policy)
|
||||
|
||||
conn.execute_policy("ScaleUp")
|
||||
|
||||
instances = list(conn.get_all_autoscaling_instances())
|
||||
instances.should.have.length_of(3)
|
||||
|
||||
|
||||
@mock_autoscaling
|
||||
def test_execute_policy_positive_change_in_capacity():
|
||||
group = setup_autoscale_group()
|
||||
conn = boto.connect_autoscale()
|
||||
policy = ScalingPolicy(
|
||||
name='ScaleUp',
|
||||
adjustment_type='ChangeInCapacity',
|
||||
as_name='tester_group',
|
||||
scaling_adjustment=3,
|
||||
)
|
||||
conn.create_scaling_policy(policy)
|
||||
|
||||
conn.execute_policy("ScaleUp")
|
||||
|
||||
instances = list(conn.get_all_autoscaling_instances())
|
||||
instances.should.have.length_of(5)
|
||||
|
||||
|
||||
@mock_autoscaling
|
||||
def test_execute_policy_percent_change_in_capacity():
|
||||
group = setup_autoscale_group()
|
||||
conn = boto.connect_autoscale()
|
||||
policy = ScalingPolicy(
|
||||
name='ScaleUp',
|
||||
adjustment_type='PercentChangeInCapacity',
|
||||
as_name='tester_group',
|
||||
scaling_adjustment=50,
|
||||
)
|
||||
conn.create_scaling_policy(policy)
|
||||
|
||||
conn.execute_policy("ScaleUp")
|
||||
|
||||
instances = list(conn.get_all_autoscaling_instances())
|
||||
instances.should.have.length_of(3)
|
||||
|
||||
|
||||
@mock_autoscaling
|
||||
def test_execute_policy_small_percent_change_in_capacity():
|
||||
""" http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/as-scale-based-on-demand.html
|
||||
If PercentChangeInCapacity returns a value between 0 and 1,
|
||||
Auto Scaling will round it off to 1."""
|
||||
group = setup_autoscale_group()
|
||||
conn = boto.connect_autoscale()
|
||||
policy = ScalingPolicy(
|
||||
name='ScaleUp',
|
||||
adjustment_type='PercentChangeInCapacity',
|
||||
as_name='tester_group',
|
||||
scaling_adjustment=1,
|
||||
)
|
||||
conn.create_scaling_policy(policy)
|
||||
|
||||
conn.execute_policy("ScaleUp")
|
||||
|
||||
instances = list(conn.get_all_autoscaling_instances())
|
||||
instances.should.have.length_of(3)
|
||||
16
tests/test_autoscaling/test_server.py
Normal file
16
tests/test_autoscaling/test_server.py
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
import sure # flake8: noqa
|
||||
|
||||
import moto.server as server
|
||||
|
||||
'''
|
||||
Test the different server responses
|
||||
'''
|
||||
server.configure_urls("autoscaling")
|
||||
|
||||
|
||||
def test_describe_autoscaling_groups():
|
||||
test_client = server.app.test_client()
|
||||
res = test_client.get('/?Action=DescribeLaunchConfigurations')
|
||||
|
||||
res.data.should.contain('<DescribeLaunchConfigurationsResponse')
|
||||
res.data.should.contain('<LaunchConfigurations>')
|
||||
Loading…
Add table
Add a link
Reference in a new issue