#!/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()