|
38 | 38 | from servicex.query_cache import QueryCache |
39 | 39 | from servicex.expandable_progress import ExpandableProgress |
40 | 40 | from servicex.query_core import ServiceXException |
| 41 | +from servicex.models import CachedDataset |
41 | 42 |
|
42 | 43 | from pathlib import Path |
43 | 44 | from servicex.models import ( |
@@ -257,6 +258,120 @@ async def test_transform_status_listener_cancelled(python_dataset): |
257 | 258 | assert python_dataset.files_failed == 1 |
258 | 259 |
|
259 | 260 |
|
| 261 | +@pytest.mark.asyncio |
| 262 | +async def test_transform_status_listener_bad_dataset(python_dataset): |
| 263 | + progress = Mock(spec=Progress) |
| 264 | + progress_task = Mock() |
| 265 | + download_task = Mock() |
| 266 | + status = Mock(files=0, files_completed=0, files_failed=0, status=Status.bad_dataset) |
| 267 | + python_dataset.current_status = status |
| 268 | + python_dataset.retrieve_current_transform_status = AsyncMock(return_value=status) |
| 269 | + bad_dataset = CachedDataset( |
| 270 | + id=42, |
| 271 | + name="test_dataset", |
| 272 | + did_finder="some_finder", |
| 273 | + n_files=2, |
| 274 | + size=3072, |
| 275 | + events=300, |
| 276 | + last_used=datetime.datetime.now(), |
| 277 | + last_updated=datetime.datetime.now(), |
| 278 | + lookup_status="does_not_exist", |
| 279 | + is_stale=True, |
| 280 | + files=[], |
| 281 | + ) |
| 282 | + python_dataset.servicex = Mock() |
| 283 | + python_dataset.servicex.get_dataset = AsyncMock(return_value=bad_dataset) |
| 284 | + with pytest.raises(ServiceXException, match=r"dataset problem"): |
| 285 | + with patch( |
| 286 | + "servicex.app.transforms.create_kibana_link_parameters" |
| 287 | + ) as mock_link: |
| 288 | + await python_dataset.transform_status_listener( |
| 289 | + progress, progress_task, "mock_title", download_task, "mock_title" |
| 290 | + ) |
| 291 | + mock_link.assert_called_once() |
| 292 | + python_dataset.retrieve_current_transform_status.assert_awaited_once() |
| 293 | + assert python_dataset.files_completed == 0 |
| 294 | + assert python_dataset.files_failed == 0 |
| 295 | + |
| 296 | + |
| 297 | +@pytest.mark.asyncio |
| 298 | +async def test_transform_status_listener_bad_dataset_bad_lookup(python_dataset): |
| 299 | + progress = Mock(spec=Progress) |
| 300 | + progress_task = Mock() |
| 301 | + download_task = Mock() |
| 302 | + status = Mock(files=0, files_completed=0, files_failed=0, status=Status.bad_dataset) |
| 303 | + python_dataset.current_status = status |
| 304 | + python_dataset.retrieve_current_transform_status = AsyncMock(return_value=status) |
| 305 | + python_dataset.servicex = Mock() |
| 306 | + python_dataset.servicex.get_dataset = AsyncMock(side_effect=Exception) |
| 307 | + with pytest.raises(ServiceXException, match=r"Further information not available"): |
| 308 | + with patch( |
| 309 | + "servicex.app.transforms.create_kibana_link_parameters" |
| 310 | + ) as mock_link: |
| 311 | + await python_dataset.transform_status_listener( |
| 312 | + progress, progress_task, "mock_title", download_task, "mock_title" |
| 313 | + ) |
| 314 | + mock_link.assert_called_once() |
| 315 | + python_dataset.retrieve_current_transform_status.assert_awaited_once() |
| 316 | + assert python_dataset.files_completed == 0 |
| 317 | + assert python_dataset.files_failed == 0 |
| 318 | + |
| 319 | + |
| 320 | +@pytest.mark.asyncio |
| 321 | +async def test_transform_status_listener_zero_files_no_log_url(python_dataset): |
| 322 | + progress = Mock(spec=Progress) |
| 323 | + progress_task = Mock() |
| 324 | + download_task = Mock() |
| 325 | + status = Mock( |
| 326 | + files=0, |
| 327 | + files_completed=0, |
| 328 | + files_failed=0, |
| 329 | + status=Status.complete, |
| 330 | + log_url=None, |
| 331 | + title="Test Transform", |
| 332 | + ) |
| 333 | + python_dataset.current_status = status |
| 334 | + python_dataset.retrieve_current_transform_status = AsyncMock(return_value=status) |
| 335 | + with patch("servicex.query_core.logger") as mock_logger: |
| 336 | + |
| 337 | + await python_dataset.transform_status_listener( |
| 338 | + progress, progress_task, "mock_title", download_task, "mock_title" |
| 339 | + ) |
| 340 | + mock_logger.warning.assert_called_once() |
| 341 | + |
| 342 | + python_dataset.retrieve_current_transform_status.assert_awaited_once() |
| 343 | + |
| 344 | + |
| 345 | +@pytest.mark.asyncio |
| 346 | +async def test_transform_status_listener_zero_files_with_log_url(python_dataset): |
| 347 | + progress = Mock(spec=Progress) |
| 348 | + progress_task = Mock() |
| 349 | + download_task = Mock() |
| 350 | + status = Mock( |
| 351 | + files=0, |
| 352 | + files_completed=0, |
| 353 | + files_failed=0, |
| 354 | + status=Status.complete, |
| 355 | + log_url="http://example.com/logs", |
| 356 | + request_id="test-request-123", |
| 357 | + title="Test Transform", |
| 358 | + ) |
| 359 | + python_dataset.current_status = status |
| 360 | + python_dataset.retrieve_current_transform_status = AsyncMock(return_value=status) |
| 361 | + |
| 362 | + with patch("servicex.app.transforms.create_kibana_link_parameters") as mock_link: |
| 363 | + with patch("servicex.query_core.logger") as mock_logger: |
| 364 | + mock_link.return_value = "http://kibana.example.com/link" |
| 365 | + await python_dataset.transform_status_listener( |
| 366 | + progress, progress_task, "mock_title", download_task, "mock_title" |
| 367 | + ) |
| 368 | + |
| 369 | + mock_link.assert_called_once() |
| 370 | + mock_logger.warning.assert_called() |
| 371 | + |
| 372 | + python_dataset.retrieve_current_transform_status.assert_awaited_once() |
| 373 | + |
| 374 | + |
260 | 375 | @pytest.mark.asyncio |
261 | 376 | async def test_retrieve_current_transform_status_status_none( |
262 | 377 | python_dataset, completed_status |
|
0 commit comments