| Index: third_party/gsutil/third_party/boto/tests/unit/ec2/test_securitygroup.py
|
| diff --git a/third_party/gsutil/third_party/boto/tests/unit/ec2/test_securitygroup.py b/third_party/gsutil/third_party/boto/tests/unit/ec2/test_securitygroup.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..78c634cf9b575a9ef7f49ceda184b954739d8ec8
|
| --- /dev/null
|
| +++ b/third_party/gsutil/third_party/boto/tests/unit/ec2/test_securitygroup.py
|
| @@ -0,0 +1,211 @@
|
| +#!/usr/bin/env python
|
| +
|
| +from tests.compat import unittest
|
| +from tests.unit import AWSMockServiceTestCase
|
| +
|
| +from boto.ec2.connection import EC2Connection
|
| +from boto.ec2.securitygroup import SecurityGroup
|
| +
|
| +
|
| +DESCRIBE_SECURITY_GROUP = br"""<?xml version="1.0" encoding="UTF-8"?>
|
| +<DescribeSecurityGroupsResponse xmlns="http://ec2.amazonaws.com/doc/2013-06-15/">
|
| + <requestId>59dbff89-35bd-4eac-99ed-be587EXAMPLE</requestId>
|
| + <securityGroupInfo>
|
| + <item>
|
| + <ownerId>111122223333</ownerId>
|
| + <groupId>sg-1a2b3c4d</groupId>
|
| + <groupName>WebServers</groupName>
|
| + <groupDescription>Web Servers</groupDescription>
|
| + <vpcId/>
|
| + <ipPermissions>
|
| + <item>
|
| + <ipProtocol>tcp</ipProtocol>
|
| + <fromPort>80</fromPort>
|
| + <toPort>80</toPort>
|
| + <groups/>
|
| + <ipRanges>
|
| + <item>
|
| + <cidrIp>0.0.0.0/0</cidrIp>
|
| + </item>
|
| + </ipRanges>
|
| + </item>
|
| + </ipPermissions>
|
| + <ipPermissionsEgress/>
|
| + </item>
|
| + <item>
|
| + <ownerId>111122223333</ownerId>
|
| + <groupId>sg-2a2b3c4d</groupId>
|
| + <groupName>RangedPortsBySource</groupName>
|
| + <groupDescription>Group A</groupDescription>
|
| + <ipPermissions>
|
| + <item>
|
| + <ipProtocol>tcp</ipProtocol>
|
| + <fromPort>6000</fromPort>
|
| + <toPort>7000</toPort>
|
| + <groups>
|
| + <item>
|
| + <userId>111122223333</userId>
|
| + <groupId>sg-3a2b3c4d</groupId>
|
| + <groupName>Group B</groupName>
|
| + </item>
|
| + </groups>
|
| + <ipRanges/>
|
| + </item>
|
| + </ipPermissions>
|
| + <ipPermissionsEgress/>
|
| + </item>
|
| + </securityGroupInfo>
|
| +</DescribeSecurityGroupsResponse>"""
|
| +
|
| +DESCRIBE_INSTANCES = br"""<?xml version="1.0" encoding="UTF-8"?>
|
| +<DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2012-10-01/">
|
| + <requestId>c6132c74-b524-4884-87f5-0f4bde4a9760</requestId>
|
| + <reservationSet>
|
| + <item>
|
| + <reservationId>r-72ef4a0a</reservationId>
|
| + <ownerId>184906166255</ownerId>
|
| + <groupSet/>
|
| + <instancesSet>
|
| + <item>
|
| + <instanceId>i-instance</instanceId>
|
| + <imageId>ami-1624987f</imageId>
|
| + <instanceState>
|
| + <code>16</code>
|
| + <name>running</name>
|
| + </instanceState>
|
| + <privateDnsName/>
|
| + <dnsName/>
|
| + <reason/>
|
| + <keyName>mykeypair</keyName>
|
| + <amiLaunchIndex>0</amiLaunchIndex>
|
| + <productCodes/>
|
| + <instanceType>m1.small</instanceType>
|
| + <launchTime>2012-12-14T23:48:37.000Z</launchTime>
|
| + <placement>
|
| + <availabilityZone>us-east-1d</availabilityZone>
|
| + <groupName/>
|
| + <tenancy>default</tenancy>
|
| + </placement>
|
| + <kernelId>aki-88aa75e1</kernelId>
|
| + <monitoring>
|
| + <state>disabled</state>
|
| + </monitoring>
|
| + <subnetId>subnet-0dc60667</subnetId>
|
| + <vpcId>vpc-id</vpcId>
|
| + <privateIpAddress>10.0.0.67</privateIpAddress>
|
| + <sourceDestCheck>true</sourceDestCheck>
|
| + <groupSet>
|
| + <item>
|
| + <groupId>sg-1a2b3c4d</groupId>
|
| + <groupName>WebServerSG</groupName>
|
| + </item>
|
| + </groupSet>
|
| + <architecture>x86_64</architecture>
|
| + <rootDeviceType>ebs</rootDeviceType>
|
| + <rootDeviceName>/dev/sda1</rootDeviceName>
|
| + <blockDeviceMapping>
|
| + <item>
|
| + <deviceName>/dev/sda1</deviceName>
|
| + <ebs>
|
| + <volumeId>vol-id</volumeId>
|
| + <status>attached</status>
|
| + <attachTime>2012-12-14T23:48:43.000Z</attachTime>
|
| + <deleteOnTermination>true</deleteOnTermination>
|
| + </ebs>
|
| + </item>
|
| + </blockDeviceMapping>
|
| + <virtualizationType>paravirtual</virtualizationType>
|
| + <clientToken>foo</clientToken>
|
| + <tagSet>
|
| + <item>
|
| + <key>Name</key>
|
| + <value/>
|
| + </item>
|
| + </tagSet>
|
| + <hypervisor>xen</hypervisor>
|
| + <networkInterfaceSet>
|
| + <item>
|
| + <networkInterfaceId>eni-id</networkInterfaceId>
|
| + <subnetId>subnet-id</subnetId>
|
| + <vpcId>vpc-id</vpcId>
|
| + <description>Primary network interface</description>
|
| + <ownerId>ownerid</ownerId>
|
| + <status>in-use</status>
|
| + <privateIpAddress>10.0.0.67</privateIpAddress>
|
| + <sourceDestCheck>true</sourceDestCheck>
|
| + <groupSet>
|
| + <item>
|
| + <groupId>sg-id</groupId>
|
| + <groupName>WebServerSG</groupName>
|
| + </item>
|
| + </groupSet>
|
| + <attachment>
|
| + <attachmentId>eni-attach-id</attachmentId>
|
| + <deviceIndex>0</deviceIndex>
|
| + <status>attached</status>
|
| + <attachTime>2012-12-14T23:48:37.000Z</attachTime>
|
| + <deleteOnTermination>true</deleteOnTermination>
|
| + </attachment>
|
| + <privateIpAddressesSet>
|
| + <item>
|
| + <privateIpAddress>10.0.0.67</privateIpAddress>
|
| + <primary>true</primary>
|
| + </item>
|
| + <item>
|
| + <privateIpAddress>10.0.0.54</privateIpAddress>
|
| + <primary>false</primary>
|
| + </item>
|
| + <item>
|
| + <privateIpAddress>10.0.0.55</privateIpAddress>
|
| + <primary>false</primary>
|
| + </item>
|
| + </privateIpAddressesSet>
|
| + </item>
|
| + </networkInterfaceSet>
|
| + <ebsOptimized>false</ebsOptimized>
|
| + </item>
|
| + </instancesSet>
|
| + </item>
|
| + </reservationSet>
|
| +</DescribeInstancesResponse>
|
| +"""
|
| +
|
| +
|
| +class TestDescribeSecurityGroups(AWSMockServiceTestCase):
|
| + connection_class = EC2Connection
|
| +
|
| + def test_get_instances(self):
|
| + self.set_http_response(status_code=200, body=DESCRIBE_SECURITY_GROUP)
|
| + groups = self.service_connection.get_all_security_groups()
|
| +
|
| + self.set_http_response(status_code=200, body=DESCRIBE_INSTANCES)
|
| + instances = groups[0].instances()
|
| +
|
| + self.assertEqual(1, len(instances))
|
| + self.assertEqual(groups[0].id, instances[0].groups[0].id)
|
| +
|
| +
|
| +class SecurityGroupTest(unittest.TestCase):
|
| + def test_add_rule(self):
|
| + sg = SecurityGroup()
|
| + self.assertEqual(len(sg.rules), 0)
|
| +
|
| + # Regression: ``dry_run`` was being passed (but unhandled) before.
|
| + sg.add_rule(
|
| + ip_protocol='http',
|
| + from_port='80',
|
| + to_port='8080',
|
| + src_group_name='groupy',
|
| + src_group_owner_id='12345',
|
| + cidr_ip='10.0.0.1',
|
| + src_group_group_id='54321',
|
| + dry_run=False
|
| + )
|
| + self.assertEqual(len(sg.rules), 1)
|
| +
|
| + def test_remove_rule_on_empty_group(self):
|
| + # Remove a rule from a group with no rules
|
| + sg = SecurityGroup()
|
| +
|
| + with self.assertRaises(ValueError):
|
| + sg.remove_rule('ip', 80, 80, None, None, None, None)
|
|
|