# Allow test to be run in-place without requiring a gem install
$LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
require 'rubygems'
require 'wmq'
require 'test/unit'
class TestTest < Test::Unit::TestCase
def setup
puts '****** setup: start ******'
@queue_manager = WMQ::QueueManager.new(:q_mgr_name => 'TEST') #, :connection_name=>'localhost(1414)')
@queue_manager.connect
# Create Queue and clear any messages from the queue
@in_queue = WMQ::Queue.new(:queue_manager=>@queue_manager,
:mode=>:input,
:dynamic_q_name=>'UNIT.TEST.*',
:q_name=>'SYSTEM.DEFAULT.MODEL.QUEUE',
:fail_if_exists=>false)
@in_queue.open
@in_queue.each { |message| }
# Open same queue for Output. Queue should be created by now
@out_queue = WMQ::Queue.new(:queue_manager=>@queue_manager,
:mode=>:output,
:q_name=>@in_queue.name)
@out_queue.open
puts '****** setup: end ******'
end
def teardown
puts '****** teardown: start ******'
@out_queue.close
@in_queue.close
@queue_manager.disconnect
puts '****** teardown: end ******'
end
def test_exceptions
puts '****** test_exceptions: start ******'
assert_raise(TypeError) { WMQ::QueueManager.new(1) }
assert_nothing_raised { WMQ::QueueManager.new(:exception_on_error=>nil) }
assert_raise(TypeError) { WMQ::QueueManager.new(:exception_on_error=>1) }
assert_raise(TypeError) { WMQ::QueueManager.new(:q_mgr_name=>2).connect }
assert_raise(WMQ::WMQException) { WMQ::QueueManager.new(:q_mgr_name=>'bad').connect }
puts '****** test_exceptions: end ******'
end
def test_queue_manager
puts '****** test_queue_manager ******'
assert_equal(Object, WMQ::QueueManager.superclass)
assert_equal(WMQ::QueueManager, @queue_manager.class)
end
def test_1
puts '****** test_1 ******'
assert_equal(@out_queue.put(:data=>'Hello World'), true)
message = WMQ::Message.new
assert_equal(@in_queue.get(:message=>message), true)
assert_equal(message.data, 'Hello World')
end
def test_dynamic_buffer
puts '****** test_dynamic_buffer ******'
# Clear out queue of any messages
@in_queue.each { |message| }
test_sizes = [0, 1, 100, 101, 102, 500, 65534, 65535, 65536, 65537, 1*1024*1024, 4*1024*1024]
test_sizes.each do |size|
str = '0123456789ABCDEF' * (size/16) + '0123456789ABCDEF'[0,size%16]
assert_equal(str.length, size)
assert_equal(@out_queue.put(:data=>str), true)
end
# First test the browse mechanism
counter = 0
@queue_manager.open_queue(:mode=>:browse, :q_name=>@in_queue.name) do |browse_queue|
browse_queue.each do |message|
size = test_sizes[counter]
assert_equal(size, message.data.length)
str = '0123456789ABCDEF' * (size/16) + '0123456789ABCDEF'[0,size%16]
assert_equal(str, message.data)
counter = counter + 1
end
end
assert_equal(test_sizes.size, counter)
# Now retrieve the messages destructively
message = WMQ::Message.new
test_sizes.each do |size|
assert_equal(true, @in_queue.get(:message=>message, :match=>WMQ::MQMO_NONE))
assert_equal(size, message.data.length)
str = '0123456789ABCDEF' * (size/16) + '0123456789ABCDEF'[0,size%16]
assert_equal(str, message.data)
end
end
def test_q_name_hash
puts '****** test_q_name_hash ******'
@queue_manager.open_queue(:mode=>:output,
:q_name=>{:q_name=>@in_queue.name,
:q_mgr_name=>@queue_manager.name}
) do |test_queue|
assert_equal(true, test_queue.put(:data=>'Hello World'))
message = WMQ::Message.new
assert_equal(true, @in_queue.get(:message=>message))
assert_equal('Hello World', message.data)
end
end
def test_execute
puts '****** test_execute ******'
array = @queue_manager.inquire_q(:q_name=>@in_queue.name, :q_type=>WMQ::MQQT_LOCAL, :current_q_depth=>nil)
assert_equal(1, array.size)
assert_equal(@in_queue.name, array[0][:q_name])
assert_equal(true, @queue_manager.inquire_process(:process_name=>'*').size>0)
assert_raise(WMQ::WMQException) { @queue_manager.inquire_q(:q_name=>'BADQUEUENAME*') }
assert_equal(1, @queue_manager.ping_q_mgr.size)
end
def test_mqsc
puts '****** test_mqsc ******'
array = @queue_manager.mqsc("dis ql(#{@in_queue.name})")
assert_equal(1, array.size)
assert_equal(true, array[0].include?("QUEUE(#{@in_queue.name})"))
end
def test_put1
puts '****** test_put1 ******'
data = 'Some Test Data'
assert_equal(true,@queue_manager.put(:q_name=>@in_queue.name, :data=>data))
message = WMQ::Message.new
assert_equal(true, @in_queue.get(:message=>message))
assert_equal(data, message.data)
end
def verify_header(header, format)
verify_multiple_headers([header], format)
end
def verify_multiple_headers(headers, format)
data = 'Some Test Data'
message = WMQ::Message.new
message.data = data
message.descriptor[:format] = format
message.headers = headers
#assert_equal(true,@queue_manager.put(:q_name=>@in_queue.name, :message=>message))
assert_equal(true,@out_queue.put(:message=>message))
message = WMQ::Message.new
assert_equal(true, @in_queue.get(:message=>message))
assert_equal(data, message.data)
assert_equal(headers.size, message.headers.size)
count = 0
headers.each do |header|
reply_header = message.headers[count]
header.each_pair{|key, value| assert_equal(value, reply_header[key])}
count = count + 1
end
end
def test_dlh
puts '****** test_dlh ******'
dlh = {:header_type =>:dead_letter_header,
:reason => WMQ::MQRC_UNKNOWN_REMOTE_Q_MGR,
:dest_q_name =>'ORIGINAL_QUEUE_NAME',
:dest_q_mgr_name =>'BAD_Q_MGR',
:put_appl_name =>'TestApp.exe',
}
verify_header(dlh, WMQ::MQFMT_DEAD_LETTER_HEADER)
# Untested keys:
#:put_date=>"",
#:put_time=>"",
#:encoding=>0,
#:coded_char_set_id=>437,
#:put_appl_type=>0,
# Test again, but use QueueManager#put this time
data = 'Some Test Data'
message = WMQ::Message.new
message.data = data
message.descriptor[:format] = WMQ::MQFMT_STRING
message.headers << dlh
assert_equal(true,@queue_manager.put(:q_name=>@in_queue.name, :message=>message))
message = WMQ::Message.new
assert_equal(true, @in_queue.get(:message=>message))
assert_equal(data, message.data)
assert_equal(1, message.headers.size)
reply_header = message.headers[0]
dlh.each_pair{|key, value| assert_equal(value, reply_header[key])}
end
def test_cics
puts '****** test_cics ******'
cics = {:header_type =>:cics,
:reason =>WMQ::MQRC_UNKNOWN_REMOTE_Q_MGR,
:facility =>'TOKEN123',
:reply_to_format =>WMQ::MQFMT_STRING,
}
verify_header(cics, WMQ::MQFMT_NONE)
end
def test_ims
puts '****** test_ims ******'
ims = {:header_type =>:ims,
:l_term_override =>'LTERM',
:reply_to_format =>WMQ::MQFMT_STRING,
}
verify_header(ims, WMQ::MQFMT_STRING)
end
def test_transmission_header
puts '****** test_transmission_header ******'
xqh = {:header_type =>:xmit_q_header,
:remote_q_name =>'SOME_REMOTE_QUEUE',
:remote_q_mgr_name=>'SOME_REMOTE_Q_MGR',
:msg_type =>WMQ::MQMT_REQUEST,
:msg_id =>'my message Id',
}
verify_header(xqh, WMQ::MQFMT_STRING)
end
def test_rf_header
puts '****** test_rf_header ******'
rfh = {:header_type =>:rf_header,
:name_value => {' name s' => ' v a "l" u e 1 ',
'n a m e 2 ' => 'v a l u e 2',
'' => ['"', '""', '"""', '""""', ''],
'name3'=>['"value3"', '', '"',' value 43"']},
}
verify_header(rfh, WMQ::MQFMT_STRING)
end
def test_rf_header_2
puts '****** test_rf_header_2 ******'
rfh2 = {:header_type =>:rf_header_2,
:xml => ['to the world',
'xml like string'],
}
verify_header(rfh2, WMQ::MQFMT_STRING)
end
def test_multiple_headers
puts '****** test_multiple_headers ******'
headers = [{:header_type => :rf_header_2,
:xml => ['to the world',
'xml like string'],},
{:header_type => :rf_header,
:name_value => {' name s' => ' v a l u e 1 ',
'n a m e 2 ' => 'v a l u e 2',
'name3'=>['value3', '', 'value 43']} },
{:header_type => :ims,
:l_term_override => 'LTERM',
:reply_to_format => WMQ::MQFMT_STRING},
{:header_type => :rf_header,
:name_value => {' name s' => ' v a l u e 1 ',
'n a m e 2 ' => 'v a l u e 2',
'name3'=>['value3', '', 'value 43']} },
{:header_type => :cics,
:reason => WMQ::MQRC_UNKNOWN_REMOTE_Q_MGR,
:facility => 'TOKEN123',
:reply_to_format => WMQ::MQFMT_STRING},
{:header_type => :rf_header_2,
:xml => ['to the world', 'xml like string'],},
{:header_type => :xmit_q_header,
:remote_q_name => 'SOME_REMOTE_QUEUE',
:remote_q_mgr_name=> 'SOME_REMOTE_Q_MGR',
:msg_type => WMQ::MQMT_REQUEST,
:msg_id => 'my message Id'},
]
verify_multiple_headers(headers, WMQ::MQFMT_STRING)
end
def test_xmit_multiple_headers
puts '****** test_xmit_q_header with ims header ******'
headers = [{:header_type => :xmit_q_header,
:remote_q_name => 'SOME_REMOTE_QUEUE',
:remote_q_mgr_name=> 'SOME_REMOTE_Q_MGR',
:msg_type => WMQ::MQMT_REQUEST,
:msg_id => 'my message Id'},
{:header_type => :ims,
:l_term_override => 'LTERM',
:reply_to_format => WMQ::MQFMT_STRING},
]
verify_multiple_headers(headers, WMQ::MQFMT_STRING)
end
def test_message_grouping
puts '****** test_message_grouping ******'
# Clear out queue of any messages
@in_queue.each { |message| }
msg = WMQ::Message.new
msg.data = 'First'
msg.descriptor[:msg_flags] = WMQ::MQMF_MSG_IN_GROUP
assert_equal(@out_queue.put(:message=>msg, :options => WMQ::MQPMO_LOGICAL_ORDER), true)
msg.data = 'Second'
assert_equal(@out_queue.put(:message=>msg, :options => WMQ::MQPMO_LOGICAL_ORDER), true)
msg.data = 'Last'
msg.descriptor[:msg_flags] = WMQ::MQMF_LAST_MSG_IN_GROUP
assert_equal(@out_queue.put(:message=>msg, :options => WMQ::MQPMO_LOGICAL_ORDER), true)
end
end