/test/sensu_test.rb

https://github.com/Epictetus/sensu · Ruby · 118 lines · 111 code · 7 blank · 0 comment · 2 complexity · ae53190c894d7ab1cd162d5834bfc5a1 MD5 · raw file

  1. class TestSensu < MiniTest::Unit::TestCase
  2. include EM::Ventually
  3. EM::Ventually.total_default = 1.5
  4. def setup
  5. @options = {:config_file => File.join(File.dirname(__FILE__), 'config.json')}
  6. config = Sensu::Config.new(@options)
  7. @settings = config.settings
  8. end
  9. def test_read_config_file
  10. config = Sensu::Config.new(@options)
  11. settings = config.settings
  12. eventually(true, :total => 0.5) { settings.key?('client') }
  13. end
  14. def test_cli_arguments
  15. options = Sensu::Config.read_arguments(['-w', '-c', @options[:config_file]])
  16. eventually({:worker => true, :config_file => @options[:config_file]}, :total => 0.5) { options }
  17. end
  18. def test_keepalives
  19. server = Sensu::Server.new(@options)
  20. client = Sensu::Client.new(@options)
  21. server.setup_redis
  22. server.setup_amqp
  23. server.setup_keepalives
  24. client.setup_amqp
  25. client.setup_keepalives
  26. test_client = ''
  27. EM.add_timer(1) do
  28. server.redis.get('client:' + @settings.client.name).callback do |client_json|
  29. test_client = JSON.parse(client_json).reject { |key, value| key == 'timestamp' }
  30. end
  31. end
  32. eventually(@settings['client']) { test_client }
  33. end
  34. def test_handlers
  35. server = Sensu::Server.new(@options)
  36. event = Hashie::Mash.new({
  37. :client => @settings.client,
  38. :check => {
  39. :name => 'test_handlers',
  40. :handler => 'default',
  41. :issued => Time.now.to_i,
  42. :status => 1,
  43. :output => 'WARNING\n',
  44. :flapping => false
  45. },
  46. :occurrences => 1,
  47. :action => 'create'
  48. })
  49. server.handle_event(event)
  50. eventually(true) do
  51. JSON.parse(File.open('/tmp/sensu_test_handlers', 'rb').read) == event.to_hash
  52. end
  53. end
  54. def test_publish_subscribe
  55. server = Sensu::Server.new(@options)
  56. client = Sensu::Client.new(@options)
  57. server.setup_redis
  58. server.setup_amqp
  59. server.redis.flushall
  60. server.setup_keepalives
  61. server.setup_results
  62. client.setup_amqp
  63. client.setup_keepalives
  64. client.setup_subscriptions
  65. server.setup_publisher(:test => true)
  66. client_events = Hash.new
  67. EM.add_timer(1) do
  68. server.redis.hgetall('events:' + @settings.client.name).callback do |events|
  69. client_events = Hash[*events]
  70. client_events.each do |key, value|
  71. client_events[key] = JSON.parse(value).symbolize_keys
  72. end
  73. end
  74. end
  75. parallel do
  76. @settings.checks.each_with_index do |(name, details), index|
  77. expected_result = {
  78. :status => index + 1,
  79. :output => @settings.client.name + "\n",
  80. :flapping => false,
  81. :occurrences => 1
  82. }
  83. eventually(expected_result) { client_events[name] }
  84. end
  85. end
  86. end
  87. def test_client_socket
  88. server = Sensu::Server.new(@options)
  89. client = Sensu::Client.new(@options)
  90. server.setup_redis
  91. server.setup_amqp
  92. server.redis.flushall
  93. server.setup_keepalives
  94. client.setup_amqp
  95. client.setup_keepalives
  96. server.setup_results
  97. client.setup_socket
  98. external_source = proc do
  99. socket = TCPSocket.open('127.0.0.1', 3030)
  100. socket.write('{"name": "external", "status": 1, "output": "test"}')
  101. end
  102. EM.defer(external_source)
  103. client_events = Hash.new
  104. EM.add_timer(1) do
  105. server.redis.hgetall('events:' + @settings.client.name).callback do |events|
  106. client_events = Hash[*events]
  107. end
  108. end
  109. eventually(true) { client_events.include?('external') }
  110. end
  111. end