Ejemplo n.º 1
0
        def on_setup(_):
            self.service = LoopbackDaemon(
                datastore=self.app.db,
            )

            return self.start_pyres()
Ejemplo n.º 2
0
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
                )