Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 28th, 2012  |  syntax: None  |  size: 2.95 KB  |  hits: 15  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. require 'spec_helper'
  2.  
  3. describe "Topic-based subscription" do
  4.   include EventedSpec::AMQPSpec
  5.   default_timeout 1
  6.  
  7.   amqp_before do
  8.     # initializing amqp channel
  9.     @channel   = AMQP::Channel.new
  10.     # using default amqp exchange
  11.     @exchange = @channel.topic
  12.   end
  13.  
  14.   context "when key matches on # (multiple words globbing)" do
  15.     it "routes messages to bound queues" do
  16.       # Setting up queues
  17.       @sports_queue  = @channel.queue("Sports queue", :auto_delete => true)
  18.       @nba_queue     = @channel.queue("NBA queue", :auto_delete => true)
  19.       @knicks_queue  = @channel.queue("New York Knicks queue", :auto_delete => true)
  20.       @celtics_queue = @channel.queue("Boston Celtics queue", :auto_delete => true)
  21.  
  22.       received_messages = {
  23.         @sports_queue.name  => 0,
  24.         @nba_queue.name     => 0,
  25.         @knicks_queue.name  => 0,
  26.         @celtics_queue.name => 0
  27.       }
  28.  
  29.       expected_messages = {
  30.         @sports_queue.name  => 9,
  31.         @nba_queue.name     => 7,
  32.         @knicks_queue.name  => 2,
  33.         @celtics_queue.name => 3
  34.       }
  35.  
  36.       @sports_queue.bind(@exchange, :key => "sports.#").subscribe do |payload|
  37.         received_messages[@sports_queue.name] += 1
  38.       end
  39.  
  40.       @nba_queue.bind(@exchange, :key => "*.nba.*").subscribe do |payload|
  41.         received_messages[@nba_queue.name] += 1
  42.       end
  43.  
  44.       @knicks_queue.bind(@exchange, :key => "sports.nba.knicks").subscribe do |payload|
  45.         received_messages[@knicks_queue.name] += 1
  46.       end
  47.  
  48.       @celtics_queue.bind(@exchange, :key => "#.celtics").subscribe do |payload|
  49.         received_messages[@celtics_queue.name] += 1
  50.       end
  51.  
  52.       @exchange.publish("Houston Rockets 104 : New York Knicks 89", :key => "sports.nba.knicks")
  53.       @exchange.publish("Phoenix Suns 129 : New York Knicks 121", :key => "sports.nba.knicks")
  54.  
  55.       @exchange.publish("Ray Allen hit a 21-foot jumper with 24.5 seconds remaining on the clock to give Boston a win over Detroit last night in the TD Garden", :key => "sports.nba.celtics")
  56.       @exchange.publish("Garnett's Return Sparks Celtics Over Magic at Garden", :key => "sports.nba.celtics")
  57.       @exchange.publish("Tricks of the Trade: Allen Reveals Magic of Big Shots", :key => "sports.nba.celtics")
  58.  
  59.       @exchange.publish("Blatche, Wall lead Wizards over Jazz 108-101", :key => "sports.nba.jazz")
  60.       @exchange.publish("Deron Williams Receives NBA Cares Community Assist Award", :key => "sports.nba.jazz")
  61.  
  62.       @exchange.publish("Philadelphia's Daniel Briere has been named as an All-Star replacement for Jarome Iginla.", :key => "sports.nhl.allstargame")
  63.       @exchange.publish("Devils blank Sid- and Malkin-less Penguins 2-0", :key => "sports.nhl.penguins")
  64.  
  65.       # Using #done with argument invokes done after a delay given in argument
  66.       done(0.2) {
  67.         # After #done is invoked, it launches an optional callback
  68.  
  69.         # Here goes the main check
  70.         received_messages.should == expected_messages
  71.       }
  72.     end # it
  73.   end # context
  74. end # describe