blob: c3c9d8a67282483ca4c145ede59fc32c350a3738 [file] [log] [blame]
from tests.unit import unittest
from tests.unit import AWSMockServiceTestCase
from boto.rds import RDSConnection
from boto.rds.dbsnapshot import DBSnapshot
from boto.rds import DBInstance
class TestDescribeDBSnapshots(AWSMockServiceTestCase):
connection_class = RDSConnection
def default_body(self):
return """
<DescribeDBSnapshotsResponse xmlns="http://rds.amazonaws.com/doc/2013-05-15/">
<DescribeDBSnapshotsResult>
<DBSnapshots>
<DBSnapshot>
<Port>3306</Port>
<SnapshotCreateTime>2011-05-23T06:29:03.483Z</SnapshotCreateTime>
<Engine>mysql</Engine>
<Status>available</Status>
<AvailabilityZone>us-east-1a</AvailabilityZone>
<LicenseModel>general-public-license</LicenseModel>
<InstanceCreateTime>2011-05-23T06:06:43.110Z</InstanceCreateTime>
<AllocatedStorage>10</AllocatedStorage>
<DBInstanceIdentifier>simcoprod01</DBInstanceIdentifier>
<EngineVersion>5.1.50</EngineVersion>
<DBSnapshotIdentifier>mydbsnapshot</DBSnapshotIdentifier>
<SnapshotType>manual</SnapshotType>
<MasterUsername>master</MasterUsername>
<OptionGroupName>myoptiongroupname</OptionGroupName>
<Iops>1000</Iops>
<PercentProgress>100</PercentProgress>
<SourceRegion>eu-west-1</SourceRegion>
<VpcId>myvpc</VpcId>
</DBSnapshot>
<DBSnapshot>
<Port>3306</Port>
<SnapshotCreateTime>2011-03-11T07:20:24.082Z</SnapshotCreateTime>
<Engine>mysql</Engine>
<Status>available</Status>
<AvailabilityZone>us-east-1a</AvailabilityZone>
<LicenseModel>general-public-license</LicenseModel>
<InstanceCreateTime>2010-08-04T23:27:36.420Z</InstanceCreateTime>
<AllocatedStorage>50</AllocatedStorage>
<DBInstanceIdentifier>mydbinstance</DBInstanceIdentifier>
<EngineVersion>5.1.49</EngineVersion>
<DBSnapshotIdentifier>mysnapshot1</DBSnapshotIdentifier>
<SnapshotType>manual</SnapshotType>
<MasterUsername>sa</MasterUsername>
<OptionGroupName>myoptiongroupname</OptionGroupName>
<Iops>1000</Iops>
</DBSnapshot>
<DBSnapshot>
<Port>3306</Port>
<SnapshotCreateTime>2012-04-02T00:01:24.082Z</SnapshotCreateTime>
<Engine>mysql</Engine>
<Status>available</Status>
<AvailabilityZone>us-east-1d</AvailabilityZone>
<LicenseModel>general-public-license</LicenseModel>
<InstanceCreateTime>2010-07-16T00:06:59.107Z</InstanceCreateTime>
<AllocatedStorage>60</AllocatedStorage>
<DBInstanceIdentifier>simcoprod01</DBInstanceIdentifier>
<EngineVersion>5.1.47</EngineVersion>
<DBSnapshotIdentifier>rds:simcoprod01-2012-04-02-00-01</DBSnapshotIdentifier>
<SnapshotType>automated</SnapshotType>
<MasterUsername>master</MasterUsername>
<OptionGroupName>myoptiongroupname</OptionGroupName>
<Iops>1000</Iops>
</DBSnapshot>
</DBSnapshots>
</DescribeDBSnapshotsResult>
<ResponseMetadata>
<RequestId>c4191173-8506-11e0-90aa-eb648410240d</RequestId>
</ResponseMetadata>
</DescribeDBSnapshotsResponse>
"""
def test_describe_dbinstances_by_instance(self):
self.set_http_response(status_code=200)
response = self.service_connection.get_all_dbsnapshots(instance_id='simcoprod01')
self.assert_request_parameters({
'Action': 'DescribeDBSnapshots',
'DBInstanceIdentifier': 'simcoprod01'
}, ignore_params_values=['Version'])
self.assertEqual(len(response), 3)
self.assertIsInstance(response[0], DBSnapshot)
self.assertEqual(response[0].id, 'mydbsnapshot')
self.assertEqual(response[0].status, 'available')
self.assertEqual(response[0].instance_id, 'simcoprod01')
self.assertEqual(response[0].engine_version, '5.1.50')
self.assertEqual(response[0].license_model, 'general-public-license')
self.assertEqual(response[0].iops, 1000)
self.assertEqual(response[0].option_group_name, 'myoptiongroupname')
self.assertEqual(response[0].percent_progress, 100)
self.assertEqual(response[0].snapshot_type, 'manual')
self.assertEqual(response[0].source_region, 'eu-west-1')
self.assertEqual(response[0].vpc_id, 'myvpc')
class TestCreateDBSnapshot(AWSMockServiceTestCase):
connection_class = RDSConnection
def default_body(self):
return """
<CreateDBSnapshotResponse xmlns="http://rds.amazonaws.com/doc/2013-05-15/">
<CreateDBSnapshotResult>
<DBSnapshot>
<Port>3306</Port>
<Engine>mysql</Engine>
<Status>creating</Status>
<AvailabilityZone>us-east-1a</AvailabilityZone>
<LicenseModel>general-public-license</LicenseModel>
<InstanceCreateTime>2011-05-23T06:06:43.110Z</InstanceCreateTime>
<AllocatedStorage>10</AllocatedStorage>
<DBInstanceIdentifier>simcoprod01</DBInstanceIdentifier>
<EngineVersion>5.1.50</EngineVersion>
<DBSnapshotIdentifier>mydbsnapshot</DBSnapshotIdentifier>
<SnapshotType>manual</SnapshotType>
<MasterUsername>master</MasterUsername>
</DBSnapshot>
</CreateDBSnapshotResult>
<ResponseMetadata>
<RequestId>c4181d1d-8505-11e0-90aa-eb648410240d</RequestId>
</ResponseMetadata>
</CreateDBSnapshotResponse>
"""
def test_create_dbinstance(self):
self.set_http_response(status_code=200)
response = self.service_connection.create_dbsnapshot('mydbsnapshot', 'simcoprod01')
self.assert_request_parameters({
'Action': 'CreateDBSnapshot',
'DBSnapshotIdentifier': 'mydbsnapshot',
'DBInstanceIdentifier': 'simcoprod01'
}, ignore_params_values=['Version'])
self.assertIsInstance(response, DBSnapshot)
self.assertEqual(response.id, 'mydbsnapshot')
self.assertEqual(response.instance_id, 'simcoprod01')
self.assertEqual(response.status, 'creating')
class TestCopyDBSnapshot(AWSMockServiceTestCase):
connection_class = RDSConnection
def default_body(self):
return """
<CopyDBSnapshotResponse xmlns="http://rds.amazonaws.com/doc/2013-05-15/">
<CopyDBSnapshotResult>
<DBSnapshot>
<Port>3306</Port>
<Engine>mysql</Engine>
<Status>available</Status>
<AvailabilityZone>us-east-1a</AvailabilityZone>
<LicenseModel>general-public-license</LicenseModel>
<InstanceCreateTime>2011-05-23T06:06:43.110Z</InstanceCreateTime>
<AllocatedStorage>10</AllocatedStorage>
<DBInstanceIdentifier>simcoprod01</DBInstanceIdentifier>
<EngineVersion>5.1.50</EngineVersion>
<DBSnapshotIdentifier>mycopieddbsnapshot</DBSnapshotIdentifier>
<SnapshotType>manual</SnapshotType>
<MasterUsername>master</MasterUsername>
</DBSnapshot>
</CopyDBSnapshotResult>
<ResponseMetadata>
<RequestId>c4181d1d-8505-11e0-90aa-eb648410240d</RequestId>
</ResponseMetadata>
</CopyDBSnapshotResponse>
"""
def test_copy_dbinstance(self):
self.set_http_response(status_code=200)
response = self.service_connection.copy_dbsnapshot('myautomaticdbsnapshot', 'mycopieddbsnapshot')
self.assert_request_parameters({
'Action': 'CopyDBSnapshot',
'SourceDBSnapshotIdentifier': 'myautomaticdbsnapshot',
'TargetDBSnapshotIdentifier': 'mycopieddbsnapshot'
}, ignore_params_values=['Version'])
self.assertIsInstance(response, DBSnapshot)
self.assertEqual(response.id, 'mycopieddbsnapshot')
self.assertEqual(response.status, 'available')
class TestDeleteDBSnapshot(AWSMockServiceTestCase):
connection_class = RDSConnection
def default_body(self):
return """
<DeleteDBSnapshotResponse xmlns="http://rds.amazonaws.com/doc/2013-05-15/">
<DeleteDBSnapshotResult>
<DBSnapshot>
<Port>3306</Port>
<SnapshotCreateTime>2011-03-11T07:20:24.082Z</SnapshotCreateTime>
<Engine>mysql</Engine>
<Status>deleted</Status>
<AvailabilityZone>us-east-1d</AvailabilityZone>
<LicenseModel>general-public-license</LicenseModel>
<InstanceCreateTime>2010-07-16T00:06:59.107Z</InstanceCreateTime>
<AllocatedStorage>60</AllocatedStorage>
<DBInstanceIdentifier>simcoprod01</DBInstanceIdentifier>
<EngineVersion>5.1.47</EngineVersion>
<DBSnapshotIdentifier>mysnapshot2</DBSnapshotIdentifier>
<SnapshotType>manual</SnapshotType>
<MasterUsername>master</MasterUsername>
</DBSnapshot>
</DeleteDBSnapshotResult>
<ResponseMetadata>
<RequestId>627a43a1-8507-11e0-bd9b-a7b1ece36d51</RequestId>
</ResponseMetadata>
</DeleteDBSnapshotResponse>
"""
def test_delete_dbinstance(self):
self.set_http_response(status_code=200)
response = self.service_connection.delete_dbsnapshot('mysnapshot2')
self.assert_request_parameters({
'Action': 'DeleteDBSnapshot',
'DBSnapshotIdentifier': 'mysnapshot2'
}, ignore_params_values=['Version'])
self.assertIsInstance(response, DBSnapshot)
self.assertEqual(response.id, 'mysnapshot2')
self.assertEqual(response.status, 'deleted')
class TestRestoreDBInstanceFromDBSnapshot(AWSMockServiceTestCase):
connection_class = RDSConnection
def default_body(self):
return """
<RestoreDBInstanceFromDBSnapshotResponse xmlns="http://rds.amazonaws.com/doc/2013-05-15/">
<RestoreDBInstanceFromDBSnapshotResult>
<DBInstance>
<ReadReplicaDBInstanceIdentifiers/>
<Engine>mysql</Engine>
<PendingModifiedValues/>
<BackupRetentionPeriod>1</BackupRetentionPeriod>
<MultiAZ>false</MultiAZ>
<LicenseModel>general-public-license</LicenseModel>
<DBInstanceStatus>creating</DBInstanceStatus>
<EngineVersion>5.1.50</EngineVersion>
<DBInstanceIdentifier>myrestoreddbinstance</DBInstanceIdentifier>
<DBParameterGroups>
<DBParameterGroup>
<ParameterApplyStatus>in-sync</ParameterApplyStatus>
<DBParameterGroupName>default.mysql5.1</DBParameterGroupName>
</DBParameterGroup>
</DBParameterGroups>
<DBSecurityGroups>
<DBSecurityGroup>
<Status>active</Status>
<DBSecurityGroupName>default</DBSecurityGroupName>
</DBSecurityGroup>
</DBSecurityGroups>
<PreferredBackupWindow>00:00-00:30</PreferredBackupWindow>
<AutoMinorVersionUpgrade>true</AutoMinorVersionUpgrade>
<PreferredMaintenanceWindow>sat:07:30-sat:08:00</PreferredMaintenanceWindow>
<AllocatedStorage>10</AllocatedStorage>
<DBInstanceClass>db.m1.large</DBInstanceClass>
<MasterUsername>master</MasterUsername>
</DBInstance>
</RestoreDBInstanceFromDBSnapshotResult>
<ResponseMetadata>
<RequestId>7ca622e8-8508-11e0-bd9b-a7b1ece36d51</RequestId>
</ResponseMetadata>
</RestoreDBInstanceFromDBSnapshotResponse>
"""
def test_restore_dbinstance_from_dbsnapshot(self):
self.set_http_response(status_code=200)
response = self.service_connection.restore_dbinstance_from_dbsnapshot('mydbsnapshot',
'myrestoreddbinstance',
'db.m1.large',
'3306',
'us-east-1a',
'false',
'true')
self.assert_request_parameters({
'Action': 'RestoreDBInstanceFromDBSnapshot',
'DBSnapshotIdentifier': 'mydbsnapshot',
'DBInstanceIdentifier': 'myrestoreddbinstance',
'DBInstanceClass': 'db.m1.large',
'Port': '3306',
'AvailabilityZone': 'us-east-1a',
'MultiAZ': 'false',
'AutoMinorVersionUpgrade': 'true'
}, ignore_params_values=['Version'])
self.assertIsInstance(response, DBInstance)
self.assertEqual(response.id, 'myrestoreddbinstance')
self.assertEqual(response.status, 'creating')
self.assertEqual(response.instance_class, 'db.m1.large')
self.assertEqual(response.multi_az, False)
if __name__ == '__main__':
unittest.main()