ruby/spec/message_spec.rb (478 lines of code) (raw):
# 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.
require "spec_helper"
module Qpid
module Proton
describe "A message" do
before (:each) do
@message = Qpid::Proton::Message.new
end
it "can be created" do
_(@message).wont_be_nil
end
it "can be cleared" do
subject = random_string(16)
@message.subject = subject
_(@message.subject).must_equal(subject)
@message.clear
_(@message.subject).wont_equal(subject)
end
it "can be durable" do
@message.durable = true
_(@message.durable).must_equal(true)
@message.durable = false
_(@message.durable).must_equal(false)
end
it "raises an error when setting durable to nil" do
_{
@message.durable = nil
}.must_raise(TypeError)
end
it "raises an error when setting the priority to nil" do
_{
@message.priority = nil
}.must_raise(TypeError)
end
it "raises an error when setting the priority to a non-number" do
_{
@message.priority = "abck"
}.must_raise(TypeError)
end
it "sets the priority to the integer portion when a float" do
priority = rand(100) / 10
@message.priority = priority
_(@message.priority).must_equal(priority.floor)
end
it "rejects a priority with too large of a value" do
_{
@message.priority = (rand(100) + 256)
}.must_raise(RangeError)
end
it "rejects a negative priority" do
_{
@message.priority = (0 - (rand(255) + 1))
}.must_raise(RangeError)
end
it "has a priority" do
priority = rand(256)
@message.priority = priority
_(@message.priority).must_equal(priority)
end
it "raises an error when setting the time-to-live to nil" do
_{
@message.ttl = nil
}.must_raise(TypeError)
end
it "raises an error when setting the time-to-live to a non-number" do
_{
@message.ttl = random_string(5)
}.must_raise(TypeError)
end
it "sets the time-to-live to the integer portion when a float" do
ttl = (rand(32767) / 10)
@message.ttl = ttl
_(@message.ttl).must_equal(ttl.floor)
end
it "raises an error when the time-to-live is negative" do
_{
@message.ttl = (0 - (rand(1000) + 1))
}.must_raise(RangeError)
end
it "has a time-to-live" do
ttl = rand(32767)
@message.ttl = ttl
_(@message.ttl).must_equal(ttl)
end
it "raises an error when setting first acquirer to nil" do
_{
@message.first_acquirer = nil
}.must_raise(TypeError)
end
it "raises and error when setting first acquirer to a non-boolean" do
_{
@message.first_acquirer = random_string(16)
}.must_raise(TypeError)
end
it "has a first acquirer" do
@message.first_acquirer = true
_(@message.first_acquirer?).must_equal(true)
@message.first_acquirer = false
_(@message.first_acquirer?).must_equal(false)
end
it "raises an error on a nil delivery count" do
_{
@message.delivery_count = nil
}.must_raise(::ArgumentError)
end
it "raises an error on a negative delivery count" do
_{
@message.delivery_count = -1
}.must_raise(RangeError)
end
it "raises an error on a non-numeric delivery count" do
_{
@message.delivery_count = "farkle"
}.must_raise(::ArgumentError)
end
it "converts a floating point delivery count to its integer portion" do
count = rand(255) / 10.0
@message.delivery_count = count
_(@message.delivery_count).must_equal(count.floor)
end
it "has a delivery count" do
count = rand(255)
@message.delivery_count = count
_(@message.delivery_count).must_equal(count)
end
it "allows setting a nil id" do
@message.id = nil
_(@message.id).must_be_nil
end
it "has an id" do
id = random_string(16)
@message.id = id
_(@message.id).must_equal(id)
end
it "allows setting a nil user id" do
@message.user_id = nil
_(@message.user_id).must_equal("")
end
it "has a user id" do
id = random_string(16)
@message.user_id = id
_(@message.user_id).must_equal(id)
end
it "allows setting a nil address" do
@message.address = nil
_(@message.address).must_be_nil
end
it "has an address" do
address = "//0.0.0.0/#{random_string(16)}"
@message.address = address
_(@message.address).must_equal(address)
end
it "allows setting a nil subject" do
@message.subject = nil
_(@message.subject).must_be_nil
end
it "has a subject" do
subject = random_string(50)
@message.subject = subject
_(@message.subject).must_equal(subject)
end
it "will allow a nil reply-to address" do
@message.reply_to = nil
_(@message.reply_to).must_be_nil
end
it "has a reply-to address" do
address = "//0.0.0.0/#{random_string(16)}"
@message.reply_to = address
_(@message.reply_to).must_equal(address)
end
it "will allow a nil correlation id" do
@message.correlation_id = nil
_(@message.correlation_id).must_be_nil
end
it "has a correlation id" do
id = random_string(25)
@message.correlation_id = id
_(@message.correlation_id).must_equal(id)
end
it "will allow a nil content type" do
@message.content_type = nil
_(@message.content_type).must_be_nil
end
it "will allow an empty content type" do
@message.content_type = ""
_(@message.content_type).must_equal("")
end
it "has a content type" do
content_type = random_string(32)
@message.content_type = content_type
_(@message.content_type).must_equal(content_type)
end
it "can have nil content encoding" do
@message.content_encoding = nil
_(@message.content_encoding).must_be_nil
end
it "has a content encoding" do
encoding = "#{random_string(8)}/#{random_string(8)}"
@message.content_encoding = encoding
_(@message.content_encoding).must_equal(encoding)
end
it "raises an error on a nil expiry time" do
_{
@message.expires = nil
}.must_raise(TypeError)
end
it "raises an error on a negative expiry time" do
_{
@message.expires = (0-(rand(65535)))
}.must_raise(::ArgumentError)
end
it "can have a zero expiry time" do
@message.expires = 0
_(@message.expires).must_equal(0)
end
it "has an expiry time" do
time = rand(65535)
@message.expires = time
_(@message.expires).must_equal(time)
end
it "raises an error on a nil creation time" do
_{
@message.creation_time = nil
}.must_raise(TypeError)
end
it "raises an error on a negative creation time" do
_{
@message.creation_time = (0 - rand(65535))
}.must_raise(::ArgumentError)
end
it "can have a zero creation time" do
@message.creation_time = 0
_(@message.creation_time).must_equal(0)
end
it "has a creation time" do
time = rand(65535)
@message.creation_time = time
_(@message.creation_time).must_equal(time)
end
it "can have a nil group id" do
@message.group_id = nil
_(@message.group_id).must_be_nil
end
it "can have an empty group id" do
@message.group_id = ""
_(@message.group_id).must_equal("")
end
it "has a group id" do
id = random_string(16)
@message.group_id = id
_(@message.group_id).must_equal(id)
end
it "raises an error on a nil group sequence" do
_{
@message.group_sequence = nil
}.must_raise(TypeError)
end
it "can have a zero group sequence" do
@message.group_sequence = 0
_(@message.group_sequence).must_equal(0)
end
it "has a group sequence" do
id = rand(4294967295)
@message.group_sequence = id
_(@message.group_sequence).must_equal(id)
end
it "can have a nil reply-to group id" do
@message.reply_to_group_id = nil
_(@message.reply_to_group_id).must_be_nil
end
it "can have an empty reply-to group id" do
@message.reply_to_group_id = ""
_(@message.reply_to_group_id).must_equal("")
end
it "has a reply-to group id" do
id = random_string(16)
@message.reply_to_group_id = id
_(@message.reply_to_group_id).must_equal(id)
end
it "has properties" do
_(@message).must_respond_to(:properties)
_(@message).must_respond_to(:properties=)
_(@message).must_respond_to(:[])
_(@message).must_respond_to(:[]=)
_(@message.properties).must_be_kind_of({}.class)
end
it "can replace the set of properties" do
values = random_hash(128)
@message.properties = values.clone
_(@message.properties).must_equal(values)
end
it "can set properties" do
name = random_string(16)
value = random_string(128)
@message[name] = value
_(@message[name]).must_equal(value)
end
it "can update properties" do
name = random_string(16)
value = random_string(128)
@message[name] = value
_(@message[name]).must_equal(value)
value = random_string(128)
@message[name] = value
_(@message[name]).must_equal(value)
end
it "can hold a null property" do
name = random_string(16)
value = random_string(128)
@message[name] = value
_(@message[name]).must_equal(value)
@message[name] = nil
_(@message[name]).must_be_nil
end
it "can delete a property" do
name = random_string(16)
value = random_string(128)
@message[name] = value
_(@message[name]).must_equal(value)
@message.delete_property(name)
_(@message.properties.keys).wont_include(name)
end
it "has no properties after being cleared" do
name = random_string(16)
value = random_string(128)
@message[name] = value
_(@message[name]).must_equal(value)
@message.clear
_(@message.properties).must_be_empty
end
it "has instructions" do
_(@message).must_respond_to(:instructions)
_(@message).must_respond_to("instructions=".to_sym)
end
it "can set an instruction" do
name = random_string(16)
value = random_string(128)
@message.instructions[name] = value
_(@message.instructions[name]).must_equal(value)
end
it "can update an instruction" do
name = random_string(16)
value = random_string(128)
@message.instructions[name] = value
_(@message.instructions[name]).must_equal(value)
value = random_string(128)
@message.instructions[name] = value
_(@message.instructions[name]).must_equal(value)
end
it "can delete the instructions" do
name = random_string(16)
value = random_string(128)
@message.instructions[name] = value
_(@message.instructions).wont_be_empty
@message.instructions = nil
_(@message.instructions).must_be_nil
end
it "can replace the instructions" do
values = random_hash(rand(128) + 1)
@message.instructions = values.clone
_(@message.instructions).must_equal(values)
values = random_hash(rand(64) + 1)
@message.instructions = values.clone
_(@message.instructions).must_equal(values)
end
it "can delete the set of instructions" do
values = random_hash(rand(128) + 1)
@message.instructions = values.clone
_(@message.instructions).must_equal(values)
@message.instructions = nil
_(@message.instructions).must_be_nil
end
it "has no instructions after being cleared" do
value = random_hash(128)
@message.instructions = value.clone
_(@message.instructions).must_equal(value)
@message.clear
_(@message.instructions).must_be_empty
end
it "has annotations" do
_(@message).must_respond_to(:annotations)
_(@message).must_respond_to(:annotations=)
end
it "can set an annotation" do
name = random_hash(32)
value = random_hash(256)
@message.annotations[name] = value.clone
_(@message.annotations[name]).must_equal(value)
end
it "can update an annotation" do
name = random_hash(32)
value = random_hash(256)
@message.annotations[name] = value.clone
_(@message.annotations[name]).must_equal(value)
value = random_hash(128)
@message.annotations[name] = value.clone
_(@message.annotations[name]).must_equal(value)
end
it "can delete an annotation" do
name = random_hash(32)
value = random_hash(256)
@message.annotations[name] = value.clone
_(@message.annotations[name]).must_equal(value)
@message.annotations[name] = nil
_(@message.annotations[name]).must_be_nil
end
it "can replace all annotations" do
values = random_hash(rand(128) + 1)
@message.annotations = values.clone
_(@message.annotations).must_equal(values)
values = random_hash(rand(64) + 1)
@message.annotations = values.clone
_(@message.annotations).must_equal(values)
end
it "can delete the set of annotations" do
value = random_hash(rand(128) + 1)
@message.annotations = value.clone
_(@message.annotations).must_equal(value)
@message.annotations = nil
_(@message.annotations).must_be_nil
end
it "has no annotations after being cleared" do
value = random_hash(16)
@message.annotations = value
_(@message.annotations).must_equal(value)
@message.clear
_(@message.annotations).must_be_empty
end
it "has a body property" do
_(@message).must_respond_to(:body)
_(@message).must_respond_to(:body=)
end
it "has a default body that is nil" do
_(@message.body).must_be_nil
end
it "has no body after being cleared" do
value = random_string(128)
@message.body = value
_(@message.body).must_equal(value)
@message.clear
_(@message.body).must_be_nil
end
it "can set the body property" do
(1..3).each do |which|
case which
when 0
value = random_string(32)
when 1
value = random_array(100)
when 2
value = random_hash(100)
when 3
value = rand(512)
end
@message.body = value
_(@message.body).must_equal(value)
end
end
it "can update the body property" do
(1..3).each do |which|
case which
when 0
value = random_string(32)
when 1
value = random_array(100)
when 2
value = random_hash(100)
when 3
value = rand(512)
end
@message.body = value
_(@message.body).must_equal(value)
@message.body = nil
_(@message.body).must_be_nil
end
end
end
end
end