test_notifier.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. # -*- coding: utf-8 -*-
  2. import unittest
  3. import json
  4. from media.monitor.airtime import AirtimeNotifier, AirtimeMessageReceiver
  5. from mock import patch, Mock
  6. from media.monitor.config import MMConfig
  7. from media.monitor.manager import Manager
  8. def filter_ev(d): return { i : j for i,j in d.iteritems() if i != 'event_type' }
  9. class TestReceiver(unittest.TestCase):
  10. def setUp(self):
  11. # TODO : properly mock this later
  12. cfg = {}
  13. self.amr = AirtimeMessageReceiver(cfg, Manager())
  14. def test_supported(self):
  15. # Every supported message should fire something
  16. for event_type in self.amr.dispatch_table.keys():
  17. msg = { 'event_type' : event_type, 'extra_param' : 123 }
  18. filtered = filter_ev(msg)
  19. # There should be a better way to test the following without
  20. # patching private methods
  21. with patch.object(self.amr, '_execute_message') as mock_method:
  22. mock_method.side_effect = None
  23. ret = self.amr.message(msg)
  24. self.assertTrue(ret)
  25. mock_method.assert_called_with(event_type, filtered)
  26. def test_no_mod_message(self):
  27. ev = { 'event_type' : 'new_watch', 'directory' : 'something here' }
  28. filtered = filter_ev(ev)
  29. with patch.object(self.amr, '_execute_message') as mock_method:
  30. mock_method.return_value = "tested"
  31. ret = self.amr.message(ev)
  32. self.assertTrue( ret ) # message passing worked
  33. mock_method.assert_called_with(ev['event_type'], filtered)
  34. # test that our copy of the message does not get modified
  35. self.assertTrue( 'event_type' in ev )
  36. class TestAirtimeNotifier(unittest.TestCase):
  37. def test_handle_message(self):
  38. #from configobj import ConfigObj
  39. test_cfg = MMConfig('./test_config.cfg')
  40. ran = [False]
  41. class MockReceiver(object):
  42. def message(me,m):
  43. self.assertTrue( 'event_type' in m )
  44. self.assertEqual( m['path'], '/bs/path' )
  45. ran[0] = True
  46. airtime = AirtimeNotifier(cfg=test_cfg, message_receiver=MockReceiver())
  47. m1 = Mock()
  48. m1.ack = "ack'd message"
  49. m2 = Mock()
  50. m2.body = json.dumps({ 'event_type' : 'file_delete', 'path' : '/bs/path' })
  51. airtime.handle_message(body=m1,message=m2)
  52. self.assertTrue( ran[0] )
  53. if __name__ == '__main__': unittest.main()