FSM-Basic
view release on metacpan or search on metacpan
examples/FSM_fake_bash.json view on Meta::CPAN
"cat": "test.txt"
},
"test1": {
"catRAND": "test.txt test.txt test1.txt"
},
"test2": {
"catSEQ": "test.txt test1.txt test2.txt",
"catSEQ_idxf": "test_state"
},
"mem": {
"do": "my ( $tot,$avail) = (split /\n/ ,do { local( @ARGV, $/ ) = \"/proc/meminfo\" ; <> })[0,2];$tot =~ s/\\D*//g; $avail =~ s/\\D*//g; sprintf \"%0.2f%%\\n\",(100*($tot-$avail)/$tot);"
},
"mem1": {
"exec": "/usr/bin/perl -E 'my ( $tot,$avail) = (split /\\n/ ,do { local( @ARGV, $/ ) = \"/proc/meminfo\" ; <> })[0,2];$tot =~ s/\\D*//g; $avail =~ s/\\D*//g; printf \"%0.2f%%\\n\",(100*($tot-$avail)/$tot);'"
},
"df": {
"exec": "/bin/df"
},
"exit": {
"final": 0,
"matching": "close"
},
"h(elp)?|\\?": {
"output": "enable\nexit\nmeminfo\ndf\n__PROMPT__"
},
"meminfo": {
"do": "do { local( @ARGV, $/ ) = \"/proc/meminfo\" ; <> }"
}
},
"not_matching": "prompt",
"not_matching_info": "% Unknown command or computer name, or unable to find computer address",
"output": "__PROMPT__"
},
"prompt_enable": {
"expect": {
"default": {
"final": 0,
examples/FSM_telnet_cisco_switch.json view on Meta::CPAN
"shutdown": {
"final": 2
},
"prompt": {
"expect": {
"(?^:(?^:^en((a)|(ab)|(abl)|(able))?$))": {
"final": 0,
"matching": "prompt_enable"
},
"df": {
"do": "my ( $tot,$avail) = (split /\\n/ ,do { local( @ARGV, $/ ) = \"/proc/meminfo\" ; <> })[0,2];$tot =~ s/\\D*//g; $avail =~ s/\\D*//g; sprintf \"%0.2f%%\\n\",(100*($tot-$avail)/$tot); "
},
"exit": {
"final": 0,
"matching": "close"
},
"h(elp)?|\\?": {
"output": "enable\nexit\nmeminfo\ndf\n__PROMPT__"
},
"meminfo": {
"do": "do { local( @ARGV, $/ ) = \"/proc/meminfo\" ; <> }"
}
},
"not_matching": "prompt",
"not_matching_info": "% Unknown command or computer name, or unable to find computer address",
"output": "__PROMPT__"
},
"prompt_enable": {
"expect": {
"default": {
"final": 0,
examples/fake_bash.pl view on Meta::CPAN
$prompt = $1;
}
$out = subst($out);
print $out;
$term->write_history($history_file);
last if $final;
}
sub slurp_file {
my ( $file, $chomp ) = @_;
my $data = do { local ( @ARGV, $/ ) = $file; <> };
chomp $data if $chomp;
return wantarray ? split /\n/, $data : $data;
}
sub subst {
my ($data) = @_;
print $log_fd "DATA=$data\n" if $log_level > 0;
while ( $data =~ /(__DATE(\((.*)\))?([+-]?\d+)?__)/mg ) {
#__DATE5__
#__DATE+5__
lib/FSM/Basic.pm view on Meta::CPAN
},
'close' => {'final' => 1},
'prompt' => {
'expect' => {
'not_matching' => 'prompt',
'exit' => {
'matching' => 'close',
'final' => 0
},
'meminfo' => {'do' => 'do { local( @ARGV, $/ ) = "/proc/meminfo" ; <> }'},
'h(elp)?|\\?' => {
'output' => 'exit
meminfo
mem_usage
User> '
},
'mem_usage' => {'do' => 'my ( $tot,$avail) = (split /\\n/ ,do { local( @ARGV, $/ ) = "/proc/meminfo" ; <> })[0,2];$tot =~ s/\\D*//g; $avail =~ s/\\D*//g; sprintf "%0.2f%%\\n",(100*($tot-$avail)/$tot); '},
},
'not_matching_info' => '% Unknown command or computer name, or unable to find computer address',
'output' => 'User> '
}
);
The keys are the states name.
"expect" contain a sub HASH where the keys are word or REGEX expected as input
lib/FSM/Basic.pm view on Meta::CPAN
'prompt' => {
'expect' => {
'not_matching' => 'prompt',
'exit' => {
'matching' => 'close',
'final' => 0
},
"read" => {'cat' => 'file.txt'},
"read_random" => {'catRAND' => 'file1.txt file2.txt file3.txt'},
"read_seq" => {'catSEQ' => 'file1.txt file2.txt file3.txt', 'catSEQ_idx' => 'catSEQ_status'},
'meminfo' => {'do' => 'do { local( @ARGV, $/ ) = "/proc/meminfo" ; <> }'},
'mem' => {
'do' => "my ( $tot,$avail) = (split /\n/ ,do { local( @ARGV, $/ ) = \"/proc/meminfo\" ; <> })[0,2];$tot =~ s/\\D*//g; $avail =~ s/\\D*//g; sprintf \"%0.2f%%\\n\",(100*($tot-$avail)/$tot);"
},
'h(elp)?|\\?' => {
'output' => 'exit
read
read_random
read_seq
meminfo
mem_usage
mem
User> '
},
'mem_usage' => {'do' => 'my ( $tot,$avail) = (split /\\n/ ,do { local( @ARGV, $/ ) = "/proc/meminfo" ; <> })[0,2];$tot =~ s/\\D*//g; $avail =~ s/\\D*//g; sprintf "%0.2f%%\\n",(100*($tot-$avail)/$tot); '},
},
'not_matching_info' => '% Unknown command or computer name, or unable to find computer address',
'output' => 'User> '
}
);
my $history_file = glob( '/tmp/fsm.history' );
my $prompt = '> ';
my $line;
my $final = 0;
my $term = new Term::ReadLine 'bash';
},
'cat' => { 'cat' => './t/test_cat.txt',
'final' => 0
},
'help' => {
'output' => 'enable
exit
mem_usage
Switch> '
},
'mem_usage' => {'do' => 'my ( $tot,$avail) = (split /\\n/ ,do { local( @ARGV, $/ ) = "/proc/meminfo" ; <> })[0,2];$tot =~ s/\\D*//g; $avail =~ s/\\D*//g; sprintf "%0.2f %%\\n",(100*($tot-$avail)/$tot); '},
},
'read' => {'cat' => 'test_cat.txt'},
'not_matching_info' => '% Unknown command or computer name, or unable to find computer address',
'output' => 'Switch> '
},
'close' => {'final' => 1},
);
my $fsm = FSM::Basic->new( \%states, 'accept' );
t/01-final.t view on Meta::CPAN
'exit' => {
'matching' => 'close',
'final' => 0
},
'help' => {
'output' => 'enable
exit
mem_usage
Switch> '
},
'mem_usage' => {'do' => 'my ( $tot,$avail) = (split /\\n/ ,do { local( @ARGV, $/ ) = "/proc/meminfo" ; <> })[0,2];$tot =~ s/\\D*//g; $avail =~ s/\\D*//g; sprintf "%0.2f %%\\n",(100*($tot-$avail)/$tot); '},
},
'not_matching_info' => '% Unknown command or computer name, or unable to find computer address',
'output' => 'Switch> '
},
'close' => {
'final' => 1
},
);
my @ins = qw( default exit);
t/01-matching.t view on Meta::CPAN
'exit' => {
'matching' => 'close',
'final' => 0
},
'help' => {
'output' => 'enable
exit
mem_usage
Switch> '
},
'mem_usage' => {'do' => 'my ( $tot,$avail) = (split /\\n/ ,do { local( @ARGV, $/ ) = "/proc/meminfo" ; <> })[0,2];$tot =~ s/\\D*//g; $avail =~ s/\\D*//g; sprintf "%0.2f %%\\n",(100*($tot-$avail)/$tot); '},
},
'not_matching_info' => '% Unknown command or computer name, or unable to find computer address',
'output' => 'Switch> '
},
'close' => {'final' => 1},
);
my @ins = qw( default);
my $fsm = FSM::Basic->new( \%states, 'accept' );
my $final = 0;
t/01-notmatching.t view on Meta::CPAN
'exit' => {
'matching' => 'close',
'final' => 0
},
'help' => {
'output' => 'enable
exit
mem_usage
Switch> '
},
'mem_usage' => {'do' => 'my ( $tot,$avail) = (split /\\n/ ,do { local( @ARGV, $/ ) = "/proc/meminfo" ; <> })[0,2];$tot =~ s/\\D*//g; $avail =~ s/\\D*//g; sprintf "%0.2f %%\\n",(100*($tot-$avail)/$tot); '},
},
'not_matching_info' => '% Unknown command or computer name, or unable to find computer address',
'output' => 'Switch> '
},
'close' => {'final' => 1},
);
my @ins = qw( defaul);
my $fsm = FSM::Basic->new( \%states, 'accept' );
my $final = 0;
t/01-toomuch_notmatching.t view on Meta::CPAN
'exit' => {
'matching' => 'close',
'final' => 0
},
'help' => {
'output' => 'enable
exit
mem_usage
Switch> '
},
'mem_usage' => {'do' => 'my ( $tot,$avail) = (split /\\n/ ,do { local( @ARGV, $/ ) = "/proc/meminfo" ; <> })[0,2];$tot =~ s/\\D*//g; $avail =~ s/\\D*//g; sprintf "%0.2f %%\\n",(100*($tot-$avail)/$tot); '},
},
'not_matching_info' => '% Unknown command or computer name, or unable to find computer address',
'output' => 'Switch> '
},
'close' => {'final' => 1},
);
my @ins = qw( defaul defau def);
my $fsm = FSM::Basic->new( \%states, 'accept' );
my $final = 0;
( run in 0.626 second using v1.01-cache-2.11-cpan-49f99fa48dc )