Merge #913.
This commit is contained in:
parent
408a70992c
commit
0adebeed24
36 changed files with 669 additions and 58 deletions
|
|
@ -4,17 +4,18 @@ import tests.backport_assert_raises # noqa
|
|||
from nose.tools import assert_raises
|
||||
|
||||
import boto
|
||||
import boto3
|
||||
import boto.ec2
|
||||
import boto3
|
||||
from boto.exception import EC2ResponseError, EC2ResponseError
|
||||
|
||||
import sure # noqa
|
||||
|
||||
from moto import mock_emr_deprecated, mock_ec2
|
||||
from moto import mock_ec2_deprecated, mock_ec2
|
||||
from tests.helpers import requires_boto_gte
|
||||
|
||||
|
||||
@mock_emr_deprecated
|
||||
@mock_ec2_deprecated
|
||||
def test_ami_create_and_delete():
|
||||
conn = boto.connect_ec2('the_key', 'the_secret')
|
||||
reservation = conn.run_instances('ami-1234abcd')
|
||||
|
|
@ -75,7 +76,7 @@ def test_ami_create_and_delete():
|
|||
|
||||
|
||||
@requires_boto_gte("2.14.0")
|
||||
@mock_emr_deprecated
|
||||
@mock_ec2_deprecated
|
||||
def test_ami_copy():
|
||||
conn = boto.ec2.connect_to_region("us-west-1")
|
||||
reservation = conn.run_instances('ami-1234abcd')
|
||||
|
|
@ -134,7 +135,7 @@ def test_ami_copy():
|
|||
cm.exception.request_id.should_not.be.none
|
||||
|
||||
|
||||
@mock_emr_deprecated
|
||||
@mock_ec2_deprecated
|
||||
def test_ami_tagging():
|
||||
conn = boto.connect_vpc('the_key', 'the_secret')
|
||||
reservation = conn.run_instances('ami-1234abcd')
|
||||
|
|
@ -161,7 +162,7 @@ def test_ami_tagging():
|
|||
image.tags["a key"].should.equal("some value")
|
||||
|
||||
|
||||
@mock_emr_deprecated
|
||||
@mock_ec2_deprecated
|
||||
def test_ami_create_from_missing_instance():
|
||||
conn = boto.connect_ec2('the_key', 'the_secret')
|
||||
args = ["i-abcdefg", "test-ami", "this is a test ami"]
|
||||
|
|
@ -173,7 +174,7 @@ def test_ami_create_from_missing_instance():
|
|||
cm.exception.request_id.should_not.be.none
|
||||
|
||||
|
||||
@mock_emr_deprecated
|
||||
@mock_ec2_deprecated
|
||||
def test_ami_pulls_attributes_from_instance():
|
||||
conn = boto.connect_ec2('the_key', 'the_secret')
|
||||
reservation = conn.run_instances('ami-1234abcd')
|
||||
|
|
@ -185,7 +186,7 @@ def test_ami_pulls_attributes_from_instance():
|
|||
image.kernel_id.should.equal('test-kernel')
|
||||
|
||||
|
||||
@mock_emr_deprecated
|
||||
@mock_ec2_deprecated
|
||||
def test_ami_filters():
|
||||
conn = boto.connect_ec2('the_key', 'the_secret')
|
||||
|
||||
|
|
@ -242,7 +243,7 @@ def test_ami_filters():
|
|||
set([ami.id for ami in amis_by_nonpublic]).should.equal(set([imageA.id]))
|
||||
|
||||
|
||||
@mock_emr_deprecated
|
||||
@mock_ec2_deprecated
|
||||
def test_ami_filtering_via_tag():
|
||||
conn = boto.connect_vpc('the_key', 'the_secret')
|
||||
|
||||
|
|
@ -268,7 +269,7 @@ def test_ami_filtering_via_tag():
|
|||
set([ami.id for ami in amis_by_tagB]).should.equal(set([imageB.id]))
|
||||
|
||||
|
||||
@mock_emr_deprecated
|
||||
@mock_ec2_deprecated
|
||||
def test_getting_missing_ami():
|
||||
conn = boto.connect_ec2('the_key', 'the_secret')
|
||||
|
||||
|
|
@ -279,7 +280,7 @@ def test_getting_missing_ami():
|
|||
cm.exception.request_id.should_not.be.none
|
||||
|
||||
|
||||
@mock_emr_deprecated
|
||||
@mock_ec2_deprecated
|
||||
def test_getting_malformed_ami():
|
||||
conn = boto.connect_ec2('the_key', 'the_secret')
|
||||
|
||||
|
|
@ -290,7 +291,7 @@ def test_getting_malformed_ami():
|
|||
cm.exception.request_id.should_not.be.none
|
||||
|
||||
|
||||
@mock_emr_deprecated
|
||||
@mock_ec2_deprecated
|
||||
def test_ami_attribute_group_permissions():
|
||||
conn = boto.connect_ec2('the_key', 'the_secret')
|
||||
reservation = conn.run_instances('ami-1234abcd')
|
||||
|
|
@ -350,7 +351,7 @@ def test_ami_attribute_group_permissions():
|
|||
**REMOVE_GROUP_ARGS).should_not.throw(EC2ResponseError)
|
||||
|
||||
|
||||
@mock_emr_deprecated
|
||||
@mock_ec2_deprecated
|
||||
def test_ami_attribute_user_permissions():
|
||||
conn = boto.connect_ec2('the_key', 'the_secret')
|
||||
reservation = conn.run_instances('ami-1234abcd')
|
||||
|
|
@ -422,7 +423,107 @@ def test_ami_attribute_user_permissions():
|
|||
**REMOVE_USERS_ARGS).should_not.throw(EC2ResponseError)
|
||||
|
||||
|
||||
@mock_emr_deprecated
|
||||
@mock_ec2_deprecated
|
||||
def test_ami_describe_executable_users():
|
||||
conn = boto3.client('ec2', region_name='us-east-1')
|
||||
ec2 = boto3.resource('ec2', 'us-east-1')
|
||||
ec2.create_instances(ImageId='',
|
||||
MinCount=1,
|
||||
MaxCount=1)
|
||||
response = conn.describe_instances(Filters=[{'Name': 'instance-state-name','Values': ['running']}])
|
||||
instance_id = response['Reservations'][0]['Instances'][0]['InstanceId']
|
||||
image_id = conn.create_image(InstanceId=instance_id,
|
||||
Name='TestImage',)['ImageId']
|
||||
|
||||
|
||||
USER1 = '123456789011'
|
||||
|
||||
ADD_USER_ARGS = {'ImageId': image_id,
|
||||
'Attribute': 'launchPermission',
|
||||
'OperationType': 'add',
|
||||
'UserIds': [USER1]}
|
||||
|
||||
# Add users and get no images
|
||||
conn.modify_image_attribute(**ADD_USER_ARGS)
|
||||
|
||||
attributes = conn.describe_image_attribute(ImageId=image_id,
|
||||
Attribute='LaunchPermissions',
|
||||
DryRun=False)
|
||||
attributes['LaunchPermissions'].should.have.length_of(1)
|
||||
attributes['LaunchPermissions'][0]['UserId'].should.equal(USER1)
|
||||
images = conn.describe_images(ExecutableUsers=[USER1])['Images']
|
||||
images.should.have.length_of(1)
|
||||
images[0]['ImageId'].should.equal(image_id)
|
||||
|
||||
|
||||
@mock_ec2_deprecated
|
||||
def test_ami_describe_executable_users_negative():
|
||||
conn = boto3.client('ec2', region_name='us-east-1')
|
||||
ec2 = boto3.resource('ec2', 'us-east-1')
|
||||
ec2.create_instances(ImageId='',
|
||||
MinCount=1,
|
||||
MaxCount=1)
|
||||
response = conn.describe_instances(Filters=[{'Name': 'instance-state-name','Values': ['running']}])
|
||||
instance_id = response['Reservations'][0]['Instances'][0]['InstanceId']
|
||||
image_id = conn.create_image(InstanceId=instance_id,
|
||||
Name='TestImage')['ImageId']
|
||||
|
||||
|
||||
USER1 = '123456789011'
|
||||
USER2 = '113355789012'
|
||||
|
||||
ADD_USER_ARGS = {'ImageId': image_id,
|
||||
'Attribute': 'launchPermission',
|
||||
'OperationType': 'add',
|
||||
'UserIds': [USER1]}
|
||||
|
||||
# Add users and get no images
|
||||
conn.modify_image_attribute(**ADD_USER_ARGS)
|
||||
|
||||
attributes = conn.describe_image_attribute(ImageId=image_id,
|
||||
Attribute='LaunchPermissions',
|
||||
DryRun=False)
|
||||
attributes['LaunchPermissions'].should.have.length_of(1)
|
||||
attributes['LaunchPermissions'][0]['UserId'].should.equal(USER1)
|
||||
images = conn.describe_images(ExecutableUsers=[USER2])['Images']
|
||||
images.should.have.length_of(0)
|
||||
|
||||
|
||||
@mock_ec2_deprecated
|
||||
def test_ami_describe_executable_users_and_filter():
|
||||
conn = boto3.client('ec2', region_name='us-east-1')
|
||||
ec2 = boto3.resource('ec2', 'us-east-1')
|
||||
ec2.create_instances(ImageId='',
|
||||
MinCount=1,
|
||||
MaxCount=1)
|
||||
response = conn.describe_instances(Filters=[{'Name': 'instance-state-name','Values': ['running']}])
|
||||
instance_id = response['Reservations'][0]['Instances'][0]['InstanceId']
|
||||
image_id = conn.create_image(InstanceId=instance_id,
|
||||
Name='ImageToDelete',)['ImageId']
|
||||
|
||||
|
||||
USER1 = '123456789011'
|
||||
|
||||
ADD_USER_ARGS = {'ImageId': image_id,
|
||||
'Attribute': 'launchPermission',
|
||||
'OperationType': 'add',
|
||||
'UserIds': [USER1]}
|
||||
|
||||
# Add users and get no images
|
||||
conn.modify_image_attribute(**ADD_USER_ARGS)
|
||||
|
||||
attributes = conn.describe_image_attribute(ImageId=image_id,
|
||||
Attribute='LaunchPermissions',
|
||||
DryRun=False)
|
||||
attributes['LaunchPermissions'].should.have.length_of(1)
|
||||
attributes['LaunchPermissions'][0]['UserId'].should.equal(USER1)
|
||||
images = conn.describe_images(ExecutableUsers=[USER1],
|
||||
Filters=[{'Name': 'state', 'Values': ['available']}])['Images']
|
||||
images.should.have.length_of(1)
|
||||
images[0]['ImageId'].should.equal(image_id)
|
||||
|
||||
|
||||
@mock_ec2_deprecated
|
||||
def test_ami_attribute_user_and_group_permissions():
|
||||
"""
|
||||
Boto supports adding/removing both users and groups at the same time.
|
||||
|
|
@ -477,7 +578,7 @@ def test_ami_attribute_user_and_group_permissions():
|
|||
image.is_public.should.equal(False)
|
||||
|
||||
|
||||
@mock_emr_deprecated
|
||||
@mock_ec2_deprecated
|
||||
def test_ami_attribute_error_cases():
|
||||
conn = boto.connect_ec2('the_key', 'the_secret')
|
||||
reservation = conn.run_instances('ami-1234abcd')
|
||||
|
|
|
|||
|
|
@ -336,6 +336,11 @@ def test_snapshot_filters():
|
|||
set([snap.id for snap in snapshots_by_volume_id]
|
||||
).should.equal(set([snapshot1.id, snapshot2.id]))
|
||||
|
||||
snapshots_by_status = conn.get_all_snapshots(
|
||||
filters={'status': 'completed'})
|
||||
set([snap.id for snap in snapshots_by_status]
|
||||
).should.equal(set([snapshot1.id, snapshot2.id, snapshot3.id]))
|
||||
|
||||
snapshots_by_volume_size = conn.get_all_snapshots(
|
||||
filters={'volume-size': volume1.size})
|
||||
set([snap.id for snap in snapshots_by_volume_size]
|
||||
|
|
|
|||
|
|
@ -7,12 +7,13 @@ import base64
|
|||
import datetime
|
||||
|
||||
import boto
|
||||
import boto3
|
||||
from boto.ec2.instance import Reservation, InstanceAttribute
|
||||
from boto.exception import EC2ResponseError, EC2ResponseError
|
||||
from freezegun import freeze_time
|
||||
import sure # noqa
|
||||
|
||||
from moto import mock_ec2_deprecated
|
||||
from moto import mock_ec2_deprecated, mock_ec2
|
||||
from tests.helpers import requires_boto_gte
|
||||
|
||||
|
||||
|
|
@ -157,6 +158,26 @@ def test_get_instances_by_id():
|
|||
cm.exception.request_id.should_not.be.none
|
||||
|
||||
|
||||
@mock_ec2
|
||||
def test_get_paginated_instances():
|
||||
image_id = 'ami-1234abcd'
|
||||
client = boto3.client('ec2', region_name='us-east-1')
|
||||
conn = boto3.resource('ec2', 'us-east-1')
|
||||
for i in range(100):
|
||||
conn.create_instances(ImageId=image_id,
|
||||
MinCount=1,
|
||||
MaxCount=1)
|
||||
resp = client.describe_instances(MaxResults=50)
|
||||
reservations = resp['Reservations']
|
||||
reservations.should.have.length_of(50)
|
||||
next_token = resp['NextToken']
|
||||
next_token.should_not.be.none
|
||||
resp2 = client.describe_instances(NextToken=next_token)
|
||||
reservations.extend(resp2['Reservations'])
|
||||
reservations.should.have.length_of(100)
|
||||
assert 'NextToken' not in resp2.keys()
|
||||
|
||||
|
||||
@mock_ec2_deprecated
|
||||
def test_get_instances_filtering_by_state():
|
||||
conn = boto.connect_ec2()
|
||||
|
|
@ -337,6 +358,20 @@ def test_get_instances_filtering_by_architecture():
|
|||
reservations[0].instances.should.have.length_of(1)
|
||||
|
||||
|
||||
@mock_ec2
|
||||
def test_get_instances_filtering_by_image_id():
|
||||
image_id = 'ami-1234abcd'
|
||||
client = boto3.client('ec2', region_name='us-east-1')
|
||||
conn = boto3.resource('ec2', 'us-east-1')
|
||||
conn.create_instances(ImageId=image_id,
|
||||
MinCount=1,
|
||||
MaxCount=1)
|
||||
|
||||
reservations = client.describe_instances(Filters=[{'Name': 'image-id',
|
||||
'Values': [image_id]}])['Reservations']
|
||||
reservations[0]['Instances'].should.have.length_of(1)
|
||||
|
||||
|
||||
@mock_ec2_deprecated
|
||||
def test_get_instances_filtering_by_tag():
|
||||
conn = boto.connect_ec2()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue