| Index: third_party/boto/tests/unit/rds/test_connection.py
|
| ===================================================================
|
| --- third_party/boto/tests/unit/rds/test_connection.py (revision 33376)
|
| +++ third_party/boto/tests/unit/rds/test_connection.py (working copy)
|
| @@ -28,7 +28,9 @@
|
| from boto.rds import RDSConnection
|
| from boto.rds.vpcsecuritygroupmembership import VPCSecurityGroupMembership
|
| from boto.rds.parametergroup import ParameterGroup
|
| +from boto.rds.logfile import LogFile, LogFileObject
|
|
|
| +import xml.sax.saxutils as saxutils
|
|
|
| class TestRDSConnection(AWSMockServiceTestCase):
|
| connection_class = RDSConnection
|
| @@ -550,7 +552,188 @@
|
| self.assertEqual(options.engine_name, 'oracle-se1')
|
| self.assertEqual(options.major_engine_version, '11.2')
|
|
|
| +class TestRDSLogFile(AWSMockServiceTestCase):
|
| + connection_class = RDSConnection
|
|
|
| + def setUp(self):
|
| + super(TestRDSLogFile, self).setUp()
|
| +
|
| + def default_body(self):
|
| + return """
|
| + <DescribeDBLogFilesResponse xmlns="http://rds.amazonaws.com/doc/2013-02-12/">
|
| + <DescribeDBLogFilesResult>
|
| + <DescribeDBLogFiles>
|
| + <DescribeDBLogFilesDetails>
|
| + <LastWritten>1364403600000</LastWritten>
|
| + <LogFileName>error/mysql-error-running.log</LogFileName>
|
| + <Size>0</Size>
|
| + </DescribeDBLogFilesDetails>
|
| + <DescribeDBLogFilesDetails>
|
| + <LastWritten>1364338800000</LastWritten>
|
| + <LogFileName>error/mysql-error-running.log.0</LogFileName>
|
| + <Size>0</Size>
|
| + </DescribeDBLogFilesDetails>
|
| + <DescribeDBLogFilesDetails>
|
| + <LastWritten>1364342400000</LastWritten>
|
| + <LogFileName>error/mysql-error-running.log.1</LogFileName>
|
| + <Size>0</Size>
|
| + </DescribeDBLogFilesDetails>
|
| + <DescribeDBLogFilesDetails>
|
| + <LastWritten>1364346000000</LastWritten>
|
| + <LogFileName>error/mysql-error-running.log.2</LogFileName>
|
| + <Size>0</Size>
|
| + </DescribeDBLogFilesDetails>
|
| + <DescribeDBLogFilesDetails>
|
| + <LastWritten>1364349600000</LastWritten>
|
| + <LogFileName>error/mysql-error-running.log.3</LogFileName>
|
| + <Size>0</Size>
|
| + </DescribeDBLogFilesDetails>
|
| + <DescribeDBLogFilesDetails>
|
| + <LastWritten>1364405700000</LastWritten>
|
| + <LogFileName>error/mysql-error.log</LogFileName>
|
| + <Size>0</Size>
|
| + </DescribeDBLogFilesDetails>
|
| + </DescribeDBLogFiles>
|
| + </DescribeDBLogFilesResult>
|
| + <ResponseMetadata>
|
| + <RequestId>d70fb3b3-9704-11e2-a0db-871552e0ef19</RequestId>
|
| + </ResponseMetadata>
|
| + </DescribeDBLogFilesResponse>
|
| + """
|
| +
|
| + def test_get_all_logs_simple(self):
|
| + self.set_http_response(status_code=200)
|
| + response = self.service_connection.get_all_logs('db1')
|
| +
|
| + self.assert_request_parameters({
|
| + 'Action': 'DescribeDBLogFiles',
|
| + 'DBInstanceIdentifier': 'db1',
|
| + }, ignore_params_values=['Version'])
|
| +
|
| + self.assertEqual(len(response), 6)
|
| + self.assertTrue(isinstance(response[0], LogFile))
|
| + self.assertEqual(response[0].log_filename, 'error/mysql-error-running.log')
|
| + self.assertEqual(response[0].last_written, '1364403600000')
|
| + self.assertEqual(response[0].size, '0')
|
| +
|
| + def test_get_all_logs_filtered(self):
|
| + self.set_http_response(status_code=200)
|
| + response = self.service_connection.get_all_logs('db_instance_1', max_records=100, marker='error/mysql-error.log', file_size=2000000, filename_contains='error', file_last_written=12345678)
|
| +
|
| + self.assert_request_parameters({
|
| + 'Action': 'DescribeDBLogFiles',
|
| + 'DBInstanceIdentifier': 'db_instance_1',
|
| + 'MaxRecords': 100,
|
| + 'Marker': 'error/mysql-error.log',
|
| + 'FileSize': 2000000,
|
| + 'FilenameContains': 'error',
|
| + 'FileLastWritten': 12345678,
|
| + }, ignore_params_values=['Version'])
|
| +
|
| + self.assertEqual(len(response), 6)
|
| + self.assertTrue(isinstance(response[0], LogFile))
|
| + self.assertEqual(response[0].log_filename, 'error/mysql-error-running.log')
|
| + self.assertEqual(response[0].last_written, '1364403600000')
|
| + self.assertEqual(response[0].size, '0')
|
| +
|
| +
|
| +class TestRDSLogFileDownload(AWSMockServiceTestCase):
|
| + connection_class = RDSConnection
|
| + logfile_sample = """
|
| +??2014-01-26 23:59:00.01 spid54 Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
|
| +
|
| + Feb 10 2012 19:39:15
|
| +
|
| + Copyright (c) Microsoft Corporation
|
| +
|
| + Web Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
|
| +
|
| +
|
| +
|
| +2014-01-26 23:59:00.01 spid54 (c) Microsoft Corporation.
|
| +
|
| +2014-01-26 23:59:00.01 spid54 All rights reserved.
|
| +
|
| +2014-01-26 23:59:00.01 spid54 Server process ID is 2976.
|
| +
|
| +2014-01-26 23:59:00.01 spid54 System Manufacturer: 'Xen', System Model: 'HVM domU'.
|
| +
|
| +2014-01-26 23:59:00.01 spid54 Authentication mode is MIXED.
|
| +
|
| +2014-01-26 23:59:00.01 spid54 Logging SQL Server messages in file 'D:\RDSDBDATA\Log\ERROR'.
|
| +
|
| +2014-01-26 23:59:00.01 spid54 The service account is 'WORKGROUP\AMAZONA-NUQUUMV$'. This is an informational message; no user action is required.
|
| +
|
| +2014-01-26 23:59:00.01 spid54 The error log has been reinitialized. See the previous log for older entries.
|
| +
|
| +2014-01-27 00:00:56.42 spid25s This instance of SQL Server has been using a process ID of 2976 since 10/21/2013 2:16:50 AM (local) 10/21/2013 2:16:50 AM (UTC). This is an informational message only; no user action is required.
|
| +
|
| +2014-01-27 09:35:15.43 spid71 I/O is frozen on database model. No user action is required. However, if I/O is not resumed promptly, you could cancel the backup.
|
| +
|
| +2014-01-27 09:35:15.44 spid72 I/O is frozen on database msdb. No user action is required. However, if I/O is not resumed promptly, you could cancel the backup.
|
| +
|
| +2014-01-27 09:35:15.44 spid74 I/O is frozen on database rdsadmin. No user action is required. However, if I/O is not resumed promptly, you could cancel the backup.
|
| +
|
| +2014-01-27 09:35:15.44 spid73 I/O is frozen on database master. No user action is required. However, if I/O is not resumed promptly, you could cancel the backup.
|
| +
|
| +2014-01-27 09:35:25.57 spid73 I/O was resumed on database master. No user action is required.
|
| +
|
| +2014-01-27 09:35:25.57 spid74 I/O was resumed on database rdsadmin. No user action is required.
|
| +
|
| +2014-01-27 09:35:25.57 spid71 I/O was resumed on database model. No user action is required.
|
| +
|
| +2014-01-27 09:35:25.57 spid72 I/O was resumed on database msdb. No user action is required.
|
| + """
|
| +
|
| + def setUp(self):
|
| + super(TestRDSLogFileDownload, self).setUp()
|
| +
|
| + def default_body(self):
|
| + return """
|
| +<DownloadDBLogFilePortionResponse xmlns="http://rds.amazonaws.com/doc/2013-09-09/">
|
| + <DownloadDBLogFilePortionResult>
|
| + <Marker>0:4485</Marker>
|
| + <LogFileData>%s</LogFileData>
|
| + <AdditionalDataPending>false</AdditionalDataPending>
|
| + </DownloadDBLogFilePortionResult>
|
| + <ResponseMetadata>
|
| + <RequestId>27143615-87ae-11e3-acc9-fb64b157268e</RequestId>
|
| + </ResponseMetadata>
|
| +</DownloadDBLogFilePortionResponse>
|
| + """ % self.logfile_sample
|
| +
|
| + def test_single_download(self):
|
| + self.set_http_response(status_code=200)
|
| + response = self.service_connection.get_log_file('db1', 'foo.log')
|
| +
|
| + self.assertTrue(isinstance(response, LogFileObject))
|
| + self.assertEqual(response.marker, '0:4485')
|
| + self.assertEqual(response.dbinstance_id, 'db1')
|
| + self.assertEqual(response.log_filename, 'foo.log')
|
| +
|
| + self.assertEqual(response.data, saxutils.unescape(self.logfile_sample))
|
| +
|
| + self.assert_request_parameters({
|
| + 'Action': 'DownloadDBLogFilePortion',
|
| + 'DBInstanceIdentifier': 'db1',
|
| + 'LogFileName': 'foo.log',
|
| + }, ignore_params_values=['Version'])
|
| +
|
| + def test_multi_args(self):
|
| + self.set_http_response(status_code=200)
|
| + response = self.service_connection.get_log_file('db1', 'foo.log', marker='0:4485', number_of_lines=10)
|
| +
|
| + self.assertTrue(isinstance(response, LogFileObject))
|
| +
|
| + self.assert_request_parameters({
|
| + 'Action': 'DownloadDBLogFilePortion',
|
| + 'DBInstanceIdentifier': 'db1',
|
| + 'Marker': '0:4485',
|
| + 'NumberOfLines': 10,
|
| + 'LogFileName': 'foo.log',
|
| + }, ignore_params_values=['Version'])
|
| +
|
| +
|
| class TestRDSOptionGroupOptions(AWSMockServiceTestCase):
|
| connection_class = RDSConnection
|
|
|
|
|