| #!/usr/bin/ruby |
| # |
| # 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 'minitest/autorun' |
| require 'qpid_proton' |
| require 'socket' |
| require 'rbconfig' |
| |
| begin |
| MiniTest::Test |
| rescue NameError # For older versions of MiniTest |
| MiniTest::Test = MiniTest::Unit::TestCase |
| end |
| |
| def listening_port(s) |
| /Listening on ([0-9]+)/.match(s)[1] |
| end |
| |
| def listening_url(s) |
| ":#{listening_port s}" |
| end |
| |
| class ExampleTest < MiniTest::Test |
| |
| def run_script(*args) |
| return IO.popen([ RbConfig.ruby ] + args.map { |a| a.to_s }) |
| end |
| |
| def assert_output(want, *args) |
| assert_equal(want.strip, run_script(*args).read.strip) |
| end |
| |
| def test_helloworld |
| assert_output("Hello world!", "helloworld.rb", $url, "examples") |
| end |
| |
| def test_client_server |
| want = <<EOS |
| -> Twas brillig, and the slithy toves |
| <- TWAS BRILLIG, AND THE SLITHY TOVES |
| -> Did gire and gymble in the wabe. |
| <- DID GIRE AND GYMBLE IN THE WABE. |
| -> All mimsy were the borogroves, |
| <- ALL MIMSY WERE THE BOROGROVES, |
| -> And the mome raths outgrabe. |
| <- AND THE MOME RATHS OUTGRABE. |
| EOS |
| server = run_script("server.rb", $url, "examples") |
| assert_output(want.strip, "client.rb", $url, "examples") |
| ensure |
| Process.kill :TERM, server.pid if server |
| end |
| |
| def test_send_recv |
| assert_output("All 10 messages confirmed!", "simple_send.rb", $url, "examples") |
| want = (0..9).reduce("") { |x,y| x << "Received: sequence #{y}\n" } |
| assert_output(want.strip, "simple_recv.rb", $url, "examples") |
| end |
| |
| def test_ssl_send_recv |
| skip 'SSL not available' unless Qpid::Proton::SSL.present? |
| out = run_script("ssl_send.rb", $url, "examples").read.strip |
| assert_match(/Connection secured with "...*\"\nAll 10 messages confirmed!/, out) |
| want = (0..9).reduce("") { |x,y| x << "Received: sequence #{y}\n" } |
| assert_output(want.strip, "simple_recv.rb", $url, "examples") |
| end |
| |
| def test_direct_recv |
| p = run_script("direct_recv.rb", ":0", "examples") |
| url = listening_url(p.readline) # Wait till ready |
| assert_output("All 10 messages confirmed!", "simple_send.rb", url, "examples") |
| want = (0..9).reduce("") { |x,y| x << "Received: sequence #{y}\n" } |
| assert_equal(want.strip, p.read.strip) |
| end |
| |
| def test_direct_send |
| p = run_script("direct_send.rb", ":0", "examples") |
| url = listening_url(p.readline) # Wait till ready |
| want = (0..9).reduce("") { |x,y| x << "Received: sequence #{y}\n" } |
| assert_output(want.strip, "simple_recv.rb", url, "examples") |
| assert_equal("All 10 messages confirmed!", p.read.strip) |
| end |
| end |
| |
| # Start the broker before all tests. |
| $broker = IO.popen([RbConfig.ruby, 'broker.rb', ":0"]) |
| l = $broker.readline |
| $url = listening_url(l) |
| |
| # Kill the broker after all tests |
| MiniTest.after_run do |
| Process.kill(:TERM, $broker.pid) if $broker |
| end |