blob: 8550294559ade16132332d130cb5de8eae7940c2 [file] [log] [blame]
#!/usr/bin/env python
# Copyright (c) 2012 Amazon.com, Inc. or its affiliates. All Rights Reserved
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish, dis-
# tribute, sublicense, and/or sell copies of the Software, and to permit
# persons to whom the Software is furnished to do so, subject to the fol-
# lowing conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
#
from tests.unit import unittest
from tests.unit import AWSMockServiceTestCase
from boto.ec2.securitygroup import SecurityGroup
from boto.rds2.layer1 import RDSConnection
class TestRDS2Connection(AWSMockServiceTestCase):
connection_class = RDSConnection
def setUp(self):
super(TestRDS2Connection, self).setUp()
def default_body(self):
return """{
"DescribeDBInstancesResponse": {
"DescribeDBInstancesResult": {
"DBInstances": [{
"DBInstance": {
"Iops": 2000,
"BackupRetentionPeriod": 1,
"MultiAZ": false,
"DBInstanceStatus": "backing-up",
"DBInstanceIdentifier": "mydbinstance2",
"PreferredBackupWindow": "10:30-11:00",
"PreferredMaintenanceWindow": "wed:06:30-wed:07:00",
"OptionGroupMembership": {
"OptionGroupName": "default:mysql-5-5",
"Status": "in-sync"
},
"AvailabilityZone": "us-west-2b",
"ReadReplicaDBInstanceIdentifiers": null,
"Engine": "mysql",
"PendingModifiedValues": null,
"LicenseModel": "general-public-license",
"DBParameterGroups": [{
"DBParameterGroup": {
"ParameterApplyStatus": "in-sync",
"DBParameterGroupName": "default.mysql5.5"
}
}],
"Endpoint": {
"Port": 3306,
"Address": "mydbinstance2.c0hjqouvn9mf.us-west-2.rds.amazonaws.com"
},
"EngineVersion": "5.5.27",
"DBSecurityGroups": [{
"DBSecurityGroup": {
"Status": "active",
"DBSecurityGroupName": "default"
}
}],
"VpcSecurityGroups": [{
"VpcSecurityGroupMembership": {
"VpcSecurityGroupId": "sg-1",
"Status": "active"
}
}],
"DBName": "mydb2",
"AutoMinorVersionUpgrade": true,
"InstanceCreateTime": "2012-10-03T22:01:51.047Z",
"AllocatedStorage": 200,
"DBInstanceClass": "db.m1.large",
"MasterUsername": "awsuser",
"StatusInfos": [{
"DBInstanceStatusInfo": {
"Message": null,
"Normal": true,
"Status": "replicating",
"StatusType": "read replication"
}
}],
"DBSubnetGroup": {
"VpcId": "990524496922",
"SubnetGroupStatus": "Complete",
"DBSubnetGroupDescription": "My modified DBSubnetGroup",
"DBSubnetGroupName": "mydbsubnetgroup",
"Subnets": [{
"Subnet": {
"SubnetStatus": "Active",
"SubnetIdentifier": "subnet-7c5b4115",
"SubnetAvailabilityZone": {
"Name": "us-east-1c"
}
},
"Subnet": {
"SubnetStatus": "Active",
"SubnetIdentifier": "subnet-7b5b4112",
"SubnetAvailabilityZone": {
"Name": "us-east-1b"
}
},
"Subnet": {
"SubnetStatus": "Active",
"SubnetIdentifier": "subnet-3ea6bd57",
"SubnetAvailabilityZone": {
"Name": "us-east-1d"
}
}
}]
}
}
}]
}
}
}"""
def test_describe_db_instances(self):
self.set_http_response(status_code=200)
response = self.service_connection.describe_db_instances('instance_id')
self.assertEqual(len(response), 1)
self.assert_request_parameters({
'Action': 'DescribeDBInstances',
'ContentType': 'JSON',
'DBInstanceIdentifier': 'instance_id',
}, ignore_params_values=['Version'])
db = response['DescribeDBInstancesResponse']\
['DescribeDBInstancesResult']['DBInstances'][0]\
['DBInstance']
self.assertEqual(db['DBInstanceIdentifier'], 'mydbinstance2')
self.assertEqual(db['InstanceCreateTime'], '2012-10-03T22:01:51.047Z')
self.assertEqual(db['Engine'], 'mysql')
self.assertEqual(db['DBInstanceStatus'], 'backing-up')
self.assertEqual(db['AllocatedStorage'], 200)
self.assertEqual(db['Endpoint']['Port'], 3306)
self.assertEqual(db['DBInstanceClass'], 'db.m1.large')
self.assertEqual(db['MasterUsername'], 'awsuser')
self.assertEqual(db['AvailabilityZone'], 'us-west-2b')
self.assertEqual(db['BackupRetentionPeriod'], 1)
self.assertEqual(db['PreferredBackupWindow'], '10:30-11:00')
self.assertEqual(db['PreferredMaintenanceWindow'],
'wed:06:30-wed:07:00')
self.assertEqual(db['MultiAZ'], False)
self.assertEqual(db['Iops'], 2000)
self.assertEqual(db['PendingModifiedValues'], None)
self.assertEqual(
db['DBParameterGroups'][0]['DBParameterGroup']\
['DBParameterGroupName'],
'default.mysql5.5'
)
self.assertEqual(
db['DBSecurityGroups'][0]['DBSecurityGroup']['DBSecurityGroupName'],
'default'
)
self.assertEqual(
db['DBSecurityGroups'][0]['DBSecurityGroup']['Status'],
'active'
)
self.assertEqual(len(db['StatusInfos']), 1)
self.assertEqual(
db['StatusInfos'][0]['DBInstanceStatusInfo']['Message'],
None
)
self.assertEqual(
db['StatusInfos'][0]['DBInstanceStatusInfo']['Normal'],
True
)
self.assertEqual(
db['StatusInfos'][0]['DBInstanceStatusInfo']['Status'],
'replicating'
)
self.assertEqual(
db['StatusInfos'][0]['DBInstanceStatusInfo']['StatusType'],
'read replication'
)
self.assertEqual(
db['VpcSecurityGroups'][0]['VpcSecurityGroupMembership']['Status'],
'active'
)
self.assertEqual(
db['VpcSecurityGroups'][0]['VpcSecurityGroupMembership']\
['VpcSecurityGroupId'],
'sg-1'
)
self.assertEqual(db['LicenseModel'], 'general-public-license')
self.assertEqual(db['EngineVersion'], '5.5.27')
self.assertEqual(db['AutoMinorVersionUpgrade'], True)
self.assertEqual(
db['DBSubnetGroup']['DBSubnetGroupName'],
'mydbsubnetgroup'
)
if __name__ == '__main__':
unittest.main()