Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2579)

Unified Diff: third_party/gsutil/boto/tests/unit/ec2/test_connection.py

Issue 12317103: Added gsutil to depot tools (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: added readme Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/gsutil/boto/tests/unit/ec2/test_connection.py
diff --git a/third_party/gsutil/boto/tests/unit/ec2/test_connection.py b/third_party/gsutil/boto/tests/unit/ec2/test_connection.py
new file mode 100644
index 0000000000000000000000000000000000000000..5f28510feaa0385342e9fe180b61861273573fc6
--- /dev/null
+++ b/third_party/gsutil/boto/tests/unit/ec2/test_connection.py
@@ -0,0 +1,480 @@
+#!/usr/bin/env python
+from tests.unit import unittest
+from tests.unit import AWSMockServiceTestCase
+
+from boto.ec2.connection import EC2Connection
+
+
+class TestEC2ConnectionBase(AWSMockServiceTestCase):
+ connection_class = EC2Connection
+
+ def setUp(self):
+ super(TestEC2ConnectionBase, self).setUp()
+ self.ec2 = self.service_connection
+
+
+class TestReservedInstanceOfferings(TestEC2ConnectionBase):
+
+ def default_body(self):
+ return """
+ <DescribeReservedInstancesOfferingsResponse>
+ <requestId>d3253568-edcf-4897-9a3d-fb28e0b3fa38</requestId>
+ <reservedInstancesOfferingsSet>
+ <item>
+ <reservedInstancesOfferingId>2964d1bf71d8</reservedInstancesOfferingId>
+ <instanceType>c1.medium</instanceType>
+ <availabilityZone>us-east-1c</availabilityZone>
+ <duration>94608000</duration>
+ <fixedPrice>775.0</fixedPrice>
+ <usagePrice>0.0</usagePrice>
+ <productDescription>product description</productDescription>
+ <instanceTenancy>default</instanceTenancy>
+ <currencyCode>USD</currencyCode>
+ <offeringType>Heavy Utilization</offeringType>
+ <recurringCharges>
+ <item>
+ <frequency>Hourly</frequency>
+ <amount>0.095</amount>
+ </item>
+ </recurringCharges>
+ <marketplace>false</marketplace>
+ <pricingDetailsSet>
+ <item>
+ <price>0.045</price>
+ <count>1</count>
+ </item>
+ </pricingDetailsSet>
+ </item>
+ <item>
+ <reservedInstancesOfferingId>2dce26e46889</reservedInstancesOfferingId>
+ <instanceType>c1.medium</instanceType>
+ <availabilityZone>us-east-1c</availabilityZone>
+ <duration>94608000</duration>
+ <fixedPrice>775.0</fixedPrice>
+ <usagePrice>0.0</usagePrice>
+ <productDescription>Linux/UNIX</productDescription>
+ <instanceTenancy>default</instanceTenancy>
+ <currencyCode>USD</currencyCode>
+ <offeringType>Heavy Utilization</offeringType>
+ <recurringCharges>
+ <item>
+ <frequency>Hourly</frequency>
+ <amount>0.035</amount>
+ </item>
+ </recurringCharges>
+ <marketplace>false</marketplace>
+ <pricingDetailsSet/>
+ </item>
+ </reservedInstancesOfferingsSet>
+ <nextToken>next_token</nextToken>
+ </DescribeReservedInstancesOfferingsResponse>
+ """
+
+ def test_get_reserved_instance_offerings(self):
+ self.set_http_response(status_code=200)
+ response = self.ec2.get_all_reserved_instances_offerings()
+ self.assertEqual(len(response), 2)
+ instance = response[0]
+ self.assertEqual(instance.id, '2964d1bf71d8')
+ self.assertEqual(instance.instance_type, 'c1.medium')
+ self.assertEqual(instance.availability_zone, 'us-east-1c')
+ self.assertEqual(instance.duration, 94608000)
+ self.assertEqual(instance.fixed_price, '775.0')
+ self.assertEqual(instance.usage_price, '0.0')
+ self.assertEqual(instance.description, 'product description')
+ self.assertEqual(instance.instance_tenancy, 'default')
+ self.assertEqual(instance.currency_code, 'USD')
+ self.assertEqual(instance.offering_type, 'Heavy Utilization')
+ self.assertEqual(len(instance.recurring_charges), 1)
+ self.assertEqual(instance.recurring_charges[0].frequency, 'Hourly')
+ self.assertEqual(instance.recurring_charges[0].amount, '0.095')
+ self.assertEqual(len(instance.pricing_details), 1)
+ self.assertEqual(instance.pricing_details[0].price, '0.045')
+ self.assertEqual(instance.pricing_details[0].count, '1')
+
+ def test_get_reserved_instance_offerings_params(self):
+ self.set_http_response(status_code=200)
+ self.ec2.get_all_reserved_instances_offerings(
+ reserved_instances_offering_ids=['id1','id2'],
+ instance_type='t1.micro',
+ availability_zone='us-east-1',
+ product_description='description',
+ instance_tenancy='dedicated',
+ offering_type='offering_type',
+ include_marketplace=False,
+ min_duration=100,
+ max_duration=1000,
+ max_instance_count=1,
+ next_token='next_token',
+ max_results=10
+ )
+ self.assert_request_parameters({
+ 'Action': 'DescribeReservedInstancesOfferings',
+ 'ReservedInstancesOfferingId.1': 'id1',
+ 'ReservedInstancesOfferingId.2': 'id2',
+ 'InstanceType': 't1.micro',
+ 'AvailabilityZone': 'us-east-1',
+ 'ProductDescription': 'description',
+ 'InstanceTenancy': 'dedicated',
+ 'OfferingType': 'offering_type',
+ 'IncludeMarketplace': 'false',
+ 'MinDuration': '100',
+ 'MaxDuration': '1000',
+ 'MaxInstanceCount': '1',
+ 'NextToken': 'next_token',
+ 'MaxResults': '10',},
+ ignore_params_values=['AWSAccessKeyId', 'SignatureMethod',
+ 'SignatureVersion', 'Timestamp', 'Version'])
+
+
+class TestPurchaseReservedInstanceOffering(TestEC2ConnectionBase):
+ def default_body(self):
+ return """<PurchaseReservedInstancesOffering />"""
+
+ def test_serialized_api_args(self):
+ self.set_http_response(status_code=200)
+ response = self.ec2.purchase_reserved_instance_offering(
+ 'offering_id', 1, (100.0, 'USD'))
+ self.assert_request_parameters({
+ 'Action': 'PurchaseReservedInstancesOffering',
+ 'InstanceCount': 1,
+ 'ReservedInstancesOfferingId': 'offering_id',
+ 'LimitPrice.Amount': '100.0',
+ 'LimitPrice.CurrencyCode': 'USD',},
+ ignore_params_values=['AWSAccessKeyId', 'SignatureMethod',
+ 'SignatureVersion', 'Timestamp',
+ 'Version'])
+
+
+class TestCancelReservedInstancesListing(TestEC2ConnectionBase):
+ def default_body(self):
+ return """
+ <CancelReservedInstancesListingResponse>
+ <requestId>request_id</requestId>
+ <reservedInstancesListingsSet>
+ <item>
+ <reservedInstancesListingId>listing_id</reservedInstancesListingId>
+ <reservedInstancesId>instance_id</reservedInstancesId>
+ <createDate>2012-07-12T16:55:28.000Z</createDate>
+ <updateDate>2012-07-12T16:55:28.000Z</updateDate>
+ <status>cancelled</status>
+ <statusMessage>CANCELLED</statusMessage>
+ <instanceCounts>
+ <item>
+ <state>Available</state>
+ <instanceCount>0</instanceCount>
+ </item>
+ <item>
+ <state>Sold</state>
+ <instanceCount>0</instanceCount>
+ </item>
+ <item>
+ <state>Cancelled</state>
+ <instanceCount>1</instanceCount>
+ </item>
+ <item>
+ <state>Pending</state>
+ <instanceCount>0</instanceCount>
+ </item>
+ </instanceCounts>
+ <priceSchedules>
+ <item>
+ <term>5</term>
+ <price>166.64</price>
+ <currencyCode>USD</currencyCode>
+ <active>false</active>
+ </item>
+ <item>
+ <term>4</term>
+ <price>133.32</price>
+ <currencyCode>USD</currencyCode>
+ <active>false</active>
+ </item>
+ <item>
+ <term>3</term>
+ <price>99.99</price>
+ <currencyCode>USD</currencyCode>
+ <active>false</active>
+ </item>
+ <item>
+ <term>2</term>
+ <price>66.66</price>
+ <currencyCode>USD</currencyCode>
+ <active>false</active>
+ </item>
+ <item>
+ <term>1</term>
+ <price>33.33</price>
+ <currencyCode>USD</currencyCode>
+ <active>false</active>
+ </item>
+ </priceSchedules>
+ <tagSet/>
+ <clientToken>XqJIt1342112125076</clientToken>
+ </item>
+ </reservedInstancesListingsSet>
+ </CancelReservedInstancesListingResponse>
+ """
+
+ def test_reserved_instances_listing(self):
+ self.set_http_response(status_code=200)
+ response = self.ec2.cancel_reserved_instances_listing()
+ self.assertEqual(len(response), 1)
+ cancellation = response[0]
+ self.assertEqual(cancellation.status, 'cancelled')
+ self.assertEqual(cancellation.status_message, 'CANCELLED')
+ self.assertEqual(len(cancellation.instance_counts), 4)
+ first = cancellation.instance_counts[0]
+ self.assertEqual(first.state, 'Available')
+ self.assertEqual(first.instance_count, 0)
+ self.assertEqual(len(cancellation.price_schedules), 5)
+ schedule = cancellation.price_schedules[0]
+ self.assertEqual(schedule.term, 5)
+ self.assertEqual(schedule.price, '166.64')
+ self.assertEqual(schedule.currency_code, 'USD')
+ self.assertEqual(schedule.active, False)
+
+
+class TestCreateReservedInstancesListing(TestEC2ConnectionBase):
+ def default_body(self):
+ return """
+ <CreateReservedInstancesListingResponse>
+ <requestId>request_id</requestId>
+ <reservedInstancesListingsSet>
+ <item>
+ <reservedInstancesListingId>listing_id</reservedInstancesListingId>
+ <reservedInstancesId>instance_id</reservedInstancesId>
+ <createDate>2012-07-17T17:11:09.449Z</createDate>
+ <updateDate>2012-07-17T17:11:09.468Z</updateDate>
+ <status>active</status>
+ <statusMessage>ACTIVE</statusMessage>
+ <instanceCounts>
+ <item>
+ <state>Available</state>
+ <instanceCount>1</instanceCount>
+ </item>
+ <item>
+ <state>Sold</state>
+ <instanceCount>0</instanceCount>
+ </item>
+ <item>
+ <state>Cancelled</state>
+ <instanceCount>0</instanceCount>
+ </item>
+ <item>
+ <state>Pending</state>
+ <instanceCount>0</instanceCount>
+ </item>
+ </instanceCounts>
+ <priceSchedules>
+ <item>
+ <term>11</term>
+ <price>2.5</price>
+ <currencyCode>USD</currencyCode>
+ <active>true</active>
+ </item>
+ <item>
+ <term>10</term>
+ <price>2.5</price>
+ <currencyCode>USD</currencyCode>
+ <active>false</active>
+ </item>
+ <item>
+ <term>9</term>
+ <price>2.5</price>
+ <currencyCode>USD</currencyCode>
+ <active>false</active>
+ </item>
+ <item>
+ <term>8</term>
+ <price>2.0</price>
+ <currencyCode>USD</currencyCode>
+ <active>false</active>
+ </item>
+ <item>
+ <term>7</term>
+ <price>2.0</price>
+ <currencyCode>USD</currencyCode>
+ <active>false</active>
+ </item>
+ <item>
+ <term>6</term>
+ <price>2.0</price>
+ <currencyCode>USD</currencyCode>
+ <active>false</active>
+ </item>
+ <item>
+ <term>5</term>
+ <price>1.5</price>
+ <currencyCode>USD</currencyCode>
+ <active>false</active>
+ </item>
+ <item>
+ <term>4</term>
+ <price>1.5</price>
+ <currencyCode>USD</currencyCode>
+ <active>false</active>
+ </item>
+ <item>
+ <term>3</term>
+ <price>0.7</price>
+ <currencyCode>USD</currencyCode>
+ <active>false</active>
+ </item>
+ <item>
+ <term>2</term>
+ <price>0.7</price>
+ <currencyCode>USD</currencyCode>
+ <active>false</active>
+ </item>
+ <item>
+ <term>1</term>
+ <price>0.1</price>
+ <currencyCode>USD</currencyCode>
+ <active>false</active>
+ </item>
+ </priceSchedules>
+ <tagSet/>
+ <clientToken>myIdempToken1</clientToken>
+ </item>
+ </reservedInstancesListingsSet>
+ </CreateReservedInstancesListingResponse>
+ """
+
+ def test_create_reserved_instances_listing(self):
+ self.set_http_response(status_code=200)
+ response = self.ec2.create_reserved_instances_listing(
+ 'instance_id', 1, [('2.5', 11), ('2.0', 8)], 'client_token')
+ self.assertEqual(len(response), 1)
+ cancellation = response[0]
+ self.assertEqual(cancellation.status, 'active')
+ self.assertEqual(cancellation.status_message, 'ACTIVE')
+ self.assertEqual(len(cancellation.instance_counts), 4)
+ first = cancellation.instance_counts[0]
+ self.assertEqual(first.state, 'Available')
+ self.assertEqual(first.instance_count, 1)
+ self.assertEqual(len(cancellation.price_schedules), 11)
+ schedule = cancellation.price_schedules[0]
+ self.assertEqual(schedule.term, 11)
+ self.assertEqual(schedule.price, '2.5')
+ self.assertEqual(schedule.currency_code, 'USD')
+ self.assertEqual(schedule.active, True)
+
+ self.assert_request_parameters({
+ 'Action': 'CreateReservedInstancesListing',
+ 'ReservedInstancesId': 'instance_id',
+ 'InstanceCount': '1',
+ 'ClientToken': 'client_token',
+ 'PriceSchedules.0.Price': '2.5',
+ 'PriceSchedules.0.Term': '11',
+ 'PriceSchedules.1.Price': '2.0',
+ 'PriceSchedules.1.Term': '8',},
+ ignore_params_values=['AWSAccessKeyId', 'SignatureMethod',
+ 'SignatureVersion', 'Timestamp',
+ 'Version'])
+
+
+class TestDescribeSpotInstanceRequests(TestEC2ConnectionBase):
+ def default_body(self):
+ return """
+ <DescribeSpotInstanceRequestsResponse>
+ <requestId>requestid</requestId>
+ <spotInstanceRequestSet>
+ <item>
+ <spotInstanceRequestId>sir-id</spotInstanceRequestId>
+ <spotPrice>0.003000</spotPrice>
+ <type>one-time</type>
+ <state>active</state>
+ <status>
+ <code>fulfilled</code>
+ <updateTime>2012-10-19T18:09:26.000Z</updateTime>
+ <message>Your Spot request is fulfilled.</message>
+ </status>
+ <launchGroup>mylaunchgroup</launchGroup>
+ <launchSpecification>
+ <imageId>ami-id</imageId>
+ <keyName>mykeypair</keyName>
+ <groupSet>
+ <item>
+ <groupId>sg-id</groupId>
+ <groupName>groupname</groupName>
+ </item>
+ </groupSet>
+ <instanceType>t1.micro</instanceType>
+ <monitoring>
+ <enabled>false</enabled>
+ </monitoring>
+ </launchSpecification>
+ <instanceId>i-id</instanceId>
+ <createTime>2012-10-19T18:07:05.000Z</createTime>
+ <productDescription>Linux/UNIX</productDescription>
+ <launchedAvailabilityZone>us-east-1d</launchedAvailabilityZone>
+ </item>
+ </spotInstanceRequestSet>
+ </DescribeSpotInstanceRequestsResponse>
+ """
+
+ def test_describe_spot_instance_requets(self):
+ self.set_http_response(status_code=200)
+ response = self.ec2.get_all_spot_instance_requests()
+ self.assertEqual(len(response), 1)
+ spotrequest = response[0]
+ self.assertEqual(spotrequest.id, 'sir-id')
+ self.assertEqual(spotrequest.price, 0.003)
+ self.assertEqual(spotrequest.type, 'one-time')
+ self.assertEqual(spotrequest.state, 'active')
+ self.assertEqual(spotrequest.fault, None)
+ self.assertEqual(spotrequest.valid_from, None)
+ self.assertEqual(spotrequest.valid_until, None)
+ self.assertEqual(spotrequest.launch_group, 'mylaunchgroup')
+ self.assertEqual(spotrequest.launched_availability_zone, 'us-east-1d')
+ self.assertEqual(spotrequest.product_description, 'Linux/UNIX')
+ self.assertEqual(spotrequest.availability_zone_group, None)
+ self.assertEqual(spotrequest.create_time,
+ '2012-10-19T18:07:05.000Z')
+ self.assertEqual(spotrequest.instance_id, 'i-id')
+ launch_spec = spotrequest.launch_specification
+ self.assertEqual(launch_spec.key_name, 'mykeypair')
+ self.assertEqual(launch_spec.instance_type, 't1.micro')
+ self.assertEqual(launch_spec.image_id, 'ami-id')
+ self.assertEqual(launch_spec.placement, None)
+ self.assertEqual(launch_spec.kernel, None)
+ self.assertEqual(launch_spec.ramdisk, None)
+ self.assertEqual(launch_spec.monitored, False)
+ self.assertEqual(launch_spec.subnet_id, None)
+ self.assertEqual(launch_spec.block_device_mapping, None)
+ self.assertEqual(launch_spec.instance_profile, None)
+ self.assertEqual(launch_spec.ebs_optimized, False)
+ status = spotrequest.status
+ self.assertEqual(status.code, 'fulfilled')
+ self.assertEqual(status.update_time, '2012-10-19T18:09:26.000Z')
+ self.assertEqual(status.message, 'Your Spot request is fulfilled.')
+
+
+class TestCopySnapshot(TestEC2ConnectionBase):
+ def default_body(self):
+ return """
+ <CopySnapshotResponse xmlns="http://ec2.amazonaws.com/doc/2012-12-01/">
+ <requestId>request_id</requestId>
+ <snapshotId>snap-copied-id</snapshotId>
+ </CopySnapshotResponse>
+ """
+
+ def test_copy_snapshot(self):
+ self.set_http_response(status_code=200)
+ snapshot_id = self.ec2.copy_snapshot('us-west-2', 'snap-id',
+ 'description')
+ self.assertEqual(snapshot_id, 'snap-copied-id')
+
+ self.assert_request_parameters({
+ 'Action': 'CopySnapshot',
+ 'Description': 'description',
+ 'SourceRegion': 'us-west-2',
+ 'SourceSnapshotId': 'snap-id'},
+ ignore_params_values=['AWSAccessKeyId', 'SignatureMethod',
+ 'SignatureVersion', 'Timestamp',
+ 'Version'])
+
+
+if __name__ == '__main__':
+ unittest.main()

Powered by Google App Engine
This is Rietveld 408576698