@@ -325,46 +325,72 @@ subtest '[qesap_az_diagnostic_log] no VMs' => sub {
325325 my $qesap = Test::MockModule-> new(' sles4sap::qesap::azure' , no_auto => 1);
326326 my @calls ;
327327 $qesap -> redefine(qesap_az_get_resource_group => sub { return ' DENTIST' ; });
328+ $qesap -> redefine(az_vm_diagnostic_log_get => sub { push @calls , {@_ }; return (); });
329+ $qesap -> redefine(record_info => sub { note(join (' ' , ' RECORD_INFO -->' , @_ )); });
330+
331+ my @log_files = qesap_az_diagnostic_log();
332+
333+ ok((any { $_ -> {resource_group } eq ' DENTIST' } @calls ), ' Proper resource group in vm list' );
334+ # ok((any { $_->{query} =~ /id:id,name:name/ } @calls), 'Proper query in vm list');
335+ ok((scalar @log_files == 0), ' No returned logs' );
336+ };
337+
338+ subtest ' [qesap_az_diagnostic_log] no VMs integration test' => sub {
339+ my $qesap = Test::MockModule-> new(' sles4sap::qesap::azure' , no_auto => 1);
340+ my $azcli = Test::MockModule-> new(' sles4sap::azure_cli' , no_auto => 1);
341+ my @calls ;
342+ $qesap -> redefine(qesap_az_get_resource_group => sub { return ' DENTIST' ; });
328343 $qesap -> redefine(record_info => sub { note(join (' ' , ' RECORD_INFO -->' , @_ )); });
329344
330345 # Configure vm list to return no VMs
331- $qesap -> redefine(az_vm_list => sub { push @calls , { @_ } ; return [] ; });
346+ $azcli -> redefine(script_output => sub { push @calls , $_ [0] ; return ' [] ' ; });
332347
333348 my @log_files = qesap_az_diagnostic_log();
334349
335350 note(" \n C--> " . join (" \n C--> " , @calls ));
336- ok((any { $_ -> {resource_group } eq ' DENTIST' } @calls ), ' Proper resource group in vm list' );
337- ok((any { $_ -> {query } =~ / id:id,name:name/ } @calls ), ' Proper query in vm list' );
351+ ok((any { / az vm list.*DENTIST.*/ } @calls ), ' List all VMs in the resource group' );
338352 ok((scalar @log_files == 0), ' No returned logs' );
339353};
340354
341355subtest ' [qesap_az_diagnostic_log] one VMs' => sub {
342356 my $qesap = Test::MockModule-> new(' sles4sap::qesap::azure' , no_auto => 1);
343357 my @calls ;
344358 $qesap -> redefine(qesap_az_get_resource_group => sub { return ' DENTIST' ; });
359+ $qesap -> redefine(az_vm_diagnostic_log_get => sub { push @calls , {@_ }; return (' pink_coral.log' ); });
345360 $qesap -> redefine(record_info => sub { note(join (' ' , ' RECORD_INFO -->' , @_ )); });
346361
362+ my @log_files = qesap_az_diagnostic_log();
363+
364+ ok((scalar @log_files == 1), ' Exactly one returned logs for one VM' );
365+ };
366+
367+ subtest ' [qesap_az_diagnostic_log] one VMs integration test' => sub {
368+ my $qesap = Test::MockModule-> new(' sles4sap::qesap::azure' , no_auto => 1);
369+ my $azcli = Test::MockModule-> new(' sles4sap::azure_cli' , no_auto => 1);
370+ my @calls ;
371+ $qesap -> redefine(qesap_az_get_resource_group => sub { return ' DENTIST' ; });
372+
373+ $azcli -> redefine(script_run => sub { push @calls , $_ [0]; return 0; });
347374 # Configure vm list to return one VM
348- $qesap -> redefine(az_vm_list => sub {
349- push @calls , { @_ } ;
350- return [{ name => " NEMO" , id => " MARLIN" }];
375+ $azcli -> redefine(script_output => sub {
376+ push @calls , $_ [0] ;
377+ return ' [{" name":" NEMO", "id":" MARLIN"}]' ;
351378 });
352- $qesap -> redefine(script_run => sub { push @calls , $_ [0]; return 0 ; });
379+ $azcli -> redefine(record_info => sub { note( join ( ' ' , ' RECORD_INFO --> ' , @_ )) ; });
353380
354381 my @log_files = qesap_az_diagnostic_log();
355382
356383 note(" \n C--> " . join (" \n C--> " , @calls ));
357- ok((any { $_ -> {resource_group } eq ' DENTIST' } @calls ), ' Proper resource group in vm list' );
358- ok((any { / az vm boot-diagnostics get-boot-log.*/ } @calls ), ' Proper base command for vm boot-diagnostics get-boot-log' );
359- ok((any { / .*--ids MARLIN.*/ } @calls ), ' Proper id in boot-diagnostics' );
360- ok((any { / .*boot-diagnostics_NEMO.*/ } @calls ), ' Proper output file in boot-diagnostics' );
361384 ok((scalar @log_files == 1), ' Exactly one returned logs for one VM' );
362385};
363386
364387subtest ' [qesap_az_diagnostic_log] three VMs' => sub {
365388 my $qesap = Test::MockModule-> new(' sles4sap::qesap::azure' , no_auto => 1);
366389 my @calls ;
367390 $qesap -> redefine(qesap_az_get_resource_group => sub { return ' DENTIST' ; });
391+ $qesap -> redefine(az_vm_diagnostic_log_get => sub {
392+ push @calls , {@_ };
393+ return (' pink_coral.log' , ' blue_coral.log' , ' white_coral.log' ); });
368394 $qesap -> redefine(record_info => sub { note(join (' ' , ' RECORD_INFO -->' , @_ )); });
369395
370396 # Configure vm list to return three VMs
@@ -378,10 +404,27 @@ subtest '[qesap_az_diagnostic_log] three VMs' => sub {
378404 });
379405 $qesap -> redefine(script_run => sub { push @calls , $_ [0]; return 0; });
380406
407+ my @log_files = qesap_az_diagnostic_log();
408+ ok((scalar @log_files == 3), ' Exactly three returned logs for three VMs' );
409+ };
410+
411+ subtest ' [qesap_az_diagnostic_log] three VMs integration test' => sub {
412+ my $qesap = Test::MockModule-> new(' sles4sap::qesap::azure' , no_auto => 1);
413+ my $azcli = Test::MockModule-> new(' sles4sap::azure_cli' , no_auto => 1);
414+ my @calls ;
415+ $qesap -> redefine(qesap_az_get_resource_group => sub { return ' DENTIST' ; });
416+
417+ $azcli -> redefine(script_run => sub { push @calls , $_ [0]; return 0; });
418+ # Configure vm list to return 3 VMs
419+ $azcli -> redefine(script_output => sub {
420+ push @calls , $_ [0];
421+ return ' [{"name":"DORY", "id":"BLUE_TANG"},{"name":"BRUCE", "id":"GREAT_WHITE"},{"name":"CRUSH", "id":"SEA_TURTLE"}]' ;
422+ });
423+ $azcli -> redefine(record_info => sub { note(join (' ' , ' RECORD_INFO -->' , @_ )); });
424+
381425 my @log_files = qesap_az_diagnostic_log();
382426
383427 note(" \n C--> " . join (" \n C--> " , @calls ));
384- ok((any { ref ($_ ) eq ' HASH' && $_ -> {resource_group } eq ' DENTIST' } @calls ), ' Proper resource group in vm list' );
385428
386429 my %expected_vms = (
387430 DORY => " BLUE_TANG" ,
@@ -396,76 +439,4 @@ subtest '[qesap_az_diagnostic_log] three VMs' => sub {
396439 ok((scalar @log_files == 3), ' Exactly three returned logs for three VMs' );
397440};
398441
399- subtest ' [qesap_az_diagnostic_log] Partial Success (fatal = 0)' => sub {
400- my $qesap = Test::MockModule-> new(' sles4sap::qesap::azure' , no_auto => 1);
401- my @record_calls ;
402-
403- $qesap -> redefine(qesap_az_get_resource_group => sub { return ' DENTIST' ; });
404- $qesap -> redefine(az_vm_list => sub {
405- return [
406- {name => " DORY" , id => " BLUE_TANG" },
407- {name => " BRUCE" , id => " GREAT_WHITE" },
408- {name => " CRUSH" , id => " SEA_TURTLE" }
409- ];
410- });
411-
412- $qesap -> redefine(script_run => sub {
413- my ($cmd ) = @_ ;
414- return ($cmd =~ / BRUCE/ ) ? 1 : 0;
415- });
416- $qesap -> redefine(record_info => sub { push @record_calls , $_ [0] if $_ [0] eq ' Diag Warn' ; });
417-
418- my @log_files ;
419- lives_ok {
420- @log_files = qesap_az_diagnostic_log(fatal => 0);
421- } ' Fail silently' ;
422-
423- is(scalar @log_files , 2, ' Return exactly 2 successful logs' );
424- ok((any { / boot-diagnostics_DORY.txt/ } @log_files ), ' DORY log present' );
425- ok((any { / boot-diagnostics_CRUSH.txt/ } @log_files ), ' CRUSH log present' );
426- ok(!(any { / boot-diagnostics_BRUCE.txt/ } @log_files ), ' BRUCE log absent' );
427- is(scalar @record_calls , 1, ' One failure for BRUCE' );
428- };
429-
430- subtest ' [qesap_az_diagnostic_log] Cumulative Failures (fatal = 1)' => sub {
431- my $qesap = Test::MockModule-> new(' sles4sap::qesap::azure' , no_auto => 1);
432- $qesap -> redefine(qesap_az_get_resource_group => sub { return ' DENTIST' ; });
433- $qesap -> redefine(record_info => sub { 1; });
434-
435- $qesap -> redefine(az_vm_list => sub {
436- return [
437- {name => " NEMO" , id => " MARLIN" },
438- {name => " DORY" , id => " BLUE_TANG" }
439- ];
440- });
441-
442- $qesap -> redefine(script_run => sub { return 1; });
443- throws_ok {
444- qesap_az_diagnostic_log(fatal => 1);
445- } qr / Fatal Error:.*NEMO.*DORY/ s , ' Die as expected' ;
446- };
447-
448- subtest ' [qesap_az_diagnostic_log] Mixed Error' => sub {
449- my $qesap = Test::MockModule-> new(' sles4sap::qesap::azure' , no_auto => 1);
450- $qesap -> redefine(qesap_az_get_resource_group => sub { return ' DENTIST' ; });
451- $qesap -> redefine(record_info => sub { 1; });
452-
453- $qesap -> redefine(az_vm_list => sub {
454- return [
455- {name => " NEMO" , id => " MARLIN" },
456- {name => " DORY" , id => " BLUE_TANG" }
457- ];
458- });
459-
460- $qesap -> redefine(script_run => sub {
461- my ($cmd ) = @_ ;
462- die " Timeout issue" if $cmd =~ / DORY/ ;
463- return 1; # NEMO
464- });
465-
466- throws_ok {
467- qesap_az_diagnostic_log(fatal => 1);
468- } qr / Exit code: 1.*DORY: Timeout issue/ s , ' Exitcode and timeout as expected' ;
469- };
470-
471442done_testing;
0 commit comments