Guest User

Untitled

a guest
Jul 10th, 2013
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.56 KB | None | 0 0
  1. require 'rspec/given'
  2. require 'securerandom'
  3. require './src/subscriber_base_class'
  4.  
  5. require_relative 'helpers/connection'
  6.  
  7. def install_test_subscriber(parent)
  8.   waiter = Thread.new { sleep 1 while true }
  9.   TestSubscriber.callback do |topic, data|
  10.     @topic = topic
  11.     @data = data
  12.     waiter.kill
  13.   end
  14.   waiter
  15. end
  16.  
  17. describe 'TestSubscriber' do
  18.   Given(:subscriber) { SubscriberBaseClass }
  19.   Given { subscriber.load_subscriber('./src/subscribers/test_subscriber') }
  20.   Then do
  21.     handlers = subscriber.subscribers(TestSubscriber::Topic)
  22.     module_present = handlers.find { |h| h[:subscriber] == TestSubscriber }
  23.     module_present.should be_true
  24.   end
  25.  
  26.   context 'Running Service' do
  27.     Given(:connection_opts) { amqp_connection_options }
  28.     Given(:service) { SubscriberBaseClass.new(connection_opts) }
  29.     context 'Handler Register' do
  30.       Given { install_test_subscriber(subscriber) }
  31.       context 'Check registered handlers' do
  32.         When(:handlers) do
  33.           subscriber.subscribers(TestSubscriber::Topic).map { |h| h[:handler]}
  34.         end
  35.         Then { handlers.each { |h| h.should be_kind_of Proc } }
  36.         Then  do
  37.           arg1 = TestSubscriber::Topic
  38.           handlers.each do |h|
  39.             arg2 = SecureRandom.hex
  40.             # simualate a handler call
  41.             h.call(arg1, arg2)
  42.             @topic.should == arg1
  43.             @data.should == arg2
  44.           end
  45.         end
  46.       end
  47.     end
  48.  
  49.     context 'Recieve messages' do
  50.       When { service.start }
  51.       context 'Recieve a message' do
  52.         Given(:ping_opts) { amqp_ping_options }
  53.         When do
  54.           @data = @topic = nil
  55.           waiter = install_test_subscriber(SubscriberBaseClass)
  56.           publish_amqp_topic(connection_opts,
  57.                              ping_opts[:message],
  58.                              'test.topic')
  59.           waiter.join
  60.         end
  61.         Then do
  62.           @data.should == ping_opts[:message]
  63.           @topic.should == TestSubscriber::Topic
  64.         end
  65.       end
  66.  
  67.       context 'Recieve a message on a wildcard key' do
  68.         Given(:wildcard_opts) { amqp_wildcard_options }
  69.         When do
  70.           @data = @topic = nil
  71.           waiter = install_test_subscriber(SubscriberBaseClass)
  72.           publish_amqp_topic(connection_opts,
  73.                              wildcard_opts[:message],
  74.                              wildcard_opts[:topic])
  75.           waiter.join
  76.         end
  77.         Then { @data.should == wildcard_opts[:message] }
  78.         And  { @topic.should == wildcard_opts[:topic] }
  79.       end
  80.     end
  81.   end
  82. end
Advertisement
Add Comment
Please, Sign In to add comment