| #!/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 |