blob: ee55361e8a7c56da8e1852f74a3b3447394bc701 [file] [log] [blame]
#!/usr/bin/env perl -w
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
use Test::More qw(no_plan);
use Test::Exception;
require 'utils.pm';
BEGIN {use_ok('qpid_proton');}
require_ok('qpid_proton');
# Create a new message.
my $message = qpid::proton::Message->new();
isa_ok($message, 'qpid::proton::Message');
# Verify the message mutators.
# durable
$message->set_durable(1);
ok($message->get_durable(), 'Durable can be set');
$message->set_durable(0);
ok(!$message->get_durable(), 'Durable can be unset');
# priority
my $priority = int(rand(256) + 1);
dies_ok(sub {$message->set_priority('abc')}, 'Priority must be numeric');
dies_ok(sub {$message->set_priority(0 - $priority)}, 'Priority cannot be negative');
$message->set_priority(0);
ok($message->get_priority() == 0, 'Priority can be zero');
$message->set_priority($priority);
ok($message->get_priority() == $priority, 'Priority can be positive');
# Time to live
my $ttl = int(rand(65535) + 1);
dies_ok(sub {$message->set_ttl('def')}, 'TTL must be numeric');
dies_ok(sub {$message->set_ttl(0 - $ttl)}, 'TTL cannot be negative');
$message->set_ttl(0);
ok($message->get_ttl() == 0, 'TTL can be zero');
$message->set_ttl($ttl);
ok($message->get_ttl() == $ttl, 'TTL can be postive');
# first acquirer
$message->set_first_acquirer(1);
ok($message->get_first_acquirer(), 'First acquirer can be set');
$message->set_first_acquirer(0);
ok(!$message->get_first_acquirer(), 'First acquirer can be unset');
# delivery count
my $delivery_count = int(rand(65535) + 1);
dies_ok(sub {$message->set_delivery_count("abc");},
'Messages cannot have non-numeric delivery counts');
dies_ok(sub {$message->set_delivery_count(0 - $delivery_count)},
'Messages cannot have negative delivery counts');
$message->set_delivery_count(0);
ok($message->get_delivery_count() == 0, 'Delivery count can be zero');
$message->set_delivery_count($delivery_count);
ok ($message->get_delivery_count() == $delivery_count, 'Delivery count can be postiive');
# message id
my $message_id = random_string(16);
dies_ok (sub {$message->set_id(undef);},
'Message id cannot be null');
$message->set_id($message_id);
ok($message->get_id(), 'Message id was set');
ok($message->get_id() eq $message_id, 'Message id was set correctly');
# user id
my $user_id = random_string(16);
dies_ok (sub {$message->set_user_id(undef);},
'User id cannot be null');
$message->set_user_id($user_id);
ok($message->get_user_id(), 'User id was set');
ok($message->get_user_id() eq $user_id, 'User id was set correctly');
# address
my $address = "amqp://0.0.0.0";
$message->set_address(undef);
ok(!$message->get_address(), 'Address can be null');
$message->set_address($address);
ok($message->get_address() eq $address, 'Address is set correctly');
# subject
my $subject = random_string(25);
$message->set_subject(undef);
ok(!$message->get_subject(), 'Subject can be null');
$message->set_subject($subject);
ok($message->get_subject() eq $subject, 'Subject was set correctly');
# reply to
$reply_to = "amqp://0.0.0.0";
$message->set_reply_to(undef);
ok(!$message->get_reply_to(), "Reply to can be null");
$message->set_reply_to($reply_to);
ok($message->get_reply_to() eq $reply_to, 'Reply to was set correctly');
# correlation id
my $correlation_id = random_string(16);
$message->set_correlation_id(undef);
ok(!$message->get_correlation_id(), 'Correlation id can be null');
$message->set_correlation_id($correlation_id);
ok($message->get_correlation_id() eq $correlation_id,
'Correlation id was set correctly');
# content type
my $content_type = "text/" . random_string(12);
$message->set_content_type(undef);
ok(!$message->get_content_type(), 'Content type can be null');
$message->set_content_type($content_type);
ok($message->get_content_type() eq $content_type,
'Content type was set correctly');
# content encoding
my $content_encoding = random_string(16);
$message->set_content_encoding(undef);
ok(!$message->get_content_encoding(), 'Content encoding can be null');
$message->set_content_encoding($content_encoding);
ok($message->get_content_encoding() eq $content_encoding,
'Content encoding was set correctly');
# expiry time
my $expiry_time = random_timestamp();
dies_ok(sub {$message->set_expiry_time(undef);},
'Expiry cannot be null');
dies_ok(sub {$message->set_expiry_time(0 - $expiry_time);},
'Expiry cannot be negative');
$message->set_expiry_time(0);
ok($message->get_expiry_time() == 0,
'Expiry time can be zero');
$message->set_expiry_time($expiry_time);
ok($message->get_expiry_time() == int($expiry_time),
'Expiry time was set correctly');
# creation time
my $creation_time = random_timestamp();
dies_ok(sub {$message->set_creation_time(undef);},
'Creation time cannot be null');
dies_ok(sub {$message->set_creation_time(0 - $creation_time);},
'Creation time cannot be negative');
$message->set_creation_time($creation_time);
ok($message->get_creation_time() == $creation_time,
'Creation time was set correctly');
# group id
my $group_id = random_string(16);
$message->set_group_id(undef);
ok(!$message->get_group_id(), 'Group id can be null');
$message->set_group_id($group_id);
ok($message->get_group_id() eq $group_id,
'Group id was set correctly');
# group sequence
my $group_sequence = rand(2**31) + 1;
dies_ok(sub {$message->set_group_sequence(undef);},
'Sequence id cannot be null');
$message->set_group_sequence(0 - $group_sequence);
ok($message->get_group_sequence() == int(0 - $group_sequence),
'Group sequence can be negative');
$message->set_group_sequence(0);
ok($message->get_group_sequence() == 0,
'Group sequence can be zero');
$message->set_group_sequence($group_sequence);
ok($message->get_group_sequence() == int($group_sequence),
'Group sequence can be positive');
# reply to group id
my $reply_to_group_id = random_string(16);
$message->set_reply_to_group_id(undef);
ok(!$message->get_reply_to_group_id(), 'Reply-to group id can be null');
$message->set_reply_to_group_id($reply_to_group_id);
ok($message->get_reply_to_group_id() eq $reply_to_group_id,
'Reply-to group id was set correctly');
# format
my @formats = ($qpid::proton::Message::DATA_FORMAT,
$qpid::proton::Message::TEXT_FORMAT,
$qpid::proton::Message::AMQP_FORMAT,
$qpid::proton::Message::JSON_FORMAT);
dies_ok(sub {$message->set_format(undef);}, 'Format cannot be null');
foreach (@formats)
{
my $format = $_;
$message->set_format($format);
ok($message->get_format() == $format,
'Format was set correctly');
}
# reset the format
$message->set_format($qpid::proton::Message::TEXT_FORMAT);
# content
my $content_size = rand(512);
my $content = random_string($content_size);
$message->set_content(undef);
ok(!$message->get_content(), 'Content can be null');
$message->set_content($content);
ok($message->get_content() eq $content,
'Content was saved correctly');