@mock_ec2
def test_request_spot_instances():
    conn = boto3.client('ec2', 'us-east-1')
    vpc = conn.create_vpc(CidrBlock='10.0.0.0/8')['Vpc']
    subnet = conn.create_subnet(VpcId=vpc['VpcId'], CidrBlock='10.0.0.0/16', AvailabilityZone='us-east-1a')['Subnet']
    subnet_id = subnet['SubnetId']
    conn = boto.connect_ec2()
    conn.create_security_group('group1', 'description')
    conn.create_security_group('group2', 'description')
    start = iso_8601_datetime_with_milliseconds(datetime.datetime(2013, 1, 1))
    end = iso_8601_datetime_with_milliseconds(datetime.datetime(2013, 1, 2))
    with assert_raises(JSONResponseError) as ex:
        request = conn.request_spot_instances(price=0.5, image_id='ami-abcd1234', count=1, type='one-time', valid_from=start, valid_until=end, launch_group='the-group', availability_zone_group='my-group', key_name='test', security_groups=['group1', 'group2'], user_data=b'some test data', instance_type='m1.small', placement='us-east-1c', kernel_id='test-kernel', ramdisk_id='test-ramdisk', monitoring_enabled=True, subnet_id=subnet_id, dry_run=True)
    ex.exception.reason.should.equal('DryRunOperation')
    ex.exception.status.should.equal(400)
    ex.exception.message.should.equal('An error occurred (DryRunOperation) when calling the RequestSpotInstance operation: Request would have succeeded, but DryRun flag is set')
    request = conn.request_spot_instances(price=0.5, image_id='ami-abcd1234', count=1, type='one-time', valid_from=start, valid_until=end, launch_group='the-group', availability_zone_group='my-group', key_name='test', security_groups=['group1', 'group2'], user_data=b'some test data', instance_type='m1.small', placement='us-east-1c', kernel_id='test-kernel', ramdisk_id='test-ramdisk', monitoring_enabled=True, subnet_id=subnet_id)
    requests = conn.get_all_spot_instance_requests()
    requests.should.have.length_of(1)
    request = requests[0]
    request.state.should.equal('open')
    request.price.should.equal(0.5)
    request.launch_specification.image_id.should.equal('ami-abcd1234')
    request.type.should.equal('one-time')
    request.valid_from.should.equal(start)
    request.valid_until.should.equal(end)
    request.launch_group.should.equal('the-group')
    request.availability_zone_group.should.equal('my-group')
    request.launch_specification.key_name.should.equal('test')
    security_group_names = [group.name for group in request.launch_specification.groups]
    set(security_group_names).should.equal(set(['group1', 'group2']))
    request.launch_specification.instance_type.should.equal('m1.small')
    request.launch_specification.placement.should.equal('us-east-1c')
    request.launch_specification.kernel.should.equal('test-kernel')
    request.launch_specification.ramdisk.should.equal('test-ramdisk')
    request.launch_specification.subnet_id.should.equal(subnet_id)
@mock_ec2
def test_request_spot_instances():
    conn = boto3.client('ec2', 'us-east-1')
    vpc = conn.create_vpc(CidrBlock='10.0.0.0/8')['Vpc']
    subnet = conn.create_subnet(VpcId=vpc['VpcId'], CidrBlock='10.0.0.0/16', AvailabilityZone='us-east-1a')['Subnet']
    subnet_id = subnet['SubnetId']
    conn = boto.connect_ec2()
    conn.create_security_group('group1', 'description')
    conn.create_security_group('group2', 'description')
    start = iso_8601_datetime_with_milliseconds(datetime.datetime(2013, 1, 1))
    end = iso_8601_datetime_with_milliseconds(datetime.datetime(2013, 1, 2))
    with assert_raises(JSONResponseError) as ex:
        request = conn.request_spot_instances(price=0.5, image_id='ami-abcd1234', count=1, type='one-time', valid_from=start, valid_until=end, launch_group='the-group', availability_zone_group='my-group', key_name='test', security_groups=['group1', 'group2'], user_data=b'some test data', instance_type='m1.small', placement='us-east-1c', kernel_id='test-kernel', ramdisk_id='test-ramdisk', monitoring_enabled=True, subnet_id=subnet_id, dry_run=True)
    ex.exception.reason.should.equal('DryRunOperation')
    ex.exception.status.should.equal(400)
    ex.exception.message.should.equal('An error occurred (DryRunOperation) when calling the RequestSpotInstance operation: Request would have succeeded, but DryRun flag is set')
    request = conn.request_spot_instances(price=0.5, image_id='ami-abcd1234', count=1, type='one-time', valid_from=start, valid_until=end, launch_group='the-group', availability_zone_group='my-group', key_name='test', security_groups=['group1', 'group2'], user_data=b'some test data', instance_type='m1.small', placement='us-east-1c', kernel_id='test-kernel', ramdisk_id='test-ramdisk', monitoring_enabled=True, subnet_id=subnet_id)
    requests = conn.get_all_spot_instance_requests()
    requests.should.have.length_of(1)
    request = requests[0]
    request.state.should.equal('open')
    request.price.should.equal(0.5)
    request.launch_specification.image_id.should.equal('ami-abcd1234')
    request.type.should.equal('one-time')
    request.valid_from.should.equal(start)
    request.valid_until.should.equal(end)
    request.launch_group.should.equal('the-group')
    request.availability_zone_group.should.equal('my-group')
    request.launch_specification.key_name.should.equal('test')
    security_group_names = [group.name for group in request.launch_specification.groups]
    set(security_group_names).should.equal(set(['group1', 'group2']))
    request.launch_specification.instance_type.should.equal('m1.small')
    request.launch_specification.placement.should.equal('us-east-1c')
    request.launch_specification.kernel.should.equal('test-kernel')
    request.launch_specification.ramdisk.should.equal('test-ramdisk')
    request.launch_specification.subnet_id.should.equal(subnet_id)