#!/usr/bin/perl -w use lib '.','./t','./blib/lib','../blib/lib'; # can run from here or distribution base # Before installation is performed this script should be runnable with # `perl test2.t time' which pauses `time' seconds (1..5) between pages ######################### We start with some black magic to print on failure. use Test::More; eval "use DefaultPort;"; if ($@) { plan skip_all => 'No serial port selected for use with testing'; } else { plan tests => 46; } use_ok("Device::SerialPort"); use Device::SerialPort 0.10; ######################### End of black magic. # Insert your test code below (better if it prints "ok 13" # (correspondingly "not ok 13") depending on the success of chunk 13 # of the test code): # tests start using file created by test1.t use strict; my $file = "/dev/ttyS0"; if ($SerialJunk::Makefile_Test_Port) { $file = $SerialJunk::Makefile_Test_Port; } if (exists $ENV{Makefile_Test_Port}) { $file = $ENV{Makefile_Test_Port}; } my $naptime = 0; # pause between output pages if (@ARGV) { $naptime = shift @ARGV; unless ($naptime =~ /^[0-5]$/) { die "Usage: perl test?.t [ page_delay (0..5) ] [ /dev/ttyxx ]"; } } if (@ARGV) { $file = shift @ARGV; } my $cfgfile = $file."_test.cfg"; $cfgfile =~ s/.*\///; my $fault = 0; my $ob; my $pass; my $fail; my $in; my $in2; my @opts; my $out; my $blk; my $err; my $e; my $tick; my $tock; my @necessary_param = Device::SerialPort->set_test_mode_active(1); sub is_ok { local $Test::Builder::Level = $Test::Builder::Level + 1; return ok(shift); } sub is_zero { local $Test::Builder::Level = $Test::Builder::Level + 1; return ok(shift == 0); } sub is_bad { local $Test::Builder::Level = $Test::Builder::Level + 1; return ok(!shift); } # 2: Constructor unless (is_ok ($ob = Device::SerialPort->start ($cfgfile))) { printf "could not open port from $cfgfile\n"; exit 1; # next test would die at runtime without $ob } #### 3 - 11: Check Port Capabilities Match Save is_ok ($ob->baudrate == 9600); # 3 is_ok ($ob->parity eq "none"); # 4 is_ok ($ob->databits == 8); # 5 is_ok ($ob->stopbits == 1); # 6 is_ok ($ob->handshake eq "none"); # 7 is_ok ($ob->read_const_time == 0); # 8 is_ok ($ob->read_char_time == 0); # 9 is_ok ($ob->alias eq "TestPort"); # 10 is_ok ($ob->parity_enable == 0); # 11 #### 12 - 18: Application Parameter Defaults is_ok ($ob->devicetype eq 'none'); # 12 is_ok ($ob->hostname eq 'localhost'); # 13 is_zero ($ob->hostaddr); # 14 is_ok ($ob->datatype eq 'raw'); # 15 is_ok ($ob->cfg_param_1 eq 'none'); # 16 is_ok ($ob->cfg_param_2 eq 'none'); # 17 is_ok ($ob->cfg_param_3 eq 'none'); # 18 # 19 - 21: "Instant" return for read_xx_time=0 $tick=$ob->get_tick_count; ($in, $in2) = $ob->read(10); $tock=$ob->get_tick_count; is_zero ($in); # 19 is_bad ($in2); # 20 $out=$tock - $tick; is_ok ($out < 150); # 21 print "<0> elapsed time=$out\n"; if ($naptime) { print "++++ page break\n"; sleep $naptime; } print "Beginning Timed Tests at 2-5 Seconds per Set\n"; # 22 - 25: 2 Second Constant Timeout is_ok (2000 == $ob->read_const_time(2000)); # 22 $tick=$ob->get_tick_count; ($in, $in2) = $ob->read(10); $tock=$ob->get_tick_count; is_zero ($in); # 23 is_bad ($in2); # 24 $out=$tock - $tick; is_bad (($out < 1800) or ($out > 2400)); # 25 print "<2000> elapsed time=$out\n"; # 26 - 29: 4 Second Timeout Constant+Character is_ok (100 == $ob->read_char_time(100)); # 26 $tick=$ob->get_tick_count; ($in, $in2) = $ob->read(20); $tock=$ob->get_tick_count; is_zero ($in); # 27 is_bad ($in2); # 28 $out=$tock - $tick; is_bad (($out < 3800) or ($out > 4400)); # 29 print "<4000> elapsed time=$out\n"; # 30 - 34: 3 Second Character Timeout is_zero ($ob->read_const_time(0)); # 30 $tick=$ob->get_tick_count; ($in, $in2) = $ob->read(30); $tock=$ob->get_tick_count; is_zero ($in); # 31 is_bad ($in2); # 32 $out=$tock - $tick; is_bad (($out < 2800) or ($out > 3400)); # 33 print "<3000> elapsed time=$out\n"; is_zero ($ob->read_char_time(0)); # 34 is_ok ("rts" eq $ob->handshake("rts")); # 35 is_ok ($ob->purge_rx); # 36 is_ok ($ob->purge_all); # 37 is_ok ($ob->purge_tx); # 38 if ($naptime) { print "++++ page break\n"; sleep $naptime; } is_ok(1 == $ob->user_msg); # 39 is_zero(scalar $ob->user_msg(0)); # 40 is_ok(1 == $ob->user_msg(1)); # 41 is_ok(1 == $ob->error_msg); # 42 is_zero(scalar $ob->error_msg(0)); # 43 is_ok(1 == $ob->error_msg(1)); # 44 undef $ob; # 45 - 46: Reopen tests (unconfirmed) $ob->close via undef sleep 1; unless (is_ok ($ob = Device::SerialPort->start ($cfgfile))) { printf "could not reopen port from $cfgfile\n"; exit 1; # next test would die at runtime without $ob } is_ok(1 == $ob->close); # 46 undef $ob;