# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl 3.t'
#########################
use Test::More tests => 26;
#use Test::More qw(no_plan);
BEGIN { use_ok('Net::BEEP::Lite::Channel');
use_ok('Net::BEEP::Lite::Message'); };
#########################
# Testing Net::BEEP::Lite::Channel
# the constructor:
my $channel = Net::BEEP::Lite::Channel->new;
ok(defined $channel, 'constructor works');
isa_ok($channel, 'Net::BEEP::Lite::Channel');
# a fake profile
my $fake_profile = {};
# create a real channel
$channel = new Net::BEEP::Lite::Channel(Number => 1,
Window => 1024,
Profile => $fake_profile);
# make sure the basic accessors work
is($channel->profile(), $fake_profile, 'channel->profile()');
is($channel->seqno(), 0, 'channel->seqno()');
is($channel->msgno(), 0, 'channel->msgno()');
is($channel->msgno(11), 11, 'channel->msgno(val)');
is($channel->next_msgno(), 11, 'channel->next_msgno() 1');
is($channel->next_msgno(), 12, 'channel->next_msgno() 2');
is($channel->local_window(), 1024, 'channel->local_window()');
is($channel->local_window(2048), 2048, 'channel->local_window(val)');
is($channel->remote_window(), 4096, 'channel->remote_window() default');
is($channel->remote_window(3990), 3990, 'channel->remote_window(val)');
is($channel->number(), 1, 'channel->number');
# sequence numbers
$channel->update_seqno(112);
is($channel->seqno(), 112, "channel->update_seqno() 1");
$channel->update_seqno(2);
is($channel->seqno(), 114, "channel->update_seqno() 2");
# rollovers
$channel->msgno(2147483646);
is($channel->next_msgno(), 2147483646, 'channel->msgno rollover 1');
is($channel->next_msgno(), 2147483647, 'channel->msgno rollover 2');
is($channel->next_msgno(), 0, 'channel->msgno rollover 3');
$channel->{seqno} = 4294967295;
is($channel->seqno(), 4294967295, 'channel->seqno() rollover 1');
$channel->update_seqno(1);
is($channel->seqno(), 0, 'channel->seqno() rollover 2');
$channel->{seqno} = 4294967290;
$channel->update_seqno(10);
is($channel->seqno(), 4, 'channel->seqno() rollover 3');
# The message building slots.
# normal messages.
my $large_content = join("", 1..150) . "\n";
my $msg = new Net::BEEP::Lite::Message(Type => 'RPY',
Msgno => 12,
Channel => 1,
Content => $large_content);
my $large_payload = $msg->payload();
my $frame1 = $msg->next_frame(0, 256);
my $frame2 = $msg->next_frame(256, 256);
$channel->message_add_frame($frame1);
$channel->message_add_frame($frame2);
my $ch_msg = $channel->message();
# force content conversion.
$ch_msg->content();
# force internal frame state to known values.
$msg->reset_frames();
# note: this is pretty fragile. We might be better off testing all of
# the known subcomponents here.
is_deeply($ch_msg, $msg, 'constructed message same as orig.');
$channel->clear_message();
is($channel->message(), undef, 'channel->clear_message()');
# ANS messages.
$msg = new Net::BEEP::Lite::Message(Type => 'ANS',
Msgno => 13,
Ansno => 1,
Channel => 1,
Content => $large_content);
$frame1 = $msg->next_frame(0, 256);
$frame2 = $msg->next_frame(256, 256);
$channel->ans_message_add_frame($frame1);
$channel->ans_message_add_frame($frame2);
$ch_msg = $channel->ans_message($frame1->ansno());
$ch_msg->content();
$msg->reset_frames();
is_deeply($ch_msg, $msg, 'constructed ans message same as orig.');