| 
									
										
										
										
											2014-08-27 11:17:06 -04:00
										 |  |  | from __future__ import unicode_literals | 
					
						
							| 
									
										
										
										
											2016-10-20 17:25:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | import copy | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-25 15:09:38 -07:00
										 |  |  | # Ensure 'assert_raises' context manager support for Python 2.6 | 
					
						
							| 
									
										
										
										
											2015-02-14 08:57:14 -05:00
										 |  |  | import tests.backport_assert_raises  # noqa | 
					
						
							| 
									
										
										
										
											2014-08-25 15:09:38 -07:00
										 |  |  | from nose.tools import assert_raises | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-20 23:01:09 +02:00
										 |  |  | import boto3 | 
					
						
							| 
									
										
										
										
											2013-02-21 23:13:01 -05:00
										 |  |  | import boto | 
					
						
							| 
									
										
										
										
											2017-01-11 22:35:27 -05:00
										 |  |  | from botocore.exceptions import ClientError | 
					
						
							| 
									
										
										
										
											2017-02-23 19:43:48 -05:00
										 |  |  | from boto.exception import EC2ResponseError | 
					
						
							| 
									
										
										
										
											2013-08-03 17:21:25 -04:00
										 |  |  | import sure  # noqa | 
					
						
							| 
									
										
										
										
											2013-02-21 23:13:01 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 22:35:45 -05:00
										 |  |  | from moto import mock_ec2, mock_ec2_deprecated | 
					
						
							| 
									
										
										
										
											2013-02-21 23:13:01 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 22:35:45 -05:00
										 |  |  | @mock_ec2_deprecated | 
					
						
							| 
									
										
										
										
											2013-02-23 15:26:54 -05:00
										 |  |  | def test_create_and_describe_security_group(): | 
					
						
							|  |  |  |     conn = boto.connect_ec2('the_key', 'the_secret') | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 19:43:48 -05:00
										 |  |  |     with assert_raises(EC2ResponseError) as ex: | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |         security_group = conn.create_security_group( | 
					
						
							|  |  |  |             'test security group', 'this is a test security group', dry_run=True) | 
					
						
							| 
									
										
										
										
											2017-02-23 19:43:48 -05:00
										 |  |  |     ex.exception.error_code.should.equal('DryRunOperation') | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  |     ex.exception.status.should.equal(400) | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     ex.exception.message.should.equal( | 
					
						
							|  |  |  |         'An error occurred (DryRunOperation) when calling the CreateSecurityGroup operation: Request would have succeeded, but DryRun flag is set') | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     security_group = conn.create_security_group( | 
					
						
							|  |  |  |         'test security group', 'this is a test security group') | 
					
						
							| 
									
										
										
										
											2013-02-23 15:26:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-05 08:35:18 -05:00
										 |  |  |     security_group.name.should.equal('test security group') | 
					
						
							| 
									
										
										
										
											2013-02-23 15:26:54 -05:00
										 |  |  |     security_group.description.should.equal('this is a test security group') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Trying to create another group with the same name should throw an error | 
					
						
							| 
									
										
										
										
											2014-08-25 10:54:47 -07:00
										 |  |  |     with assert_raises(EC2ResponseError) as cm: | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |         conn.create_security_group( | 
					
						
							|  |  |  |             'test security group', 'this is a test security group') | 
					
						
							| 
									
										
										
										
											2014-08-25 10:54:47 -07:00
										 |  |  |     cm.exception.code.should.equal('InvalidGroup.Duplicate') | 
					
						
							|  |  |  |     cm.exception.status.should.equal(400) | 
					
						
							|  |  |  |     cm.exception.request_id.should_not.be.none | 
					
						
							| 
									
										
										
										
											2013-02-23 15:26:54 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     all_groups = conn.get_all_security_groups() | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     # The default group gets created automatically | 
					
						
							|  |  |  |     all_groups.should.have.length_of(3) | 
					
						
							| 
									
										
										
										
											2015-03-14 18:50:41 -04:00
										 |  |  |     group_names = [group.name for group in all_groups] | 
					
						
							|  |  |  |     set(group_names).should.equal(set(["default", "test security group"])) | 
					
						
							| 
									
										
										
										
											2013-02-23 15:26:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-20 16:22:37 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 22:35:45 -05:00
										 |  |  | @mock_ec2_deprecated | 
					
						
							| 
									
										
										
										
											2014-05-11 17:37:00 -04:00
										 |  |  | def test_create_security_group_without_description_raises_error(): | 
					
						
							|  |  |  |     conn = boto.connect_ec2('the_key', 'the_secret') | 
					
						
							| 
									
										
										
										
											2014-08-25 10:54:47 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     with assert_raises(EC2ResponseError) as cm: | 
					
						
							|  |  |  |         conn.create_security_group('test security group', '') | 
					
						
							|  |  |  |     cm.exception.code.should.equal('MissingParameter') | 
					
						
							|  |  |  |     cm.exception.status.should.equal(400) | 
					
						
							|  |  |  |     cm.exception.request_id.should_not.be.none | 
					
						
							| 
									
										
										
										
											2014-05-11 17:37:00 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 22:35:45 -05:00
										 |  |  | @mock_ec2_deprecated | 
					
						
							| 
									
										
										
										
											2015-03-14 18:50:41 -04:00
										 |  |  | def test_default_security_group(): | 
					
						
							|  |  |  |     conn = boto.ec2.connect_to_region('us-east-1') | 
					
						
							|  |  |  |     groups = conn.get_all_security_groups() | 
					
						
							| 
									
										
										
										
											2017-01-11 17:37:57 -08:00
										 |  |  |     groups.should.have.length_of(2) | 
					
						
							| 
									
										
										
										
											2015-03-14 18:50:41 -04:00
										 |  |  |     groups[0].name.should.equal("default") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 22:35:45 -05:00
										 |  |  | @mock_ec2_deprecated | 
					
						
							| 
									
										
										
										
											2013-10-30 17:55:13 -07:00
										 |  |  | def test_create_and_describe_vpc_security_group(): | 
					
						
							|  |  |  |     conn = boto.connect_ec2('the_key', 'the_secret') | 
					
						
							|  |  |  |     vpc_id = 'vpc-5300000c' | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     security_group = conn.create_security_group( | 
					
						
							|  |  |  |         'test security group', 'this is a test security group', vpc_id=vpc_id) | 
					
						
							| 
									
										
										
										
											2013-10-30 17:55:13 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     security_group.vpc_id.should.equal(vpc_id) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     security_group.name.should.equal('test security group') | 
					
						
							|  |  |  |     security_group.description.should.equal('this is a test security group') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     # Trying to create another group with the same name in the same VPC should | 
					
						
							|  |  |  |     # throw an error | 
					
						
							| 
									
										
										
										
											2014-08-25 10:54:47 -07:00
										 |  |  |     with assert_raises(EC2ResponseError) as cm: | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |         conn.create_security_group( | 
					
						
							|  |  |  |             'test security group', 'this is a test security group', vpc_id) | 
					
						
							| 
									
										
										
										
											2014-08-25 10:54:47 -07:00
										 |  |  |     cm.exception.code.should.equal('InvalidGroup.Duplicate') | 
					
						
							|  |  |  |     cm.exception.status.should.equal(400) | 
					
						
							|  |  |  |     cm.exception.request_id.should_not.be.none | 
					
						
							| 
									
										
										
										
											2013-10-30 17:55:13 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-14 18:50:41 -04:00
										 |  |  |     all_groups = conn.get_all_security_groups(filters={'vpc_id': [vpc_id]}) | 
					
						
							| 
									
										
										
										
											2013-10-30 17:55:13 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     all_groups[0].vpc_id.should.equal(vpc_id) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     all_groups.should.have.length_of(1) | 
					
						
							|  |  |  |     all_groups[0].name.should.equal('test security group') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-11 17:13:48 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 22:35:45 -05:00
										 |  |  | @mock_ec2_deprecated | 
					
						
							| 
									
										
										
										
											2013-10-30 20:11:15 -07:00
										 |  |  | def test_create_two_security_groups_with_same_name_in_different_vpc(): | 
					
						
							|  |  |  |     conn = boto.connect_ec2('the_key', 'the_secret') | 
					
						
							|  |  |  |     vpc_id = 'vpc-5300000c' | 
					
						
							|  |  |  |     vpc_id2 = 'vpc-5300000d' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     conn.create_security_group( | 
					
						
							|  |  |  |         'test security group', 'this is a test security group', vpc_id) | 
					
						
							|  |  |  |     conn.create_security_group( | 
					
						
							|  |  |  |         'test security group', 'this is a test security group', vpc_id2) | 
					
						
							| 
									
										
										
										
											2013-10-30 20:11:15 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     all_groups = conn.get_all_security_groups() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-11 17:37:57 -08:00
										 |  |  |     all_groups.should.have.length_of(4) | 
					
						
							| 
									
										
										
										
											2015-03-14 18:50:41 -04:00
										 |  |  |     group_names = [group.name for group in all_groups] | 
					
						
							|  |  |  |     # The default group is created automatically | 
					
						
							|  |  |  |     set(group_names).should.equal(set(["default", "test security group"])) | 
					
						
							| 
									
										
										
										
											2013-10-30 20:11:15 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-23 15:26:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 22:35:45 -05:00
										 |  |  | @mock_ec2_deprecated | 
					
						
							| 
									
										
										
										
											2013-02-23 15:26:54 -05:00
										 |  |  | def test_deleting_security_groups(): | 
					
						
							|  |  |  |     conn = boto.connect_ec2('the_key', 'the_secret') | 
					
						
							|  |  |  |     security_group1 = conn.create_security_group('test1', 'test1') | 
					
						
							| 
									
										
										
										
											2013-02-26 00:31:01 -05:00
										 |  |  |     conn.create_security_group('test2', 'test2') | 
					
						
							| 
									
										
										
										
											2013-02-23 15:26:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-11 17:37:57 -08:00
										 |  |  |     conn.get_all_security_groups().should.have.length_of(4) | 
					
						
							| 
									
										
										
										
											2013-02-23 15:26:54 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Deleting a group that doesn't exist should throw an error | 
					
						
							| 
									
										
										
										
											2014-08-25 10:54:47 -07:00
										 |  |  |     with assert_raises(EC2ResponseError) as cm: | 
					
						
							|  |  |  |         conn.delete_security_group('foobar') | 
					
						
							|  |  |  |     cm.exception.code.should.equal('InvalidGroup.NotFound') | 
					
						
							|  |  |  |     cm.exception.status.should.equal(400) | 
					
						
							|  |  |  |     cm.exception.request_id.should_not.be.none | 
					
						
							| 
									
										
										
										
											2013-02-23 15:26:54 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Delete by name | 
					
						
							| 
									
										
										
										
											2017-02-23 19:43:48 -05:00
										 |  |  |     with assert_raises(EC2ResponseError) as ex: | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  |         conn.delete_security_group('test2', dry_run=True) | 
					
						
							| 
									
										
										
										
											2017-02-23 19:43:48 -05:00
										 |  |  |     ex.exception.error_code.should.equal('DryRunOperation') | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  |     ex.exception.status.should.equal(400) | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     ex.exception.message.should.equal( | 
					
						
							|  |  |  |         'An error occurred (DryRunOperation) when calling the DeleteSecurityGroup operation: Request would have succeeded, but DryRun flag is set') | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-23 15:26:54 -05:00
										 |  |  |     conn.delete_security_group('test2') | 
					
						
							| 
									
										
										
										
											2017-01-11 17:37:57 -08:00
										 |  |  |     conn.get_all_security_groups().should.have.length_of(3) | 
					
						
							| 
									
										
										
										
											2013-02-23 15:26:54 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Delete by group id | 
					
						
							| 
									
										
										
										
											2013-12-06 14:34:13 -08:00
										 |  |  |     conn.delete_security_group(group_id=security_group1.id) | 
					
						
							| 
									
										
										
										
											2017-01-11 17:37:57 -08:00
										 |  |  |     conn.get_all_security_groups().should.have.length_of(2) | 
					
						
							| 
									
										
										
										
											2013-02-23 16:27:43 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-11 17:13:48 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 22:35:45 -05:00
										 |  |  | @mock_ec2_deprecated | 
					
						
							| 
									
										
										
										
											2013-12-05 17:00:35 -08:00
										 |  |  | def test_delete_security_group_in_vpc(): | 
					
						
							|  |  |  |     conn = boto.connect_ec2('the_key', 'the_secret') | 
					
						
							|  |  |  |     vpc_id = "vpc-12345" | 
					
						
							|  |  |  |     security_group1 = conn.create_security_group('test1', 'test1', vpc_id) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-05 17:56:46 -08:00
										 |  |  |     # this should not throw an exception | 
					
						
							| 
									
										
										
										
											2013-12-06 14:34:13 -08:00
										 |  |  |     conn.delete_security_group(group_id=security_group1.id) | 
					
						
							| 
									
										
										
										
											2013-12-05 17:00:35 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-23 16:27:43 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 22:35:45 -05:00
										 |  |  | @mock_ec2_deprecated | 
					
						
							| 
									
										
										
										
											2013-02-23 16:27:43 -05:00
										 |  |  | def test_authorize_ip_range_and_revoke(): | 
					
						
							|  |  |  |     conn = boto.connect_ec2('the_key', 'the_secret') | 
					
						
							|  |  |  |     security_group = conn.create_security_group('test', 'test') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 19:43:48 -05:00
										 |  |  |     with assert_raises(EC2ResponseError) as ex: | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |         success = security_group.authorize( | 
					
						
							|  |  |  |             ip_protocol="tcp", from_port="22", to_port="2222", cidr_ip="123.123.123.123/32", dry_run=True) | 
					
						
							| 
									
										
										
										
											2017-02-23 19:43:48 -05:00
										 |  |  |     ex.exception.error_code.should.equal('DryRunOperation') | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  |     ex.exception.status.should.equal(400) | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     ex.exception.message.should.equal( | 
					
						
							|  |  |  |         'An error occurred (DryRunOperation) when calling the GrantSecurityGroupIngress operation: Request would have succeeded, but DryRun flag is set') | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     success = security_group.authorize( | 
					
						
							|  |  |  |         ip_protocol="tcp", from_port="22", to_port="2222", cidr_ip="123.123.123.123/32") | 
					
						
							| 
									
										
										
										
											2013-02-23 16:27:43 -05:00
										 |  |  |     assert success.should.be.true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-14 18:50:41 -04:00
										 |  |  |     security_group = conn.get_all_security_groups(groupnames=['test'])[0] | 
					
						
							| 
									
										
										
										
											2013-02-23 16:27:43 -05:00
										 |  |  |     int(security_group.rules[0].to_port).should.equal(2222) | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     security_group.rules[0].grants[ | 
					
						
							|  |  |  |         0].cidr_ip.should.equal("123.123.123.123/32") | 
					
						
							| 
									
										
										
										
											2013-02-23 16:27:43 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Wrong Cidr should throw error | 
					
						
							| 
									
										
										
										
											2014-08-25 10:54:47 -07:00
										 |  |  |     with assert_raises(EC2ResponseError) as cm: | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |         security_group.revoke(ip_protocol="tcp", from_port="22", | 
					
						
							|  |  |  |                               to_port="2222", cidr_ip="123.123.123.122/32") | 
					
						
							| 
									
										
										
										
											2014-08-25 10:54:47 -07:00
										 |  |  |     cm.exception.code.should.equal('InvalidPermission.NotFound') | 
					
						
							|  |  |  |     cm.exception.status.should.equal(400) | 
					
						
							|  |  |  |     cm.exception.request_id.should_not.be.none | 
					
						
							| 
									
										
										
										
											2013-02-23 16:27:43 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Actually revoke | 
					
						
							| 
									
										
										
										
											2017-02-23 19:43:48 -05:00
										 |  |  |     with assert_raises(EC2ResponseError) as ex: | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |         security_group.revoke(ip_protocol="tcp", from_port="22", | 
					
						
							|  |  |  |                               to_port="2222", cidr_ip="123.123.123.123/32", dry_run=True) | 
					
						
							| 
									
										
										
										
											2017-02-23 19:43:48 -05:00
										 |  |  |     ex.exception.error_code.should.equal('DryRunOperation') | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  |     ex.exception.status.should.equal(400) | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     ex.exception.message.should.equal( | 
					
						
							|  |  |  |         'An error occurred (DryRunOperation) when calling the RevokeSecurityGroupIngress operation: Request would have succeeded, but DryRun flag is set') | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     security_group.revoke(ip_protocol="tcp", from_port="22", | 
					
						
							|  |  |  |                           to_port="2222", cidr_ip="123.123.123.123/32") | 
					
						
							| 
									
										
										
										
											2013-02-23 16:27:43 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     security_group = conn.get_all_security_groups()[0] | 
					
						
							|  |  |  |     security_group.rules.should.have.length_of(0) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-15 12:36:11 -08:00
										 |  |  |     # Test for egress as well | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     egress_security_group = conn.create_security_group( | 
					
						
							|  |  |  |         'testegress', 'testegress', vpc_id='vpc-3432589') | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 19:43:48 -05:00
										 |  |  |     with assert_raises(EC2ResponseError) as ex: | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |         success = conn.authorize_security_group_egress( | 
					
						
							|  |  |  |             egress_security_group.id, "tcp", from_port="22", to_port="2222", cidr_ip="123.123.123.123/32", dry_run=True) | 
					
						
							| 
									
										
										
										
											2017-02-23 19:43:48 -05:00
										 |  |  |     ex.exception.error_code.should.equal('DryRunOperation') | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  |     ex.exception.status.should.equal(400) | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     ex.exception.message.should.equal( | 
					
						
							|  |  |  |         'An error occurred (DryRunOperation) when calling the GrantSecurityGroupEgress operation: Request would have succeeded, but DryRun flag is set') | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     success = conn.authorize_security_group_egress( | 
					
						
							|  |  |  |         egress_security_group.id, "tcp", from_port="22", to_port="2222", cidr_ip="123.123.123.123/32") | 
					
						
							| 
									
										
										
										
											2016-01-15 12:36:11 -08:00
										 |  |  |     assert success.should.be.true | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     egress_security_group = conn.get_all_security_groups( | 
					
						
							|  |  |  |         groupnames='testegress')[0] | 
					
						
							| 
									
										
										
										
											2016-04-20 23:01:09 +02:00
										 |  |  |     # There are two egress rules associated with the security group: | 
					
						
							|  |  |  |     # the default outbound rule and the new one | 
					
						
							| 
									
										
										
										
											2016-04-19 23:50:46 +02:00
										 |  |  |     int(egress_security_group.rules_egress[1].to_port).should.equal(2222) | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     egress_security_group.rules_egress[1].grants[ | 
					
						
							|  |  |  |         0].cidr_ip.should.equal("123.123.123.123/32") | 
					
						
							| 
									
										
										
										
											2016-01-15 12:36:11 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Wrong Cidr should throw error | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     egress_security_group.revoke.when.called_with( | 
					
						
							|  |  |  |         ip_protocol="tcp", from_port="22", to_port="2222", cidr_ip="123.123.123.122/32").should.throw(EC2ResponseError) | 
					
						
							| 
									
										
										
										
											2016-01-15 12:36:11 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Actually revoke | 
					
						
							| 
									
										
										
										
											2017-02-23 19:43:48 -05:00
										 |  |  |     with assert_raises(EC2ResponseError) as ex: | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |         conn.revoke_security_group_egress( | 
					
						
							|  |  |  |             egress_security_group.id, "tcp", from_port="22", to_port="2222", cidr_ip="123.123.123.123/32", dry_run=True) | 
					
						
							| 
									
										
										
										
											2017-02-23 19:43:48 -05:00
										 |  |  |     ex.exception.error_code.should.equal('DryRunOperation') | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  |     ex.exception.status.should.equal(400) | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     ex.exception.message.should.equal( | 
					
						
							|  |  |  |         'An error occurred (DryRunOperation) when calling the RevokeSecurityGroupEgress operation: Request would have succeeded, but DryRun flag is set') | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     conn.revoke_security_group_egress( | 
					
						
							|  |  |  |         egress_security_group.id, "tcp", from_port="22", to_port="2222", cidr_ip="123.123.123.123/32") | 
					
						
							| 
									
										
										
										
											2016-01-15 12:36:11 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     egress_security_group = conn.get_all_security_groups()[0] | 
					
						
							| 
									
										
										
										
											2016-04-20 23:01:09 +02:00
										 |  |  |     # There is still the default outbound rule | 
					
						
							| 
									
										
										
										
											2016-04-19 23:50:46 +02:00
										 |  |  |     egress_security_group.rules_egress.should.have.length_of(1) | 
					
						
							| 
									
										
										
										
											2016-01-15 12:36:11 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-26 00:31:01 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 22:35:45 -05:00
										 |  |  | @mock_ec2_deprecated | 
					
						
							| 
									
										
										
										
											2013-02-23 16:27:43 -05:00
										 |  |  | def test_authorize_other_group_and_revoke(): | 
					
						
							|  |  |  |     conn = boto.connect_ec2('the_key', 'the_secret') | 
					
						
							|  |  |  |     security_group = conn.create_security_group('test', 'test') | 
					
						
							|  |  |  |     other_security_group = conn.create_security_group('other', 'other') | 
					
						
							|  |  |  |     wrong_group = conn.create_security_group('wrong', 'wrong') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     success = security_group.authorize( | 
					
						
							|  |  |  |         ip_protocol="tcp", from_port="22", to_port="2222", src_group=other_security_group) | 
					
						
							| 
									
										
										
										
											2013-02-23 16:27:43 -05:00
										 |  |  |     assert success.should.be.true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     security_group = [ | 
					
						
							|  |  |  |         group for group in conn.get_all_security_groups() if group.name == 'test'][0] | 
					
						
							| 
									
										
										
										
											2013-02-23 16:27:43 -05:00
										 |  |  |     int(security_group.rules[0].to_port).should.equal(2222) | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     security_group.rules[0].grants[ | 
					
						
							|  |  |  |         0].group_id.should.equal(other_security_group.id) | 
					
						
							| 
									
										
										
										
											2013-02-23 16:27:43 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Wrong source group should throw error | 
					
						
							| 
									
										
										
										
											2014-08-25 10:54:47 -07:00
										 |  |  |     with assert_raises(EC2ResponseError) as cm: | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |         security_group.revoke(ip_protocol="tcp", from_port="22", | 
					
						
							|  |  |  |                               to_port="2222", src_group=wrong_group) | 
					
						
							| 
									
										
										
										
											2014-08-25 10:54:47 -07:00
										 |  |  |     cm.exception.code.should.equal('InvalidPermission.NotFound') | 
					
						
							|  |  |  |     cm.exception.status.should.equal(400) | 
					
						
							|  |  |  |     cm.exception.request_id.should_not.be.none | 
					
						
							| 
									
										
										
										
											2013-02-23 16:27:43 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Actually revoke | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     security_group.revoke(ip_protocol="tcp", from_port="22", | 
					
						
							|  |  |  |                           to_port="2222", src_group=other_security_group) | 
					
						
							| 
									
										
										
										
											2013-02-23 16:27:43 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     security_group = [ | 
					
						
							|  |  |  |         group for group in conn.get_all_security_groups() if group.name == 'test'][0] | 
					
						
							| 
									
										
										
										
											2013-02-23 16:27:43 -05:00
										 |  |  |     security_group.rules.should.have.length_of(0) | 
					
						
							| 
									
										
										
										
											2014-03-20 16:22:37 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-11 17:13:48 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-20 23:01:09 +02:00
										 |  |  | @mock_ec2 | 
					
						
							|  |  |  | def test_authorize_other_group_egress_and_revoke(): | 
					
						
							|  |  |  |     ec2 = boto3.resource('ec2', region_name='us-west-1') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     vpc = ec2.create_vpc(CidrBlock='10.0.0.0/16') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     sg01 = ec2.create_security_group( | 
					
						
							|  |  |  |         GroupName='sg01', Description='Test security group sg01', VpcId=vpc.id) | 
					
						
							|  |  |  |     sg02 = ec2.create_security_group( | 
					
						
							|  |  |  |         GroupName='sg02', Description='Test security group sg02', VpcId=vpc.id) | 
					
						
							| 
									
										
										
										
											2016-04-20 23:01:09 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     ip_permission = { | 
					
						
							| 
									
										
										
										
											2016-04-20 23:21:39 +02:00
										 |  |  |         'IpProtocol': 'tcp', | 
					
						
							| 
									
										
										
										
											2016-04-20 23:01:09 +02:00
										 |  |  |         'FromPort': 27017, | 
					
						
							|  |  |  |         'ToPort': 27017, | 
					
						
							|  |  |  |         'UserIdGroupPairs': [{'GroupId': sg02.id, 'GroupName': 'sg02', 'UserId': sg02.owner_id}], | 
					
						
							|  |  |  |         'IpRanges': [] | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sg01.authorize_egress(IpPermissions=[ip_permission]) | 
					
						
							|  |  |  |     sg01.ip_permissions_egress.should.have.length_of(2) | 
					
						
							|  |  |  |     sg01.ip_permissions_egress.should.contain(ip_permission) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sg01.revoke_egress(IpPermissions=[ip_permission]) | 
					
						
							|  |  |  |     sg01.ip_permissions_egress.should.have.length_of(1) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-11 17:37:57 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 22:35:45 -05:00
										 |  |  | @mock_ec2_deprecated | 
					
						
							| 
									
										
										
										
											2014-03-20 17:26:08 -07:00
										 |  |  | def test_authorize_group_in_vpc(): | 
					
						
							| 
									
										
										
										
											2014-03-20 16:22:37 -07:00
										 |  |  |     conn = boto.connect_ec2('the_key', 'the_secret') | 
					
						
							|  |  |  |     vpc_id = "vpc-12345" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # create 2 groups in a vpc | 
					
						
							| 
									
										
										
										
											2014-05-11 17:13:48 -04:00
										 |  |  |     security_group = conn.create_security_group('test1', 'test1', vpc_id) | 
					
						
							|  |  |  |     other_security_group = conn.create_security_group('test2', 'test2', vpc_id) | 
					
						
							| 
									
										
										
										
											2014-03-20 16:22:37 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     success = security_group.authorize( | 
					
						
							|  |  |  |         ip_protocol="tcp", from_port="22", to_port="2222", src_group=other_security_group) | 
					
						
							| 
									
										
										
										
											2014-03-21 13:31:00 -07:00
										 |  |  |     success.should.be.true | 
					
						
							| 
									
										
										
										
											2014-03-20 16:22:37 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-11 17:13:48 -04:00
										 |  |  |     # Check that the rule is accurate | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     security_group = [ | 
					
						
							|  |  |  |         group for group in conn.get_all_security_groups() if group.name == 'test1'][0] | 
					
						
							| 
									
										
										
										
											2014-05-11 17:13:48 -04:00
										 |  |  |     int(security_group.rules[0].to_port).should.equal(2222) | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     security_group.rules[0].grants[ | 
					
						
							|  |  |  |         0].group_id.should.equal(other_security_group.id) | 
					
						
							| 
									
										
										
										
											2014-03-20 16:22:37 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-20 23:01:09 +02:00
										 |  |  |     # Now remove the rule | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     success = security_group.revoke( | 
					
						
							|  |  |  |         ip_protocol="tcp", from_port="22", to_port="2222", src_group=other_security_group) | 
					
						
							| 
									
										
										
										
											2014-05-11 17:13:48 -04:00
										 |  |  |     success.should.be.true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # And check that it gets revoked | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     security_group = [ | 
					
						
							|  |  |  |         group for group in conn.get_all_security_groups() if group.name == 'test1'][0] | 
					
						
							| 
									
										
										
										
											2014-05-11 17:13:48 -04:00
										 |  |  |     security_group.rules.should.have.length_of(0) | 
					
						
							| 
									
										
										
										
											2014-08-21 19:04:48 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 22:35:45 -05:00
										 |  |  | @mock_ec2_deprecated | 
					
						
							| 
									
										
										
										
											2014-08-21 19:04:48 -05:00
										 |  |  | def test_get_all_security_groups(): | 
					
						
							|  |  |  |     conn = boto.connect_ec2() | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     sg1 = conn.create_security_group( | 
					
						
							|  |  |  |         name='test1', description='test1', vpc_id='vpc-mjm05d27') | 
					
						
							| 
									
										
										
										
											2015-02-14 08:57:14 -05:00
										 |  |  |     conn.create_security_group(name='test2', description='test2') | 
					
						
							| 
									
										
										
										
											2014-08-21 19:04:48 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     resp = conn.get_all_security_groups(groupnames=['test1']) | 
					
						
							|  |  |  |     resp.should.have.length_of(1) | 
					
						
							| 
									
										
										
										
											2014-09-10 09:42:38 -07:00
										 |  |  |     resp[0].id.should.equal(sg1.id) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-18 19:51:01 +05:30
										 |  |  |     with assert_raises(EC2ResponseError) as cm: | 
					
						
							|  |  |  |         conn.get_all_security_groups(groupnames=['does_not_exist']) | 
					
						
							|  |  |  |     cm.exception.code.should.equal('InvalidGroup.NotFound') | 
					
						
							|  |  |  |     cm.exception.status.should.equal(400) | 
					
						
							|  |  |  |     cm.exception.request_id.should_not.be.none | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resp.should.have.length_of(1) | 
					
						
							|  |  |  |     resp[0].id.should.equal(sg1.id) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-09-10 09:42:38 -07:00
										 |  |  |     resp = conn.get_all_security_groups(filters={'vpc-id': ['vpc-mjm05d27']}) | 
					
						
							|  |  |  |     resp.should.have.length_of(1) | 
					
						
							|  |  |  |     resp[0].id.should.equal(sg1.id) | 
					
						
							| 
									
										
										
										
											2014-08-21 19:04:48 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     resp = conn.get_all_security_groups(filters={'vpc_id': ['vpc-mjm05d27']}) | 
					
						
							|  |  |  |     resp.should.have.length_of(1) | 
					
						
							| 
									
										
										
										
											2014-09-10 09:42:38 -07:00
										 |  |  |     resp[0].id.should.equal(sg1.id) | 
					
						
							| 
									
										
										
										
											2014-08-21 19:04:48 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     resp = conn.get_all_security_groups(filters={'description': ['test1']}) | 
					
						
							|  |  |  |     resp.should.have.length_of(1) | 
					
						
							| 
									
										
										
										
											2014-09-10 09:42:38 -07:00
										 |  |  |     resp[0].id.should.equal(sg1.id) | 
					
						
							| 
									
										
										
										
											2014-08-21 19:04:48 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     resp = conn.get_all_security_groups() | 
					
						
							| 
									
										
										
										
											2017-01-11 17:37:57 -08:00
										 |  |  |     resp.should.have.length_of(4) | 
					
						
							| 
									
										
										
										
											2014-10-06 14:42:12 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 22:35:45 -05:00
										 |  |  | @mock_ec2_deprecated | 
					
						
							| 
									
										
										
										
											2014-10-06 14:42:12 -04:00
										 |  |  | def test_authorize_bad_cidr_throws_invalid_parameter_value(): | 
					
						
							|  |  |  |     conn = boto.connect_ec2('the_key', 'the_secret') | 
					
						
							|  |  |  |     security_group = conn.create_security_group('test', 'test') | 
					
						
							|  |  |  |     with assert_raises(EC2ResponseError) as cm: | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |         security_group.authorize( | 
					
						
							|  |  |  |             ip_protocol="tcp", from_port="22", to_port="2222", cidr_ip="123.123.123.123") | 
					
						
							| 
									
										
										
										
											2014-10-06 14:42:12 -04:00
										 |  |  |     cm.exception.code.should.equal('InvalidParameterValue') | 
					
						
							|  |  |  |     cm.exception.status.should.equal(400) | 
					
						
							|  |  |  |     cm.exception.request_id.should_not.be.none | 
					
						
							| 
									
										
										
										
											2015-02-14 08:57:14 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 22:35:45 -05:00
										 |  |  | @mock_ec2_deprecated | 
					
						
							| 
									
										
										
										
											2015-02-14 08:57:14 -05:00
										 |  |  | def test_security_group_tagging(): | 
					
						
							|  |  |  |     conn = boto.connect_vpc() | 
					
						
							|  |  |  |     vpc = conn.create_vpc("10.0.0.0/16") | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-14 08:57:14 -05:00
										 |  |  |     sg = conn.create_security_group("test-sg", "Test SG", vpc.id) | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 19:43:48 -05:00
										 |  |  |     with assert_raises(EC2ResponseError) as ex: | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  |         sg.add_tag("Test", "Tag", dry_run=True) | 
					
						
							| 
									
										
										
										
											2017-02-23 19:43:48 -05:00
										 |  |  |     ex.exception.error_code.should.equal('DryRunOperation') | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  |     ex.exception.status.should.equal(400) | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     ex.exception.message.should.equal( | 
					
						
							|  |  |  |         'An error occurred (DryRunOperation) when calling the CreateTags operation: Request would have succeeded, but DryRun flag is set') | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-14 08:57:14 -05:00
										 |  |  |     sg.add_tag("Test", "Tag") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     tag = conn.get_all_tags()[0] | 
					
						
							|  |  |  |     tag.name.should.equal("Test") | 
					
						
							|  |  |  |     tag.value.should.equal("Tag") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     group = conn.get_all_security_groups("test-sg")[0] | 
					
						
							|  |  |  |     group.tags.should.have.length_of(1) | 
					
						
							|  |  |  |     group.tags["Test"].should.equal("Tag") | 
					
						
							| 
									
										
										
										
											2015-02-24 17:56:26 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 22:35:45 -05:00
										 |  |  | @mock_ec2_deprecated | 
					
						
							| 
									
										
										
										
											2015-02-24 17:56:26 -05:00
										 |  |  | def test_security_group_tag_filtering(): | 
					
						
							|  |  |  |     conn = boto.connect_ec2() | 
					
						
							|  |  |  |     sg = conn.create_security_group("test-sg", "Test SG") | 
					
						
							|  |  |  |     sg.add_tag("test-tag", "test-value") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     groups = conn.get_all_security_groups( | 
					
						
							|  |  |  |         filters={"tag:test-tag": "test-value"}) | 
					
						
							| 
									
										
										
										
											2015-02-24 17:56:26 -05:00
										 |  |  |     groups.should.have.length_of(1) | 
					
						
							| 
									
										
										
										
											2016-04-26 10:53:18 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 22:35:45 -05:00
										 |  |  | @mock_ec2_deprecated | 
					
						
							| 
									
										
										
										
											2016-04-26 10:53:18 +02:00
										 |  |  | def test_authorize_all_protocols_with_no_port_specification(): | 
					
						
							|  |  |  |     conn = boto.connect_ec2() | 
					
						
							|  |  |  |     sg = conn.create_security_group('test', 'test') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     success = sg.authorize(ip_protocol='-1', cidr_ip='0.0.0.0/0') | 
					
						
							|  |  |  |     success.should.be.true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sg = conn.get_all_security_groups('test')[0] | 
					
						
							|  |  |  |     sg.rules[0].from_port.should.equal(None) | 
					
						
							|  |  |  |     sg.rules[0].to_port.should.equal(None) | 
					
						
							| 
									
										
										
										
											2016-06-23 12:03:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-11 17:37:57 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 22:35:45 -05:00
										 |  |  | @mock_ec2_deprecated | 
					
						
							| 
									
										
										
										
											2017-01-19 02:37:55 +00:00
										 |  |  | def test_sec_group_rule_limit(): | 
					
						
							|  |  |  |     ec2_conn = boto.connect_ec2() | 
					
						
							|  |  |  |     sg = ec2_conn.create_security_group('test', 'test') | 
					
						
							|  |  |  |     other_sg = ec2_conn.create_security_group('test_2', 'test_other') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # INGRESS | 
					
						
							|  |  |  |     with assert_raises(EC2ResponseError) as cm: | 
					
						
							|  |  |  |         ec2_conn.authorize_security_group( | 
					
						
							|  |  |  |             group_id=sg.id, ip_protocol='-1', | 
					
						
							|  |  |  |             cidr_ip=['{0}.0.0.0/0'.format(i) for i in range(110)]) | 
					
						
							|  |  |  |     cm.exception.error_code.should.equal('RulesPerSecurityGroupLimitExceeded') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sg.rules.should.be.empty | 
					
						
							|  |  |  |     # authorize a rule targeting a different sec group (because this count too) | 
					
						
							|  |  |  |     success = ec2_conn.authorize_security_group( | 
					
						
							|  |  |  |         group_id=sg.id, ip_protocol='-1', | 
					
						
							|  |  |  |         src_security_group_group_id=other_sg.id) | 
					
						
							|  |  |  |     success.should.be.true | 
					
						
							|  |  |  |     # fill the rules up the limit | 
					
						
							|  |  |  |     success = ec2_conn.authorize_security_group( | 
					
						
							|  |  |  |         group_id=sg.id, ip_protocol='-1', | 
					
						
							|  |  |  |         cidr_ip=['{0}.0.0.0/0'.format(i) for i in range(99)]) | 
					
						
							|  |  |  |     success.should.be.true | 
					
						
							|  |  |  |     # verify that we cannot authorize past the limit for a CIDR IP | 
					
						
							|  |  |  |     with assert_raises(EC2ResponseError) as cm: | 
					
						
							|  |  |  |         ec2_conn.authorize_security_group( | 
					
						
							|  |  |  |             group_id=sg.id, ip_protocol='-1', cidr_ip=['100.0.0.0/0']) | 
					
						
							|  |  |  |     cm.exception.error_code.should.equal('RulesPerSecurityGroupLimitExceeded') | 
					
						
							|  |  |  |     # verify that we cannot authorize past the limit for a different sec group | 
					
						
							|  |  |  |     with assert_raises(EC2ResponseError) as cm: | 
					
						
							|  |  |  |         ec2_conn.authorize_security_group( | 
					
						
							|  |  |  |             group_id=sg.id, ip_protocol='-1', | 
					
						
							|  |  |  |             src_security_group_group_id=other_sg.id) | 
					
						
							|  |  |  |     cm.exception.error_code.should.equal('RulesPerSecurityGroupLimitExceeded') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # EGRESS | 
					
						
							|  |  |  |     # authorize a rule targeting a different sec group (because this count too) | 
					
						
							|  |  |  |     ec2_conn.authorize_security_group_egress( | 
					
						
							|  |  |  |         group_id=sg.id, ip_protocol='-1', | 
					
						
							|  |  |  |         src_group_id=other_sg.id) | 
					
						
							|  |  |  |     # fill the rules up the limit | 
					
						
							|  |  |  |     # remember that by default, when created a sec group contains 1 egress rule | 
					
						
							|  |  |  |     # so our other_sg rule + 98 CIDR IP rules + 1 by default == 100 the limit | 
					
						
							|  |  |  |     for i in range(98): | 
					
						
							|  |  |  |         ec2_conn.authorize_security_group_egress( | 
					
						
							|  |  |  |             group_id=sg.id, ip_protocol='-1', | 
					
						
							|  |  |  |             cidr_ip='{0}.0.0.0/0'.format(i)) | 
					
						
							|  |  |  |     # verify that we cannot authorize past the limit for a CIDR IP | 
					
						
							|  |  |  |     with assert_raises(EC2ResponseError) as cm: | 
					
						
							|  |  |  |         ec2_conn.authorize_security_group_egress( | 
					
						
							|  |  |  |             group_id=sg.id, ip_protocol='-1', | 
					
						
							|  |  |  |             cidr_ip='101.0.0.0/0') | 
					
						
							|  |  |  |     cm.exception.error_code.should.equal('RulesPerSecurityGroupLimitExceeded') | 
					
						
							|  |  |  |     # verify that we cannot authorize past the limit for a different sec group | 
					
						
							|  |  |  |     with assert_raises(EC2ResponseError) as cm: | 
					
						
							|  |  |  |         ec2_conn.authorize_security_group_egress( | 
					
						
							|  |  |  |             group_id=sg.id, ip_protocol='-1', | 
					
						
							|  |  |  |             src_group_id=other_sg.id) | 
					
						
							|  |  |  |     cm.exception.error_code.should.equal('RulesPerSecurityGroupLimitExceeded') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 22:35:45 -05:00
										 |  |  | @mock_ec2_deprecated | 
					
						
							| 
									
										
										
										
											2017-01-19 02:37:55 +00:00
										 |  |  | def test_sec_group_rule_limit_vpc(): | 
					
						
							|  |  |  |     ec2_conn = boto.connect_ec2() | 
					
						
							|  |  |  |     vpc_conn = boto.connect_vpc() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     vpc = vpc_conn.create_vpc('10.0.0.0/8') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sg = ec2_conn.create_security_group('test', 'test', vpc_id=vpc.id) | 
					
						
							|  |  |  |     other_sg = ec2_conn.create_security_group('test_2', 'test', vpc_id=vpc.id) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # INGRESS | 
					
						
							|  |  |  |     with assert_raises(EC2ResponseError) as cm: | 
					
						
							|  |  |  |         ec2_conn.authorize_security_group( | 
					
						
							|  |  |  |             group_id=sg.id, ip_protocol='-1', | 
					
						
							|  |  |  |             cidr_ip=['{0}.0.0.0/0'.format(i) for i in range(110)]) | 
					
						
							|  |  |  |     cm.exception.error_code.should.equal('RulesPerSecurityGroupLimitExceeded') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sg.rules.should.be.empty | 
					
						
							|  |  |  |     # authorize a rule targeting a different sec group (because this count too) | 
					
						
							|  |  |  |     success = ec2_conn.authorize_security_group( | 
					
						
							|  |  |  |         group_id=sg.id, ip_protocol='-1', | 
					
						
							|  |  |  |         src_security_group_group_id=other_sg.id) | 
					
						
							|  |  |  |     success.should.be.true | 
					
						
							|  |  |  |     # fill the rules up the limit | 
					
						
							|  |  |  |     success = ec2_conn.authorize_security_group( | 
					
						
							|  |  |  |         group_id=sg.id, ip_protocol='-1', | 
					
						
							|  |  |  |         cidr_ip=['{0}.0.0.0/0'.format(i) for i in range(49)]) | 
					
						
							|  |  |  |     # verify that we cannot authorize past the limit for a CIDR IP | 
					
						
							|  |  |  |     success.should.be.true | 
					
						
							|  |  |  |     with assert_raises(EC2ResponseError) as cm: | 
					
						
							|  |  |  |         ec2_conn.authorize_security_group( | 
					
						
							|  |  |  |             group_id=sg.id, ip_protocol='-1', cidr_ip=['100.0.0.0/0']) | 
					
						
							|  |  |  |     cm.exception.error_code.should.equal('RulesPerSecurityGroupLimitExceeded') | 
					
						
							|  |  |  |     # verify that we cannot authorize past the limit for a different sec group | 
					
						
							|  |  |  |     with assert_raises(EC2ResponseError) as cm: | 
					
						
							|  |  |  |         ec2_conn.authorize_security_group( | 
					
						
							|  |  |  |             group_id=sg.id, ip_protocol='-1', | 
					
						
							|  |  |  |             src_security_group_group_id=other_sg.id) | 
					
						
							|  |  |  |     cm.exception.error_code.should.equal('RulesPerSecurityGroupLimitExceeded') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # EGRESS | 
					
						
							|  |  |  |     # authorize a rule targeting a different sec group (because this count too) | 
					
						
							|  |  |  |     ec2_conn.authorize_security_group_egress( | 
					
						
							|  |  |  |         group_id=sg.id, ip_protocol='-1', | 
					
						
							|  |  |  |         src_group_id=other_sg.id) | 
					
						
							|  |  |  |     # fill the rules up the limit | 
					
						
							|  |  |  |     # remember that by default, when created a sec group contains 1 egress rule | 
					
						
							|  |  |  |     # so our other_sg rule + 48 CIDR IP rules + 1 by default == 50 the limit | 
					
						
							|  |  |  |     for i in range(48): | 
					
						
							|  |  |  |         ec2_conn.authorize_security_group_egress( | 
					
						
							|  |  |  |             group_id=sg.id, ip_protocol='-1', | 
					
						
							|  |  |  |             cidr_ip='{0}.0.0.0/0'.format(i)) | 
					
						
							|  |  |  |     # verify that we cannot authorize past the limit for a CIDR IP | 
					
						
							|  |  |  |     with assert_raises(EC2ResponseError) as cm: | 
					
						
							|  |  |  |         ec2_conn.authorize_security_group_egress( | 
					
						
							|  |  |  |             group_id=sg.id, ip_protocol='-1', | 
					
						
							|  |  |  |             cidr_ip='50.0.0.0/0') | 
					
						
							|  |  |  |     cm.exception.error_code.should.equal('RulesPerSecurityGroupLimitExceeded') | 
					
						
							|  |  |  |     # verify that we cannot authorize past the limit for a different sec group | 
					
						
							|  |  |  |     with assert_raises(EC2ResponseError) as cm: | 
					
						
							|  |  |  |         ec2_conn.authorize_security_group_egress( | 
					
						
							|  |  |  |             group_id=sg.id, ip_protocol='-1', | 
					
						
							|  |  |  |             src_group_id=other_sg.id) | 
					
						
							|  |  |  |     cm.exception.error_code.should.equal('RulesPerSecurityGroupLimitExceeded') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-23 12:03:29 +01:00
										 |  |  | '''
 | 
					
						
							|  |  |  | Boto3 | 
					
						
							|  |  |  | '''
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-11 22:35:27 -05:00
										 |  |  | @mock_ec2 | 
					
						
							|  |  |  | def test_add_same_rule_twice_throws_error(): | 
					
						
							|  |  |  |     ec2 = boto3.resource('ec2', region_name='us-west-1') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     vpc = ec2.create_vpc(CidrBlock='10.0.0.0/16') | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     sg = ec2.create_security_group( | 
					
						
							|  |  |  |         GroupName='sg1', Description='Test security group sg1', VpcId=vpc.id) | 
					
						
							| 
									
										
										
										
											2017-01-11 22:35:27 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     ip_permissions = [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             'IpProtocol': 'tcp', | 
					
						
							|  |  |  |             'FromPort': 27017, | 
					
						
							|  |  |  |             'ToPort': 27017, | 
					
						
							|  |  |  |             'IpRanges': [{"CidrIp": "1.2.3.4/32"}] | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |     sg.authorize_ingress(IpPermissions=ip_permissions) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with assert_raises(ClientError) as ex: | 
					
						
							|  |  |  |         sg.authorize_ingress(IpPermissions=ip_permissions) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-23 12:03:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | @mock_ec2 | 
					
						
							|  |  |  | def test_security_group_tagging_boto3(): | 
					
						
							| 
									
										
										
										
											2016-06-23 12:38:17 +01:00
										 |  |  |     conn = boto3.client('ec2', region_name='us-east-1') | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-23 12:03:29 +01:00
										 |  |  |     sg = conn.create_security_group(GroupName="test-sg", Description="Test SG") | 
					
						
							| 
									
										
										
										
											2016-10-15 23:08:44 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 19:43:48 -05:00
										 |  |  |     with assert_raises(ClientError) as ex: | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |         conn.create_tags(Resources=[sg['GroupId']], Tags=[ | 
					
						
							|  |  |  |                          {'Key': 'Test', 'Value': 'Tag'}], DryRun=True) | 
					
						
							| 
									
										
										
										
											2017-02-23 19:43:48 -05:00
										 |  |  |     ex.exception.response['Error']['Code'].should.equal('DryRunOperation') | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     ex.exception.response['ResponseMetadata'][ | 
					
						
							|  |  |  |         'HTTPStatusCode'].should.equal(400) | 
					
						
							|  |  |  |     ex.exception.response['Error']['Message'].should.equal( | 
					
						
							|  |  |  |         'An error occurred (DryRunOperation) when calling the CreateTags operation: Request would have succeeded, but DryRun flag is set') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     conn.create_tags(Resources=[sg['GroupId']], Tags=[ | 
					
						
							|  |  |  |                      {'Key': 'Test', 'Value': 'Tag'}]) | 
					
						
							|  |  |  |     describe = conn.describe_security_groups( | 
					
						
							|  |  |  |         Filters=[{'Name': 'tag-value', 'Values': ['Tag']}]) | 
					
						
							| 
									
										
										
										
											2016-06-23 12:03:29 +01:00
										 |  |  |     tag = describe["SecurityGroups"][0]['Tags'][0] | 
					
						
							|  |  |  |     tag['Value'].should.equal("Tag") | 
					
						
							|  |  |  |     tag['Key'].should.equal("Test") | 
					
						
							| 
									
										
										
										
											2016-10-20 18:13:41 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-06 21:55:01 +02:00
										 |  |  | @mock_ec2 | 
					
						
							|  |  |  | def test_security_group_wildcard_tag_filter_boto3(): | 
					
						
							|  |  |  |     conn = boto3.client('ec2', region_name='us-east-1') | 
					
						
							|  |  |  |     sg = conn.create_security_group(GroupName="test-sg", Description="Test SG") | 
					
						
							|  |  |  |     conn.create_tags(Resources=[sg['GroupId']], Tags=[ | 
					
						
							|  |  |  |                      {'Key': 'Test', 'Value': 'Tag'}]) | 
					
						
							|  |  |  |     describe = conn.describe_security_groups( | 
					
						
							|  |  |  |         Filters=[{'Name': 'tag-value', 'Values': ['*']}]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     tag = describe["SecurityGroups"][0]['Tags'][0] | 
					
						
							|  |  |  |     tag['Value'].should.equal("Tag") | 
					
						
							|  |  |  |     tag['Key'].should.equal("Test") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-20 18:13:41 +00:00
										 |  |  | @mock_ec2 | 
					
						
							|  |  |  | def test_authorize_and_revoke_in_bulk(): | 
					
						
							|  |  |  |     ec2 = boto3.resource('ec2', region_name='us-west-1') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     vpc = ec2.create_vpc(CidrBlock='10.0.0.0/16') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     sg01 = ec2.create_security_group( | 
					
						
							|  |  |  |         GroupName='sg01', Description='Test security group sg01', VpcId=vpc.id) | 
					
						
							|  |  |  |     sg02 = ec2.create_security_group( | 
					
						
							|  |  |  |         GroupName='sg02', Description='Test security group sg02', VpcId=vpc.id) | 
					
						
							|  |  |  |     sg03 = ec2.create_security_group( | 
					
						
							|  |  |  |         GroupName='sg03', Description='Test security group sg03') | 
					
						
							| 
									
										
										
										
											2016-10-20 18:13:41 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     ip_permissions = [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             'IpProtocol': 'tcp', | 
					
						
							|  |  |  |             'FromPort': 27017, | 
					
						
							|  |  |  |             'ToPort': 27017, | 
					
						
							|  |  |  |             'UserIdGroupPairs': [{'GroupId': sg02.id, 'GroupName': 'sg02', | 
					
						
							|  |  |  |                                   'UserId': sg02.owner_id}], | 
					
						
							|  |  |  |             'IpRanges': [] | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             'IpProtocol': 'tcp', | 
					
						
							| 
									
										
										
										
											2017-01-11 22:35:27 -05:00
										 |  |  |             'FromPort': 27018, | 
					
						
							|  |  |  |             'ToPort': 27018, | 
					
						
							| 
									
										
										
										
											2016-10-20 17:25:54 +00:00
										 |  |  |             'UserIdGroupPairs': [{'GroupId': sg02.id, 'UserId': sg02.owner_id}], | 
					
						
							|  |  |  |             'IpRanges': [] | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             'IpProtocol': 'tcp', | 
					
						
							|  |  |  |             'FromPort': 27017, | 
					
						
							|  |  |  |             'ToPort': 27017, | 
					
						
							|  |  |  |             'UserIdGroupPairs': [{'GroupName': 'sg03', 'UserId': sg03.owner_id}], | 
					
						
							| 
									
										
										
										
											2016-10-20 18:13:41 +00:00
										 |  |  |             'IpRanges': [] | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     ] | 
					
						
							| 
									
										
										
										
											2016-10-20 17:25:54 +00:00
										 |  |  |     expected_ip_permissions = copy.deepcopy(ip_permissions) | 
					
						
							|  |  |  |     expected_ip_permissions[1]['UserIdGroupPairs'][0]['GroupName'] = 'sg02' | 
					
						
							|  |  |  |     expected_ip_permissions[2]['UserIdGroupPairs'][0]['GroupId'] = sg03.id | 
					
						
							| 
									
										
										
										
											2016-10-20 18:13:41 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     sg01.authorize_ingress(IpPermissions=ip_permissions) | 
					
						
							| 
									
										
										
										
											2016-10-20 17:25:54 +00:00
										 |  |  |     sg01.ip_permissions.should.have.length_of(3) | 
					
						
							|  |  |  |     for ip_permission in expected_ip_permissions: | 
					
						
							| 
									
										
										
										
											2016-10-20 18:13:41 +00:00
										 |  |  |         sg01.ip_permissions.should.contain(ip_permission) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sg01.revoke_ingress(IpPermissions=ip_permissions) | 
					
						
							|  |  |  |     sg01.ip_permissions.should.be.empty | 
					
						
							| 
									
										
										
										
											2016-10-20 17:25:54 +00:00
										 |  |  |     for ip_permission in expected_ip_permissions: | 
					
						
							| 
									
										
										
										
											2016-10-20 18:13:41 +00:00
										 |  |  |         sg01.ip_permissions.shouldnt.contain(ip_permission) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sg01.authorize_egress(IpPermissions=ip_permissions) | 
					
						
							| 
									
										
										
										
											2016-10-20 17:25:54 +00:00
										 |  |  |     sg01.ip_permissions_egress.should.have.length_of(4) | 
					
						
							|  |  |  |     for ip_permission in expected_ip_permissions: | 
					
						
							| 
									
										
										
										
											2016-10-20 18:13:41 +00:00
										 |  |  |         sg01.ip_permissions_egress.should.contain(ip_permission) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sg01.revoke_egress(IpPermissions=ip_permissions) | 
					
						
							|  |  |  |     sg01.ip_permissions_egress.should.have.length_of(1) | 
					
						
							| 
									
										
										
										
											2016-10-20 17:25:54 +00:00
										 |  |  |     for ip_permission in expected_ip_permissions: | 
					
						
							| 
									
										
										
										
											2016-10-20 18:13:41 +00:00
										 |  |  |         sg01.ip_permissions_egress.shouldnt.contain(ip_permission) | 
					
						
							| 
									
										
										
										
											2017-02-09 13:29:37 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-13 15:03:07 -04:00
										 |  |  | @mock_ec2 | 
					
						
							|  |  |  | def test_security_group_ingress_without_multirule(): | 
					
						
							|  |  |  |     ec2 = boto3.resource('ec2', 'ca-central-1') | 
					
						
							|  |  |  |     sg = ec2.create_security_group(Description='Test SG', GroupName='test-sg') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     assert len(sg.ip_permissions) == 0 | 
					
						
							|  |  |  |     sg.authorize_ingress(CidrIp='192.168.0.1/32', FromPort=22, ToPort=22, IpProtocol='tcp') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Fails | 
					
						
							|  |  |  |     assert len(sg.ip_permissions) == 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_ec2 | 
					
						
							|  |  |  | def test_security_group_ingress_without_multirule_after_reload(): | 
					
						
							|  |  |  |     ec2 = boto3.resource('ec2', 'ca-central-1') | 
					
						
							|  |  |  |     sg = ec2.create_security_group(Description='Test SG', GroupName='test-sg') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     assert len(sg.ip_permissions) == 0 | 
					
						
							|  |  |  |     sg.authorize_ingress(CidrIp='192.168.0.1/32', FromPort=22, ToPort=22, IpProtocol='tcp') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Also Fails | 
					
						
							|  |  |  |     sg_after = ec2.SecurityGroup(sg.id) | 
					
						
							|  |  |  |     assert len(sg_after.ip_permissions) == 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-15 22:35:45 -05:00
										 |  |  | @mock_ec2_deprecated | 
					
						
							| 
									
										
										
										
											2017-02-09 13:29:37 +11:00
										 |  |  | def test_get_all_security_groups_filter_with_same_vpc_id(): | 
					
						
							|  |  |  |     conn = boto.connect_ec2('the_key', 'the_secret') | 
					
						
							|  |  |  |     vpc_id = 'vpc-5300000c' | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     security_group = conn.create_security_group( | 
					
						
							|  |  |  |         'test1', 'test1', vpc_id=vpc_id) | 
					
						
							|  |  |  |     security_group2 = conn.create_security_group( | 
					
						
							|  |  |  |         'test2', 'test2', vpc_id=vpc_id) | 
					
						
							| 
									
										
										
										
											2017-02-09 13:29:37 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |     security_group.vpc_id.should.equal(vpc_id) | 
					
						
							|  |  |  |     security_group2.vpc_id.should.equal(vpc_id) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     security_groups = conn.get_all_security_groups( | 
					
						
							|  |  |  |         group_ids=[security_group.id], filters={'vpc-id': [vpc_id]}) | 
					
						
							| 
									
										
										
										
											2017-02-09 13:29:37 +11:00
										 |  |  |     security_groups.should.have.length_of(1) | 
					
						
							| 
									
										
										
										
											2017-09-18 19:51:01 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |     with assert_raises(EC2ResponseError) as cm: | 
					
						
							|  |  |  |         conn.get_all_security_groups(group_ids=['does_not_exist']) | 
					
						
							|  |  |  |     cm.exception.code.should.equal('InvalidGroup.NotFound') | 
					
						
							|  |  |  |     cm.exception.status.should.equal(400) | 
					
						
							|  |  |  |     cm.exception.request_id.should_not.be.none |