42
42
43
43
DATASET_TYPES = ['seq' , 'pds' , 'pdse' ]
44
44
45
+ LOCK_VSAM_JCL = """//SLEEP JOB (T043JM,JM00,1,0,0,0),'SLEEP - JRM',CLASS=R,
46
+ // MSGCLASS=X,MSGLEVEL=1,NOTIFY=S0JM
47
+ //STEP1 EXEC PGM=BPXBATCH,PARM='SH sleep 60'
48
+ //VSAM1 DD DISP=OLD,DSN={0}
49
+ //STDOUT DD SYSOUT=*
50
+ //STDERR DD SYSOUT=*
51
+ """
45
52
46
53
def create_vsam_ksds (ds_name , ansible_zos_module , volume ):
47
54
hosts = ansible_zos_module
@@ -391,7 +398,6 @@ def test_find_data_sets_in_volume(ansible_zos_module, volumes_on_systems):
391
398
hosts .all .zos_data_set (name = data_set_name , state = "absent" )
392
399
393
400
394
-
395
401
def test_find_vsam_pattern (ansible_zos_module , volumes_on_systems ):
396
402
hosts = ansible_zos_module
397
403
try :
@@ -401,13 +407,34 @@ def test_find_vsam_pattern(ansible_zos_module, volumes_on_systems):
401
407
volume = volumes .get_available_vol ()
402
408
create_vsam_ksds (vsam , hosts , volume )
403
409
410
+ # A KSDS VSAM has 3 different components, cluster, data and index
411
+ # This test should find all three
404
412
find_res = hosts .all .zos_find (
405
413
patterns = [f'{ TEST_SUITE_HLQ } .FIND.VSAM.FUNCTEST.*' ],
406
414
resource_type = 'cluster'
407
415
)
408
416
for val in find_res .contacted .values ():
409
417
assert len (val .get ('data_sets' )) == 1
410
418
assert val .get ('matched' ) == len (val .get ('data_sets' ))
419
+ assert val .get ('data_sets' )[0 ].get ("name" , None ) == VSAM_NAMES [0 ]
420
+
421
+ find_res = hosts .all .zos_find (
422
+ patterns = [f'{ TEST_SUITE_HLQ } .FIND.VSAM.FUNCTEST.*' ],
423
+ resource_type = 'data'
424
+ )
425
+ for val in find_res .contacted .values ():
426
+ assert len (val .get ('data_sets' )) == 1
427
+ assert val .get ('matched' ) == len (val .get ('data_sets' ))
428
+ assert val .get ('data_sets' )[0 ].get ("name" , None ) == f"{ VSAM_NAMES [0 ]} .DATA"
429
+
430
+ find_res = hosts .all .zos_find (
431
+ patterns = [f'{ TEST_SUITE_HLQ } .FIND.VSAM.FUNCTEST.*' ],
432
+ resource_type = 'index'
433
+ )
434
+ for val in find_res .contacted .values ():
435
+ assert len (val .get ('data_sets' )) == 1
436
+ assert val .get ('matched' ) == len (val .get ('data_sets' ))
437
+ assert val .get ('data_sets' )[0 ].get ("name" , None ) == f"{ VSAM_NAMES [0 ]} .INDEX"
411
438
finally :
412
439
hosts .all .zos_data_set (
413
440
batch = [
@@ -419,6 +446,38 @@ def test_find_vsam_pattern(ansible_zos_module, volumes_on_systems):
419
446
)
420
447
421
448
449
+ def test_find_vsam_pattern_disp_old (ansible_zos_module , volumes_on_systems ):
450
+ """
451
+ Creates a VSAM cluster and runs a JCL to lock the data set with DISP=OLD.
452
+ Then make sure that we can query the VSAM. Currently, if using age + cluster
453
+ resource_type the module will not find the vsam.
454
+ """
455
+ hosts = ansible_zos_module
456
+ try :
457
+ volumes = Volume_Handler (volumes_on_systems )
458
+ jcl_ds = get_tmp_ds_name ()
459
+ for vsam in VSAM_NAMES :
460
+ volume = volumes .get_available_vol ()
461
+ create_vsam_ksds (vsam , hosts , volume )
462
+
463
+ hosts .all .shell (cmd = f"decho \" { LOCK_VSAM_JCL .format (VSAM_NAMES [0 ])} \" '{ jcl_ds } '; jsub '{ jcl_ds } '" )
464
+ find_res = hosts .all .zos_find (
465
+ patterns = [f'{ TEST_SUITE_HLQ } .FIND.VSAM.FUNCTEST.*' ],
466
+ resource_type = 'cluster'
467
+ )
468
+ for val in find_res .contacted .values ():
469
+ assert len (val .get ('data_sets' )) == 1
470
+ assert val .get ('matched' ) == len (val .get ('data_sets' ))
471
+ finally :
472
+ hosts .all .zos_data_set (
473
+ batch = [
474
+ {
475
+ "name" :i ,
476
+ "state" :'absent'
477
+ } for i in VSAM_NAMES
478
+ ]
479
+ )
480
+
422
481
def test_find_vsam_in_volume (ansible_zos_module , volumes_on_systems ):
423
482
hosts = ansible_zos_module
424
483
volumes = Volume_Handler (volumes_on_systems )
0 commit comments