diff --git a/moto/ec2/models.py b/moto/ec2/models.py index 00e0f4960..30769fd7e 100755 --- a/moto/ec2/models.py +++ b/moto/ec2/models.py @@ -1309,10 +1309,12 @@ class SecurityGroupBackend(object): if group_ids or groupnames or filters: for group in all_groups: - if ((group_ids and group.id in group_ids) or - (groupnames and group.name in groupnames) or - (filters and group.matches_filters(filters))): - groups.append(group) + if ((group_ids and not group.id in group_ids) or + (groupnames and not group.name in groupnames)): + continue + if filters and not group.matches_filters(filters): + continue + groups.append(group) else: groups = all_groups diff --git a/tests/test_ec2/test_security_groups.py b/tests/test_ec2/test_security_groups.py index 83dad6f0c..19f43862d 100644 --- a/tests/test_ec2/test_security_groups.py +++ b/tests/test_ec2/test_security_groups.py @@ -610,3 +610,16 @@ def test_authorize_and_revoke_in_bulk(): sg01.ip_permissions_egress.should.have.length_of(1) for ip_permission in expected_ip_permissions: sg01.ip_permissions_egress.shouldnt.contain(ip_permission) + +@mock_ec2 +def test_get_all_security_groups_filter_with_same_vpc_id(): + conn = boto.connect_ec2('the_key', 'the_secret') + vpc_id = 'vpc-5300000c' + security_group = conn.create_security_group('test1', 'test1', vpc_id=vpc_id) + security_group2 = conn.create_security_group('test2', 'test2', vpc_id=vpc_id) + + security_group.vpc_id.should.equal(vpc_id) + security_group2.vpc_id.should.equal(vpc_id) + + security_groups = conn.get_all_security_groups(group_ids=[security_group.id], filters={'vpc-id': [vpc_id]}) + security_groups.should.have.length_of(1)