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.
119 lines
3.4 KiB
119 lines
3.4 KiB
usage_text = |
|
' |
|
Test federated multi-hop message receipt. |
|
\n |
|
\n* Probably you want to do this on a fresh rabbitmq install... |
|
\n |
|
\nTo enable this test: |
|
\n1. Create a virtual host named "reflector" and provide access |
|
\n2. Bring down the rabbit |
|
\n3. Enable the federation plugin |
|
\n4. Include this federation configuration as or in your rabbitmq.config file and bring up the rabbit: |
|
\n[ |
|
\n {rabbitmq_federation, [ |
|
\n {exchanges, [ |
|
\n [ |
|
\n {exchange, "test.federation"}, |
|
\n {virtual_host, "reflector"}, |
|
\n {type, "topic"}, |
|
\n {upstream_set, "root.set"} |
|
\n ], |
|
\n [ |
|
\n {exchange, "test.federation"}, |
|
\n {virtual_host, "/"}, |
|
\n {type, "topic"}, |
|
\n {upstream_set, "reflector.set"} |
|
\n ] |
|
\n ]}, |
|
\n {upstream_sets, [ |
|
\n {"reflector.set", [ |
|
\n [ |
|
\n {connection, "reflector.connection"}, |
|
\n {max_hops, 2} |
|
\n ] |
|
\n ]}, |
|
\n {"root.set", [ |
|
\n [ |
|
\n {connection, "root.connection"}, |
|
\n {max_hops, 2} |
|
\n ] |
|
\n ]} |
|
\n ]}, |
|
\n {connections, [ |
|
\n {"reflector.connection", [ |
|
\n {host, "localhost"}, |
|
\n {virtual_host, "reflector"}, |
|
\n {username, "guest"}, |
|
\n {password, "guest"} |
|
\n ]}, |
|
\n {"root.connection", [ |
|
\n {host, "localhost"}, |
|
\n {virtual_host, "/"}, |
|
\n {username, "guest"}, |
|
\n {password, "guest"} |
|
\n ]} |
|
\n ]}, |
|
\n {local_username, "guest"}, |
|
\n {local_password, "guest"} |
|
\n ]} |
|
\n]. |
|
' |
|
argv = require('optimist') |
|
.usage(usage_text) |
|
.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' |
|
assert = require 'assert' |
|
|
|
message_s = "" |
|
publish_message = -> |
|
message = hello:'world' |
|
message_s = JSON.stringify message |
|
test_exchange.publish 'whatever', message |
|
console.log "test message published: #{JSON.stringify message} to exchange: #{test_exchange_name}" |
|
|
|
count = 0 |
|
test_message = (message, headers, properties) -> |
|
console.log ""+ |
|
"test message received: message: #{JSON.stringify message}"+ |
|
"\n headers: #{JSON.stringify headers, undefined, 4}" |
|
assert.equal message_s, JSON.stringify message, "incorrect message content or content_type" |
|
assert.equal 'reflector', headers["x-received-from"][0]["virtual_host"], "missing or mismatched virtual host name" if count is 1 |
|
count++ |
|
|
|
check_results = -> |
|
console.log "#{count} messages received" |
|
assert.equal 2, count, "wrong number of messages received" |
|
process.exit 0 |
|
|
|
# initialize |
|
|
|
test_exchange = {} |
|
test_queue_name = test_exchange_name = 'test.federation' |
|
{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', () -> |
|
amqp_connection.exchange test_exchange_name, passive:true, (exchange) -> |
|
test_exchange = exchange |
|
|
|
amqp_connection.queue test_queue_name, (queue) -> |
|
queue.bind test_exchange, '#', -> |
|
queue.subscribe (message, headers, properties) -> |
|
test_message message, headers, properties |
|
|
|
setTimeout check_results, 1000 |
|
publish_message()
|
|
|