use strict;
use warnings;
use 5.010;
#################################################
# #
# This test contains a number of checks for the #
# function MCP::State::is_msg_valid() #
# #
#################################################
use Test::More;
use Tapper::Schema::TestTools;
use Test::Fixture::DBIC::Schema;
# -----------------------------------------------------------------------------------------------------------------
construct_fixture( schema => testrundb_schema, fixture => 't/fixtures/testrundb/testrun_with_preconditions.yml' );
# -----------------------------------------------------------------------------------------------------------------
BEGIN{use_ok('Tapper::MCP::State')}
my $state = Tapper::MCP::State->new(23);
my $timeout_span = 1;
sub initial_state
{
{'current_state' => 'started',
'install' => {
'timeout_install_span' => '7200',
'timeout_boot_span' => $timeout_span,
'timeout_current_date' => undef
},
'prcs' => [
{
'timeout_boot_span' => $timeout_span,
'timeout_current_date' => undef,
'results' => [],
'current_state' => 'preload'
},
{
'timeout_boot_span' => $timeout_span,
'timeout_current_date' => undef,
'results' => [],
'current_state' => 'preload'
},
{
'timeout_boot_span' => $timeout_span,
'timeout_current_date' => undef,
'results' => [],
'current_state' => 'preload'
},
{
'timeout_boot_span' => $timeout_span,
'timeout_current_date' => undef,
'results' => [],
'current_state' => 'preload'
}
],
'results' => []
}
}
my ($retval, $timeout);
$retval = $state->state_init(initial_state());
is($retval, 0, 'Init succeeded');
$retval = $state->is_msg_valid({state => 'takeoff'});
is($retval, 1, 'Takeoff message valid');
$state->state_details->current_state('reboot_install');
isnt($state->testrun_finished, 1, 'Set current state to reboot-install');
$retval = $state->is_msg_valid({state => 'start-install'});
is($retval, 1, 'Start-install message valid');
$state->state_details->current_state('testing');
isnt($state->testrun_finished, 1, 'Set current state to testing');
$retval = $state->is_msg_valid({state => 'start-guest', prc_number => 1});
is($retval, 1, 'Message valid in last element of set of states');
$retval = $state->is_msg_valid({state => 'end-install'});
is($retval, 0, 'Invalid message detected');
ok($state->testrun_finished, 'Invalid message/testrun finished');
$retval = $state->is_msg_valid({state => 'end-testprogram', prc_number => 0, testprogram => 1});
is($retval, 0, 'Out of order testprogram detected');
is($state->state_details->prc_state(0), 'finished', 'PRC finished after out-of-order message');
done_testing();