blob: 27cf0739dd62634e7f47ba0a49f089122bede58f [file] [log] [blame]
#!/usr/bin/env ruby
require 'test_tools'
require 'qpid_proton'
if ((RUBY_VERSION.split(".").map {|x| x.to_i} <=> [1, 9]) < 0)
require 'pathname'
class File
def self.absolute_path(name)
return Pathname.new(name).realpath
end
end
end
class InteropTest < MiniTest::Test
include Qpid::Proton
def setup
@data = Codec::Data.new
@message = Message.new
end
# Walk up the directory tree to find the tests directory.
def get_data(name)
path = File.join(File.dirname(__FILE__), "../../tests/interop/#{name}.amqp")
raise "Can't find test/interop directory from #{__FILE__}" unless File.exist?(path)
File.open(path, "rb") { |f| f.read }
end
# Decode encoded bytes as a Data object
def decode_data(encoded)
buffer = encoded
while buffer.size > 0
n = @data.decode(buffer)
buffer = buffer[n..-1]
end
@data.rewind
reencoded = @data.encode
# Test the round-trip re-encoding gives the same result.
assert_equal(encoded, reencoded)
end
def decode_data_file(name) decode_data(get_data(name)); end
def decode_message_file(name)
message = Message.new()
message.decode(self.get_data(name))
self.decode_data(message.body)
end
def assert_next(type, value)
assert @data.next
assert_equal(type, @data.type)
assert_equal(value, @data.object)
end
def assert_array_next(expected)
result = @data.next_object
assert_equal(expected, result)
end
def test_message
decode_message_file("message")
assert_next(Codec::STRING, "hello")
assert !@data.next
end
def test_primitives
decode_data_file("primitives")
assert_next(Codec::BOOL, true)
assert_next(Codec::BOOL, false)
assert_next(Codec::UBYTE, 42)
assert_next(Codec::USHORT, 42)
assert_next(Codec::SHORT, -42)
assert_next(Codec::UINT, 12345)
assert_next(Codec::INT, -12345)
assert_next(Codec::ULONG, 12345)
assert_next(Codec::LONG, -12345)
assert_next(Codec::FLOAT, 0.125)
assert_next(Codec::DOUBLE, 0.125)
assert !@data.next
end
def test_strings
decode_data_file("strings")
assert_next(Codec::BINARY, "abc\0defg")
assert_next(Codec::STRING, "abcdefg")
assert_next(Codec::SYMBOL, :abcdefg)
assert_next(Codec::BINARY, "")
assert_next(Codec::STRING, "")
assert_next(Codec::SYMBOL, :"")
assert !@data.next
end
def test_described
decode_data_file("described")
assert_next(Codec::DESCRIBED, Types::Described.new(:"foo-descriptor", "foo-value"))
assert(@data.described?)
assert_next(Codec::DESCRIBED, Types::Described.new(12, 13))
assert(@data.described?)
assert !@data.next
end
def test_described_array
decode_data_file("described_array")
assert_array_next(Types::UniformArray.new(Types::INT, (0...10).to_a, :"int-array"))
end
def test_arrays
decode_data_file("arrays")
assert_array_next(Types::UniformArray.new(Codec::INT, (0...100).to_a))
assert_array_next(Types::UniformArray.new(Codec::STRING, ["a", "b", "c"]))
assert_array_next(Types::UniformArray.new(Codec::INT))
assert !@data.next
end
def test_lists
decode_data_file("lists")
assert_next(Codec::LIST, [32, "foo", true])
assert_next(Codec::LIST, [])
assert !@data.next
end
def test_maps
decode_data_file("maps")
assert_next(Codec::MAP, {"one" => 1, "two" => 2, "three" => 3 })
assert_next(Codec::MAP, {1 => "one", 2 => "two", 3 => "three"})
assert_next(Codec::MAP, {})
assert !@data.next
end
end