@@ -118,7 +118,7 @@ def do_context():
118
118
119
119
120
120
@pytest .mark .asyncio
121
- async def test_good_run_root_files (mocker ):
121
+ async def test_minio_back (mocker ):
122
122
'Get a root file with a single file'
123
123
mock_cache = build_cache_mock (mocker , data_file_return = "/foo/bar.root" )
124
124
mock_servicex_adaptor = MockServiceXAdaptor (mocker , "123-456" )
@@ -390,6 +390,152 @@ async def test_good_run_single_ds_2file_awkward(mocker, good_awkward_file_data):
390
390
assert len (good_awkward_file_data .combine_awkward .call_args [0 ][0 ]) == 2
391
391
392
392
393
+ @pytest .mark .asyncio
394
+ async def test_good_run_root_files_from_minio (mocker ):
395
+ 'Get a root file pulling back minio info as it arrives'
396
+ mock_cache = build_cache_mock (mocker , data_file_return = "/foo/bar.root" )
397
+ mock_servicex_adaptor = MockServiceXAdaptor (mocker , "123-456" )
398
+ mock_minio_adaptor = MockMinioAdaptor (mocker , files = ['one_minio_entry' ])
399
+ mock_logger = mocker .MagicMock (spec = log_adaptor )
400
+ data_adaptor = mocker .MagicMock (spec = DataConverterAdaptor )
401
+
402
+ ds = fe .ServiceXDataset ('localds://mc16_tev:13' ,
403
+ servicex_adaptor = mock_servicex_adaptor , # type: ignore
404
+ minio_adaptor = mock_minio_adaptor , # type: ignore
405
+ cache_adaptor = mock_cache ,
406
+ local_log = mock_logger ,
407
+ data_convert_adaptor = data_adaptor )
408
+ lst = []
409
+ async for f_info in ds .get_data_rootfiles_minio_async ('(valid qastle string)' ):
410
+ lst .append (f_info )
411
+
412
+ assert len (lst ) == 1
413
+ assert lst [0 ]['bucket' ] == '123-456'
414
+ assert lst [0 ]['file' ] == 'one_minio_entry'
415
+
416
+ assert mock_servicex_adaptor .query_json ['result-format' ] == 'root-file'
417
+
418
+
419
+ @pytest .mark .asyncio
420
+ async def test_bad_request_id_run_root_files_from_minio (mocker ):
421
+ 'Using the minio interface - the request_id is not known'
422
+ mock_cache = build_cache_mock (mocker , data_file_return = "/foo/bar.root" )
423
+ transform_status = mocker .MagicMock (side_effect = ServiceXUnknownRequestID ('boom' ))
424
+ mock_servicex_adaptor = MockServiceXAdaptor (mocker , "123-456" ,
425
+ mock_transform_status = transform_status )
426
+ mock_minio_adaptor = MockMinioAdaptor (mocker , files = ['one_minio_entry' ])
427
+ mock_logger = mocker .MagicMock (spec = log_adaptor )
428
+ data_adaptor = mocker .MagicMock (spec = DataConverterAdaptor )
429
+
430
+ ds = fe .ServiceXDataset ('localds://mc16_tev:13' ,
431
+ servicex_adaptor = mock_servicex_adaptor , # type: ignore
432
+ minio_adaptor = mock_minio_adaptor , # type: ignore
433
+ cache_adaptor = mock_cache ,
434
+ local_log = mock_logger ,
435
+ data_convert_adaptor = data_adaptor )
436
+
437
+ with pytest .raises (ServiceXException ) as e :
438
+ lst = []
439
+ async for f_info in ds .get_data_rootfiles_minio_async ('(valid qastle string)' ):
440
+ lst .append (f_info )
441
+
442
+ assert 'to know about' in str (e .value )
443
+
444
+
445
+ @pytest .mark .asyncio
446
+ async def test_bad_transform_run_root_files_from_minio (mocker ):
447
+ 'Using the async minio interface - fail to transform (like bad DID)'
448
+ mock_cache = build_cache_mock (mocker , data_file_return = "/foo/bar.root" )
449
+ fatal_transform_status = {
450
+ "request_id" : "24e59fa2-e1d7-4831-8c7e-82b2efc7c658" ,
451
+ "did" : "mc15_13TeV:mc15_13TeV.361106.PowhegPythia8EvtGen_AZNLOCTEQ6L1_Zee.merge.DAOD_STDM3.e3601_s2576_s2132_r6630_r6264_p2363_tid05630052_0000" , # NOQA
452
+ "columns" : "Electrons.pt(), Electrons.eta(), Electrons.phi(), Electrons.e(), Muons.pt(), Muons.eta(), Muons.phi(), Muons.e()" , # NOQA
453
+ "selection" : None ,
454
+ "tree-name" : None ,
455
+ "image" : "sslhep/servicex_func_adl_xaod_transformer:130_reset_cwd" ,
456
+ "chunk-size" : 7000 ,
457
+ "workers" : 1 ,
458
+ "result-destination" : "kafka" ,
459
+ "result-format" : "arrow" ,
460
+ "kafka-broker" : "servicex-kafka-1.slateci.net:19092" ,
461
+ "workflow-name" : "straight_transform" ,
462
+ "generated-code-cm" : None ,
463
+ "status" : "Fatal" ,
464
+ "failure-info" : "DID Not found mc15_13TeV:mc15_13TeV.361106.PowhegPythia8EvtGen_AZNLOCTEQ6L1_Zee.merge.DAOD_STDM3.e3601_s2576_s2132_r6630_r6264_p2363_tid05630052_0000" # NOQA
465
+ }
466
+ mock_servicex_adaptor = MockServiceXAdaptor (mocker , "123-456" ,
467
+ mock_transform_status = mocker .MagicMock (side_effect = ServiceXFatalTransformException ('DID was BAD' )), # NOQA
468
+ mock_transform_query_status = mocker .MagicMock (return_value = fatal_transform_status ))
469
+ mock_minio_adaptor = MockMinioAdaptor (mocker , files = ['one_minio_entry' ])
470
+ mock_logger = mocker .MagicMock (spec = log_adaptor )
471
+ data_adaptor = mocker .MagicMock (spec = DataConverterAdaptor )
472
+
473
+ ds = fe .ServiceXDataset ('localds://mc16_tev:13' ,
474
+ servicex_adaptor = mock_servicex_adaptor , # type: ignore
475
+ minio_adaptor = mock_minio_adaptor , # type: ignore
476
+ cache_adaptor = mock_cache ,
477
+ local_log = mock_logger ,
478
+ data_convert_adaptor = data_adaptor )
479
+
480
+ with pytest .raises (ServiceXFatalTransformException ) as e :
481
+ lst = []
482
+ async for f_info in ds .get_data_rootfiles_minio_async ('(valid qastle string)' ):
483
+ lst .append (f_info )
484
+
485
+ assert 'Fatal Error' in str (e .value )
486
+
487
+
488
+ @pytest .mark .asyncio
489
+ async def test_bad_file_transform_run_root_files_from_minio (mocker ):
490
+ 'Using the async minio interface, some files will fail to translate.'
491
+ mock_cache = build_cache_mock (mocker )
492
+ mock_logger = mocker .MagicMock (spec = log_adaptor )
493
+ mock_transform_status = mocker .Mock (return_value = (0 , 1 , 1 ))
494
+ mock_servicex_adaptor = MockServiceXAdaptor (mocker , "123-456" , mock_transform_status )
495
+ mock_minio_adaptor = MockMinioAdaptor (mocker , files = ['one_minio_entry' , 'two_minio_entry' ])
496
+ data_adaptor = mocker .MagicMock (spec = DataConverterAdaptor )
497
+
498
+ ds = fe .ServiceXDataset ('localds://mc16_tev:13' ,
499
+ servicex_adaptor = mock_servicex_adaptor , # type: ignore
500
+ minio_adaptor = mock_minio_adaptor , # type: ignore
501
+ cache_adaptor = mock_cache ,
502
+ local_log = mock_logger ,
503
+ data_convert_adaptor = data_adaptor )
504
+
505
+ with pytest .raises (ServiceXException ) as e :
506
+ lst = []
507
+ async for f_info in ds .get_data_rootfiles_minio_async ('(valid qastle string)' ):
508
+ lst .append (f_info )
509
+
510
+ assert 'Failed to transform all files' in str (e .value )
511
+
512
+
513
+ @pytest .mark .asyncio
514
+ async def test_good_run_parquet_files_from_minio (mocker ):
515
+ 'Get a parquet file pulling back minio info as it arrives'
516
+ mock_cache = build_cache_mock (mocker , data_file_return = "/foo/bar.root" )
517
+ mock_servicex_adaptor = MockServiceXAdaptor (mocker , "123-456" )
518
+ mock_minio_adaptor = MockMinioAdaptor (mocker , files = ['one_minio_entry' ])
519
+ mock_logger = mocker .MagicMock (spec = log_adaptor )
520
+ data_adaptor = mocker .MagicMock (spec = DataConverterAdaptor )
521
+
522
+ ds = fe .ServiceXDataset ('localds://mc16_tev:13' ,
523
+ servicex_adaptor = mock_servicex_adaptor , # type: ignore
524
+ minio_adaptor = mock_minio_adaptor , # type: ignore
525
+ cache_adaptor = mock_cache ,
526
+ local_log = mock_logger ,
527
+ data_convert_adaptor = data_adaptor )
528
+ lst = []
529
+ async for f_info in ds .get_data_parquet_minio_async ('(valid qastle string)' ):
530
+ lst .append (f_info )
531
+
532
+ assert len (lst ) == 1
533
+ assert lst [0 ]['bucket' ] == '123-456'
534
+ assert lst [0 ]['file' ] == 'one_minio_entry'
535
+
536
+ assert mock_servicex_adaptor .query_json ['result-format' ] == 'parquet'
537
+
538
+
393
539
@pytest .mark .asyncio
394
540
async def test_status_exception (mocker ):
395
541
'Make sure status error - like transform not found - is reported all the way to the top'
0 commit comments