You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
2.9 KiB

argv = require('optimist')
.usage(''+
'Test tracing/firehose message receipt.'+
'\nA firehose message is generated both when a message is published and when it is consumed.'+
'\nNOTE: this test will attempt to enable and then disable tracing for the vhost using rabbitmqctl.'
)
.demand('host').describe('host', 'Host').default('host', 'localhost')
.demand('port').describe('port', 'Port').default('port', 5672)
.demand('vhost').describe('vhost', 'Virtual Host').default('vhost', '/')
.demand('login').describe('login', 'Login').default('login', 'guest')
.demand('password').describe('password', 'Password')
.argv
amqp = require '../amqp'
{exec} = require 'child_process'
assert = require 'assert'
message_s = ""
publish_message = ->
message = hello:'world'
message_s = JSON.stringify message
default_exchange.publish test_queue_name, message
console.log "test message published: #{JSON.stringify message} to queue: #{test_queue_name}"
count = 0
test_message = (message, headers, properties) ->
console.log ""+
"test message received: routing_key: '#{properties.routingKey}';"+
" message: #{JSON.stringify message}"
assert.equal message_s, JSON.stringify message, "incorrect message content or content_type"
count++
firehose_message = (message, headers, properties) ->
console.log ""+
"firehose message received: routing_key: '#{properties.routingKey}';"+
" headers.routing_keys[0]: '#{headers.routing_keys[0]}';"+
" message: #{JSON.stringify message}"
assert.equal message_s, JSON.stringify message, "incorrect message content or content_type"
assert.equal test_queue_name, headers.routing_keys[0], "routing key is not queue name in firehose message headers"
count++
check_results = ->
console.log "#{count} messages received"
assert.equal 3, count, "wrong number of messages received"
exec "rabbitmqctl trace_off -p #{argv.vhost}", (error, stdout, stderr) ->
if error?
console.log error
process.exit 2
process.exit 0
# initialize
default_exchange = {}
test_queue_name = 'test.firehose.test'
firehose_queue_name = 'test.firehose.firehose'
exec "rabbitmqctl trace_on -p #{argv.vhost}", (error, stdout, stderr) ->
if error?
console.log error
process.exit 1
{host, port, vhost, login, password} = argv
options =
host:host
port:port
vhost:vhost
login:login
password:password
amqp_connection = amqp.createConnection options
amqp_connection.on 'ready', () ->
default_exchange = amqp_connection.exchange()
amqp_connection.queue test_queue_name, (queue) ->
queue.subscribe (message, headers, properties) ->
test_message message, headers, properties
amqp_connection.queue firehose_queue_name, (queue) ->
queue.bind "amq.rabbitmq.trace", "#", ->
queue.subscribe (message, headers, properties) ->
firehose_message message, headers, properties
setTimeout check_results, 1000
publish_message()