#!/usr/bin/perl -w use Test::More tests => 1; use Data::Dumper; my @test_cases = ( { text => ' SERVICE, app-dc-06, APP DC ServiceName, OK, OK: 196 : 0.52 SERVICE, app-dc-07, APP DC ServiceName, OK, OK: 196 : 0.52 SERVICE, app-dc-08, APP DC ServiceName, OK, OK: 196 : 0.52', expected_contexts => [ "CREATE:APP_DC_ServiceName_OK_CONTEXT" ], description => "one service on three servers in same dc starting OK", }, { text => ' SERVICE, app-dc-06, APP DC ServiceName, OK, OK: 196 : 0.52 SERVICE, app-dc-07, APP DC ServiceName, OK, OK: 196 : 0.52 SERVICE, app-dc-08, APP DC ServiceName, OK, OK: 196 : 0.52 SERVICE, app-dc-06, APP DC ServiceName, CRITICAL, Error encountered', expected_contexts => [ "CREATE:APP_DC_ServiceName_OK_CONTEXT", "CREATE:APP_DC_ServiceName_PROBLEM_CONTEXT", "CREATE:APP_app-dc-06_ServiceName_PROBLEM_CONTEXT", "CREATE:APP_DC_ServiceName_PROBLEM_DELAY_NOTIFICATION_CONTEXT", ], description => "three services come up, then one goes down", }, { text => ' SERVICE, app-dc-06, APP DC ServiceName, OK, OK: 196 : 0.52 SERVICE, app-dc-07, APP DC ServiceName, OK, OK: 196 : 0.52 SERVICE, app-dc-08, APP DC ServiceName, OK, OK: 196 : 0.52 SERVICE, app-dc-06, APP DC ServiceName, CRITICAL, Error encountered SERVICE, app-dc-06, APP DC ServiceName, OK, OK: 196 : 0.52', expected_contexts => [ "CREATE:APP_DC_ServiceName_OK_CONTEXT", "CREATE:APP_DC_ServiceName_PROBLEM_CONTEXT", "CREATE:APP_app-dc-06_ServiceName_PROBLEM_CONTEXT", "CREATE:APP_DC_ServiceName_PROBLEM_DELAY_NOTIFICATION_CONTEXT", "DELETE:APP_app-dc-06_ServiceName_PROBLEM_CONTEXT", "DELETE:APP_DC_ServiceName_PROBLEM_CONTEXT", "DELETE:APP_DC_ServiceName_PROBLEM_DELAY_NOTIFICATION_CONTEXT", ], description => "three services come up, one goes down, then comes back up", }, { text => ' SERVICE, app-dc-06, APP DC ServiceName, OK, OK: 196 : 0.52 SERVICE, app-dc-06, APP DC ServiceName, CRITICAL, Error encountered SERVICE, app-dc-06, APP DC ServiceName, CRITICAL, Error encountered SERVICE, app-dc-06, APP DC ServiceName, CRITICAL, Error encountered SERVICE, app-dc-06, APP DC ServiceName, OK, OK: 196 : 0.52', expected_contexts => [ "CREATE:APP_DC_ServiceName_OK_CONTEXT", "CREATE:APP_DC_ServiceName_PROBLEM_CONTEXT", "CREATE:APP_app-dc-06_ServiceName_PROBLEM_CONTEXT", "CREATE:APP_DC_ServiceName_PROBLEM_DELAY_NOTIFICATION_CONTEXT", "DELETE:APP_app-dc-06_ServiceName_PROBLEM_CONTEXT", "DELETE:APP_DC_ServiceName_PROBLEM_CONTEXT", "DELETE:APP_DC_ServiceName_PROBLEM_DELAY_NOTIFICATION_CONTEXT", ], description => "a service goes down for multiple checks, then comes back up", }, { text => ' SERVICE, app-dc-06, APP DC ServiceName, OK, OK: 196 : 0.52 SERVICE, app-dc-07, APP DC ServiceName, OK, OK: 196 : 0.52 SERVICE, app-dc-08, APP DC ServiceName, OK, OK: 196 : 0.52 SERVICE, app-dc-06, APP DC ServiceName, CRITICAL, Error encountered SERVICE, app-dc-07, APP DC ServiceName, CRITICAL, Error encountered SERVICE, app-dc-08, APP DC ServiceName, CRITICAL, Error encountered SERVICE, app-dc-06, APP DC ServiceName, OK, OK: 196 : 0.52 SERVICE, app-dc-07, APP DC ServiceName, OK, OK: 196 : 0.52 SERVICE, app-dc-08, APP DC ServiceName, OK, OK: 196 : 0.52', expected_contexts => [ "CREATE:APP_DC_ServiceName_OK_CONTEXT", "CREATE:APP_DC_ServiceName_PROBLEM_CONTEXT", "CREATE:APP_app-dc-06_ServiceName_PROBLEM_CONTEXT", "CREATE:APP_DC_ServiceName_PROBLEM_DELAY_NOTIFICATION_CONTEXT", "CREATE:APP_app-dc-07_ServiceName_PROBLEM_CONTEXT", "CREATE:APP_app-dc-08_ServiceName_PROBLEM_CONTEXT", "DELETE:APP_app-dc-06_ServiceName_PROBLEM_CONTEXT", "DELETE:APP_app-dc-07_ServiceName_PROBLEM_CONTEXT", "DELETE:APP_app-dc-08_ServiceName_PROBLEM_CONTEXT", "DELETE:APP_DC_ServiceName_PROBLEM_CONTEXT", "DELETE:APP_DC_ServiceName_PROBLEM_DELAY_NOTIFICATION_CONTEXT", ], description => "three go up, then all come down, then all come back up", }, { text => ' SERVICE, app-dc-06, APP DC ServiceName, CRITICAL, Error encountered SERVICE, app-dc-07, APP DC ServiceName, CRITICAL, Error encountered SERVICE, app-dc-08, APP DC ServiceName, OK, OK: 196 : 0.52 SERVICE, app-dc-09, APP DC ServiceName, OK, OK: 196 : 0.52', expected_contexts => [ "CREATE:APP_DC_ServiceName_PROBLEM_CONTEXT", "CREATE:APP_app-dc-06_ServiceName_PROBLEM_CONTEXT", "CREATE:APP_DC_ServiceName_PROBLEM_DELAY_NOTIFICATION_CONTEXT", "CREATE:APP_app-dc-07_ServiceName_PROBLEM_CONTEXT", ], description => "two services start down and two start up in the same dc", }, ); for my $entry ( @test_cases ) { #print Dumper $entry; is_deeply( invoke_sec( $entry->{'text'} ), $entry->{'expected_contexts'}, $entry->{'description'} ); } # #_* Subroutines # sub invoke_sec { my ( $input ) = @_; # sec.conf is configured to shut down when it receives this text $input .= "\n_TEST_ENDS_NOW_\n"; # command to invoke sec my $command = qq(echo "$input" | ./sec.pl -conf sec.conf -input - -log - -input_timeout=1); my @contexts; open RUN, "$command 2>&1 |" or die "Unable to execute $command: $!"; while ( my $line = ) { chomp $line; if ( $line =~ m/Creating context \'(.*)\'/ ) { my $text = "CREATE:$1"; push @contexts, $text; } elsif ( $line =~ m/Deleting context \'(.*)\'/ ) { my $text = "DELETE:$1"; push @contexts, $text; } } close RUN; # check exit status unless ( $? eq 0 ) { my $status = $? >> 8; my $signal = $? & 127; die "Error running command:$command\n\tstatus=$status\n\tsignal=$signal"; } return \@contexts; }