def test_publish_multi_connection(self) -> None: new_datasource = TSC.DatasourceItem( name="Sample", project_id="ee8c6e70-43b6-11e6-af4f-f7b0d8e20760") connection1 = TSC.ConnectionItem() connection1.server_address = "mysql.test.com" connection1.connection_credentials = TSC.ConnectionCredentials( "test", "secret", True) connection2 = TSC.ConnectionItem() connection2.server_address = "pgsql.test.com" connection2.connection_credentials = TSC.ConnectionCredentials( "test", "secret", True) response = RequestFactory.Datasource._generate_xml( new_datasource, connections=[connection1, connection2]) # Can't use ConnectionItem parser due to xml namespace problems connection_results = fromstring(response).findall(".//connection") self.assertEqual(connection_results[0].get("serverAddress", None), "mysql.test.com") self.assertEqual( connection_results[0].find("connectionCredentials").get( "name", None), "test") # type: ignore[union-attr] self.assertEqual(connection_results[1].get("serverAddress", None), "pgsql.test.com") self.assertEqual( connection_results[1].find("connectionCredentials").get( "password", None), "secret") # type: ignore[union-attr]
def test_publish_multi_connection(self): new_datasource = TSC.DatasourceItem( name='Sample', project_id='ee8c6e70-43b6-11e6-af4f-f7b0d8e20760') connection1 = TSC.ConnectionItem() connection1.server_address = 'mysql.test.com' connection1.connection_credentials = TSC.ConnectionCredentials( 'test', 'secret', True) connection2 = TSC.ConnectionItem() connection2.server_address = 'pgsql.test.com' connection2.connection_credentials = TSC.ConnectionCredentials( 'test', 'secret', True) response = RequestFactory.Datasource._generate_xml( new_datasource, connections=[connection1, connection2]) # Can't use ConnectionItem parser due to xml namespace problems connection_results = ET.fromstring(response).findall('.//connection') self.assertEqual(connection_results[0].get('serverAddress', None), 'mysql.test.com') self.assertEqual( connection_results[0].find('connectionCredentials').get( 'name', None), 'test') self.assertEqual(connection_results[1].get('serverAddress', None), 'pgsql.test.com') self.assertEqual( connection_results[1].find('connectionCredentials').get( 'password', None), 'secret')
def test_generate_xml_invalid_connection(self): workbook_item: TSC.WorkbookItem = TSC.WorkbookItem( "name", "project_id") conn = TSC.ConnectionItem() with self.assertRaises(ValueError): request = TSC_RF.RequestFactory.Workbook._generate_xml( workbook_item, connections=[conn])
def test_generate_xml_valid_connection_credentials(self): workbook_item: TSC.WorkbookItem = TSC.WorkbookItem( "name", "project_id") conn = TSC.ConnectionItem() conn.server_address = "address" creds = TSC.ConnectionCredentials("username", "DELETEME") conn.connection_credentials = creds request = TSC_RF.RequestFactory.Workbook._generate_xml( workbook_item, connections=[conn]) assert request.find(b"DELETEME") > 0
def test_generate_xml_invalid_connection_credentials(self): workbook_item: TSC.WorkbookItem = TSC.WorkbookItem( "name", "project_id") conn = TSC.ConnectionItem() conn.server_address = "address" creds = TSC.ConnectionCredentials("username", "password") creds.name = None conn.connection_credentials = creds with self.assertRaises(ValueError): request = TSC_RF.RequestFactory.Workbook._generate_xml( workbook_item, connections=[conn])
def test_credentials_and_multi_connect_raises_exception(self): new_datasource = TSC.DatasourceItem(name='Sample', project_id='ee8c6e70-43b6-11e6-af4f-f7b0d8e20760') connection_creds = TSC.ConnectionCredentials('test', 'secret', True) connection1 = TSC.ConnectionItem() connection1.server_address = 'mysql.test.com' connection1.connection_credentials = TSC.ConnectionCredentials('test', 'secret', True) with self.assertRaises(RuntimeError): response = RequestFactory.Datasource._generate_xml(new_datasource, connection_credentials=connection_creds, connections=[connection1])
def test_redact_passwords_in_xml(self): if sys.version_info < (3, 7): pytest.skip("Redaction is only implemented for 3.7+.") workbook_item: TSC.WorkbookItem = TSC.WorkbookItem( "name", "project_id") conn = TSC.ConnectionItem() conn.server_address = "address" creds = TSC.ConnectionCredentials("username", "DELETEME") conn.connection_credentials = creds request = TSC_RF.RequestFactory.Workbook._generate_xml( workbook_item, connections=[conn]) redacted = redact_xml(request) assert request.find(b"DELETEME") > 0, request assert redacted.find(b"DELETEME") == -1, redacted
def test_credentials_and_multi_connect_raises_exception(self) -> None: new_workbook = TSC.WorkbookItem( name="Sample", show_tabs=False, project_id="ee8c6e70-43b6-11e6-af4f-f7b0d8e20760" ) connection_creds = TSC.ConnectionCredentials("test", "secret", True) connection1 = TSC.ConnectionItem() connection1.server_address = "mysql.test.com" connection1.connection_credentials = TSC.ConnectionCredentials("test", "secret", True) with self.assertRaises(RuntimeError): response = RequestFactory.Workbook._generate_xml( new_workbook, connection_credentials=connection_creds, connections=[connection1] )
def test_update_hyper_data_connection_object(self): """Calling `update_hyper_data` with a `ConnectionItem` should update that connection""" self.server.version = "3.13" self.baseurl = self.server.datasources.baseurl connection = TSC.ConnectionItem() connection._datasource_id = '9dbd2263-16b5-46e1-9c43-a76bb8ab65fb' connection._id = '7ecaccd8-39b0-4875-a77d-094f6e930019' response_xml = read_xml_asset(UPDATE_HYPER_DATA_XML) with requests_mock.mock() as m: m.patch( self.baseurl + '/9dbd2263-16b5-46e1-9c43-a76bb8ab65fb/connections/7ecaccd8-39b0-4875-a77d-094f6e930019/data', status_code=202, headers={"requestid": "test_id"}, text=response_xml) new_job = self.server.datasources.update_hyper_data( connection, request_id="test_id", actions=[]) # We only check the `id`; remaining fields are already tested in `test_update_hyper_data_datasource_object` self.assertEqual('5c0ba560-c959-424e-b08a-f32ef0bfb737', new_job.id)