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