def on_setup(_): self.service = LoopbackDaemon( datastore=self.app.db, ) return self.start_pyres()
class TestLoopbackDaemon(TestLoopback, TestDaemon): """ Something pithy. """ def setUp(self): twisted.internet.base.DelayedCall.debug = True d = super(TestLoopbackDaemon, self).setUp() def on_setup(_): self.service = LoopbackDaemon( datastore=self.app.db, ) return self.start_pyres() d.addCallback(on_setup) return d @defer.inlineCallbacks def tearDown(self): pyres = yield self.stop_pyres() super(TestLoopbackDaemon, self).tearDown() def test_recurring_methods(self): self.assertEqual( self.service.recurring(), { 'fortytwo': 'Returns the string "fortytwo"', 'ten': 'Returns the number 10', 'time': 'Returns the current time in seconds since epoch', 'random': 'Returns a random number between 1 and 999,999', 'other_profile': 'Returns a random profile', }) test_recurring_methods.timeout=20 @defer.inlineCallbacks def test_run(self): self.skip_me('This intermittently fails on Jenkins') methods = [ 'ten', 'fortytwo', 'time', 'random', 'other_profile' ] yield self.set_authorization() time1 = int(time.time()) yield self.resq.enqueue( LoopbackDaemon, { 'sql': self.service.datastore.config, 'environment': 'local', }, self.uuid, ) # Wait for the worker time.sleep(1) first_data = {} for method in methods: first_data[method] = yield self.get_value( uuid=self.uuid, method=method, ) self.assertEqual(first_data['ten'], 10) self.assertEqual(first_data['fortytwo'], 'fortytwo') self.assertRegexpMatches(str(first_data['random']), r'^\d{1,6}$') self.assertTrue( first_data['time'] == time1 or first_data['time'] == time1+1 ) # Ensure the test that the times from the two runs will be different. time.sleep(1.5) time2 = int(time.time()) yield self.resq.enqueue( LoopbackDaemon, { 'sql': self.service.datastore.config, 'environment': 'local', }, self.uuid, ) # Wait for the worker time.sleep(1) second_data = {} for method in ['fortytwo', 'random', 'time', 'ten']: datum = yield self.get_value( uuid=self.uuid, method=method, ) second_data[method] = datum self.assertEqual(second_data['fortytwo'], 'fortytwo') self.assertEqual(second_data['ten'], 10) self.assertRegexpMatches(str(second_data['random']), r'^\d{1,6}$') self.assertTrue( second_data['time'] == time2 or second_data['time'] == time2+1 ) self.assertEqual(first_data['fortytwo'], second_data['fortytwo']) self.assertNotEqual(first_data['time'], second_data['time']) for method in ['fortytwo', 'time', 'ten']: second_range = yield self.get_value_range( start=time1-1000, end=time1+100, method=method, ) if method == 'fortytwo': self.assertEqual(len(second_range), 1) self.assertLessEqual(str(time1), second_range[0][0]) self.assertEqual(second_range[0][1], 'fortytwo') elif method == 'ten': self.assertEqual(len(second_range), 1) self.assertLessEqual(time1, second_range[0][0]) self.assertEqual(second_range[0][1], 10) elif method == 'time': self.assertEqual(len(second_range), 2) self.assertLessEqual(time1, second_range[0][0]) self.assertLessEqual(time2, second_range[1][0]) self.assertTrue( second_range[0][1] == time1 or second_range[0][1] == time1+1 ) self.assertTrue( second_range[1][1] == time2 or second_range[1][1] == time2+1 )