|
20 | 20 | import databricks.sql
|
21 | 21 | import databricks.sql.client as client
|
22 | 22 | from databricks.sql import InterfaceError, DatabaseError, Error, NotSupportedError
|
23 |
| -from databricks.sql.exc import RequestError, CursorAlreadyClosedError |
24 | 23 | from databricks.sql.types import Row
|
25 | 24 |
|
26 | 25 | from tests.unit.test_fetches import FetchTests
|
@@ -523,116 +522,6 @@ def test_access_current_query_id(self):
|
523 | 522 | cursor.close()
|
524 | 523 | self.assertIsNone(cursor.query_id)
|
525 | 524 |
|
526 |
| - def test_cursor_close_handles_exception(self): |
527 |
| - """Test that Cursor.close() handles exceptions from close_command properly.""" |
528 |
| - mock_backend = Mock() |
529 |
| - mock_connection = Mock() |
530 |
| - mock_op_handle = Mock() |
531 |
| - |
532 |
| - mock_backend.close_command.side_effect = Exception("Test error") |
533 |
| - |
534 |
| - cursor = client.Cursor(mock_connection, mock_backend) |
535 |
| - cursor.active_op_handle = mock_op_handle |
536 |
| - |
537 |
| - cursor.close() |
538 |
| - |
539 |
| - mock_backend.close_command.assert_called_once_with(mock_op_handle) |
540 |
| - |
541 |
| - self.assertIsNone(cursor.active_op_handle) |
542 |
| - |
543 |
| - self.assertFalse(cursor.open) |
544 |
| - |
545 |
| - def test_cursor_context_manager_handles_exit_exception(self): |
546 |
| - """Test that cursor's context manager handles exceptions during __exit__.""" |
547 |
| - mock_backend = Mock() |
548 |
| - mock_connection = Mock() |
549 |
| - |
550 |
| - cursor = client.Cursor(mock_connection, mock_backend) |
551 |
| - original_close = cursor.close |
552 |
| - cursor.close = Mock(side_effect=Exception("Test error during close")) |
553 |
| - |
554 |
| - try: |
555 |
| - with cursor: |
556 |
| - raise ValueError("Test error inside context") |
557 |
| - except ValueError: |
558 |
| - pass |
559 |
| - |
560 |
| - cursor.close.assert_called_once() |
561 |
| - |
562 |
| - def test_connection_close_handles_cursor_close_exception(self): |
563 |
| - """Test that _close handles exceptions from cursor.close() properly.""" |
564 |
| - cursors_closed = [] |
565 |
| - |
566 |
| - def mock_close_with_exception(): |
567 |
| - cursors_closed.append(1) |
568 |
| - raise Exception("Test error during close") |
569 |
| - |
570 |
| - cursor1 = Mock() |
571 |
| - cursor1.close = mock_close_with_exception |
572 |
| - |
573 |
| - def mock_close_normal(): |
574 |
| - cursors_closed.append(2) |
575 |
| - |
576 |
| - cursor2 = Mock() |
577 |
| - cursor2.close = mock_close_normal |
578 |
| - |
579 |
| - mock_backend = Mock() |
580 |
| - mock_session_handle = Mock() |
581 |
| - |
582 |
| - try: |
583 |
| - for cursor in [cursor1, cursor2]: |
584 |
| - try: |
585 |
| - cursor.close() |
586 |
| - except Exception: |
587 |
| - pass |
588 |
| - |
589 |
| - mock_backend.close_session(mock_session_handle) |
590 |
| - except Exception as e: |
591 |
| - self.fail(f"Connection close should handle exceptions: {e}") |
592 |
| - |
593 |
| - self.assertEqual(cursors_closed, [1, 2], "Both cursors should have close called") |
594 |
| - |
595 |
| - def test_resultset_close_handles_cursor_already_closed_error(self): |
596 |
| - """Test that ResultSet.close() handles CursorAlreadyClosedError properly.""" |
597 |
| - result_set = client.ResultSet.__new__(client.ResultSet) |
598 |
| - result_set.thrift_backend = Mock() |
599 |
| - result_set.thrift_backend.CLOSED_OP_STATE = 'CLOSED' |
600 |
| - result_set.connection = Mock() |
601 |
| - result_set.connection.open = True |
602 |
| - result_set.op_state = 'RUNNING' |
603 |
| - result_set.has_been_closed_server_side = False |
604 |
| - result_set.command_id = Mock() |
605 |
| - |
606 |
| - class MockRequestError(Exception): |
607 |
| - def __init__(self): |
608 |
| - self.args = ["Error message", CursorAlreadyClosedError()] |
609 |
| - |
610 |
| - result_set.thrift_backend.close_command.side_effect = MockRequestError() |
611 |
| - |
612 |
| - original_close = client.ResultSet.close |
613 |
| - try: |
614 |
| - try: |
615 |
| - if ( |
616 |
| - result_set.op_state != result_set.thrift_backend.CLOSED_OP_STATE |
617 |
| - and not result_set.has_been_closed_server_side |
618 |
| - and result_set.connection.open |
619 |
| - ): |
620 |
| - result_set.thrift_backend.close_command(result_set.command_id) |
621 |
| - except MockRequestError as e: |
622 |
| - if isinstance(e.args[1], CursorAlreadyClosedError): |
623 |
| - pass |
624 |
| - finally: |
625 |
| - result_set.has_been_closed_server_side = True |
626 |
| - result_set.op_state = result_set.thrift_backend.CLOSED_OP_STATE |
627 |
| - |
628 |
| - result_set.thrift_backend.close_command.assert_called_once_with(result_set.command_id) |
629 |
| - |
630 |
| - assert result_set.has_been_closed_server_side is True |
631 |
| - |
632 |
| - assert result_set.op_state == result_set.thrift_backend.CLOSED_OP_STATE |
633 |
| - finally: |
634 |
| - pass |
635 |
| - |
636 | 525 |
|
637 | 526 | if __name__ == "__main__":
|
638 | 527 | suite = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__])
|
|
0 commit comments