Exemplo n.º 1
0
    def test_events_more_limit(self):
        """When events fetched > 100, they are processed in 2 batches."""
        events1 = [{
            'tenantId': '1234',
            'groupId': 'scal44',
            'policyId': 'pol4{}'.format(i),
            'trigger': 'now',
            'cron': None,
            'bucket': 1
        } for i in range(100)]
        events2 = [{
            'tenantId': '1235',
            'groupId': 'scal54',
            'policyId': 'pol4{}'.format(i),
            'trigger': 'now',
            'cron': None,
            'bucket': 1
        } for i in range(10)]
        self.returns = [events1, events2]

        d = check_events_in_bucket(self.log, "disp", self.mock_store, 1, 'now',
                                   100)

        self.successResultOf(d)
        self.assertEqual(self.mock_store.fetch_and_delete.mock_calls,
                         [mock.call(1, 'now', 100)] * 2)
        self.assertEqual(self.process_events.mock_calls, [
            mock.call(events1, "disp", self.mock_store, self.log.bind()),
            mock.call(events2, "disp", self.mock_store, self.log.bind())
        ])
Exemplo n.º 2
0
 def test_no_events(self):
     """
     When no events are fetched, they are not processed
     """
     d = check_events_in_bucket(self.log, self.mock_store, 1, 'utcnow', 100)
     self.successResultOf(d)
     self.process_events.assert_called_once_with([], self.mock_store, self.log.bind())
Exemplo n.º 3
0
    def test_events_batch_error(self):
        """
        When error occurs after first batch of events are processed, then it
        logs errors and does not try to fetch again.
        """
        events = [{
            'tenantId': '1234',
            'groupId': 'scal44',
            'policyId': 'pol4{}'.format(i),
            'trigger': 'now',
            'cron': None,
            'bucket': 1
        } for i in range(100)]
        self.returns = [events, ValueError('some')]

        d = check_events_in_bucket(self.log, "disp", self.mock_store, 1, 'now',
                                   100)

        self.successResultOf(d)
        self.log.bind.return_value.err.assert_called_once_with(
            CheckFailure(ValueError))
        self.assertEqual(self.mock_store.fetch_and_delete.mock_calls,
                         [mock.call(1, 'now', 100)] * 2)
        self.process_events.assert_called_once_with(events, "disp",
                                                    self.mock_store,
                                                    self.log.bind())
Exemplo n.º 4
0
 def test_fetch_called(self):
     """
     `fetch_and_delete` called correctly
     """
     d = check_events_in_bucket(self.log, self.mock_store, 1, 'utcnow', 100)
     self.successResultOf(d)
     self.mock_store.fetch_and_delete.assert_called_once_with(1, 'utcnow', 100)
     self.log.bind.assert_called_once_with(bucket=1)
Exemplo n.º 5
0
 def test_no_events(self):
     """When no events are fetched, they are not processed."""
     d = check_events_in_bucket(self.log, "disp", self.mock_store, 1,
                                'utcnow', 100)
     self.successResultOf(d)
     self.process_events.assert_called_once_with([], "disp",
                                                 self.mock_store,
                                                 self.log.bind())
Exemplo n.º 6
0
 def test_fetch_called(self):
     """
     `fetch_and_delete` called correctly
     """
     d = check_events_in_bucket(self.log, "disp", self.mock_store, 1,
                                'utcnow', 100)
     self.successResultOf(d)
     self.mock_store.fetch_and_delete.assert_called_once_with(
         1, 'utcnow', 100)
     self.log.bind.assert_called_once_with(bucket=1)
Exemplo n.º 7
0
    def test_events_process_error(self):
        """
        error is logged if `process_events` returns error
        """
        self.returns = [ValueError('e')]

        d = check_events_in_bucket(self.log, self.mock_store, 1, 'now', 100)

        self.successResultOf(d)
        self.log.bind.return_value.err.assert_called_once_with(CheckFailure(ValueError))
        self.assertFalse(self.process_events.called)
Exemplo n.º 8
0
    def test_events_process_error(self):
        """
        Error is logged if `process_events` returns error.
        """
        self.returns = [ValueError('e')]

        d = check_events_in_bucket(self.log, "disp", self.mock_store, 1,
                                   'utcnow', 100)

        self.successResultOf(d)
        self.log.bind.return_value.err.assert_called_once_with(
            CheckFailure(ValueError))
        self.assertFalse(self.process_events.called)
Exemplo n.º 9
0
    def test_events_in_limit(self):
        """
        When events fetched < 100, they are processed
        """
        events = [{'tenantId': '1234', 'groupId': 'scal44', 'policyId': 'pol4{}'.format(i),
                   'trigger': 'now', 'cron': None, 'bucket': 1} for i in range(10)]
        self.returns = [events]

        d = check_events_in_bucket(self.log, self.mock_store, 1, 'utcnow', 100)

        self.successResultOf(d)
        # Ensure fetch_and_delete and process_events is called only once
        self.mock_store.fetch_and_delete.assert_called_once_with(1, 'utcnow', 100)
        self.process_events.assert_called_once_with(events, self.mock_store, self.log.bind())
Exemplo n.º 10
0
    def test_events_batch_process(self):
        """
        When events fetched > 100, they are processed in batches until all
        events are processed
        """
        events1 = [
            {
                "tenantId": "1234",
                "groupId": "scal44",
                "policyId": "pol4{}".format(i),
                "trigger": "now",
                "cron": None,
                "bucket": 1,
            }
            for i in range(100)
        ]
        events2 = [
            {
                "tenantId": "1235",
                "groupId": "scal54",
                "policyId": "pol4{}".format(i),
                "trigger": "now",
                "cron": None,
                "bucket": 1,
            }
            for i in range(100)
        ]
        events3 = [
            {
                "tenantId": "1236",
                "groupId": "scal64",
                "policyId": "pol4{}".format(i),
                "trigger": "now",
                "cron": None,
                "bucket": 1,
            }
            for i in range(10)
        ]
        self.returns = [events1, events2, events3]

        d = check_events_in_bucket(self.log, "disp", self.mock_store, 1, "now", 100)

        self.successResultOf(d)
        self.assertEqual(self.mock_store.fetch_and_delete.mock_calls, [mock.call(1, "now", 100)] * 3)
        self.assertEqual(
            self.process_events.mock_calls,
            [mock.call(events, "disp", self.mock_store, self.log.bind()) for events in [events1, events2, events3]],
        )
Exemplo n.º 11
0
    def test_events_batch_error(self):
        """
        When error occurs after first batch of events are processed, then it
        logs errors and does not try to fetch again
        """
        events = [{'tenantId': '1234', 'groupId': 'scal44', 'policyId': 'pol4{}'.format(i),
                   'trigger': 'now', 'cron': None, 'bucket': 1} for i in range(100)]
        self.returns = [events, ValueError('some')]

        d = check_events_in_bucket(self.log, self.mock_store, 1, 'now', 100)

        self.successResultOf(d)
        self.log.bind.return_value.err.assert_called_once_with(CheckFailure(ValueError))
        self.assertEqual(self.mock_store.fetch_and_delete.mock_calls,
                         [mock.call(1, 'now', 100)] * 2)
        self.process_events.assert_called_once_with(events, self.mock_store,
                                                    self.log.bind())
Exemplo n.º 12
0
    def test_events_more_limit(self):
        """
        When events fetched > 100, they are processed in 2 batches
        """
        events1 = [{'tenantId': '1234', 'groupId': 'scal44', 'policyId': 'pol4{}'.format(i),
                    'trigger': 'now', 'cron': None, 'bucket': 1} for i in range(100)]
        events2 = [{'tenantId': '1235', 'groupId': 'scal54', 'policyId': 'pol4{}'.format(i),
                    'trigger': 'now', 'cron': None, 'bucket': 1} for i in range(10)]
        self.returns = [events1, events2]

        d = check_events_in_bucket(self.log, self.mock_store, 1, 'now', 100)

        self.successResultOf(d)
        self.assertEqual(self.mock_store.fetch_and_delete.mock_calls,
                         [mock.call(1, 'now', 100)] * 2)
        self.assertEqual(self.process_events.mock_calls,
                         [mock.call(events1, self.mock_store, self.log.bind()),
                          mock.call(events2, self.mock_store, self.log.bind())])
Exemplo n.º 13
0
    def test_events_in_limit(self):
        """
        When events fetched < 100, they are processed
        """
        events = [
            {
                "tenantId": "1234",
                "groupId": "scal44",
                "policyId": "pol4{}".format(i),
                "trigger": "now",
                "cron": None,
                "bucket": 1,
            }
            for i in range(10)
        ]
        self.returns = [events]

        d = check_events_in_bucket(self.log, "disp", self.mock_store, 1, "utcnow", 100)

        self.successResultOf(d)
        # Ensure fetch_and_delete and process_events is called only once
        self.mock_store.fetch_and_delete.assert_called_once_with(1, "utcnow", 100)
        self.process_events.assert_called_once_with(events, "disp", self.mock_store, self.log.bind())
Exemplo n.º 14
0
    def test_events_in_limit(self):
        """
        When events fetched < 100, they are processed
        """
        events = [{
            'tenantId': '1234',
            'groupId': 'scal44',
            'policyId': 'pol4{}'.format(i),
            'trigger': 'now',
            'cron': None,
            'bucket': 1
        } for i in range(10)]
        self.returns = [events]

        d = check_events_in_bucket(self.log, "disp", self.mock_store, 1,
                                   'utcnow', 100)

        self.successResultOf(d)
        # Ensure fetch_and_delete and process_events is called only once
        self.mock_store.fetch_and_delete.assert_called_once_with(
            1, 'utcnow', 100)
        self.process_events.assert_called_once_with(events, "disp",
                                                    self.mock_store,
                                                    self.log.bind())
Exemplo n.º 15
0
    def test_events_batch_error(self):
        """
        When error occurs after first batch of events are processed, then it
        logs errors and does not try to fetch again.
        """
        events = [
            {
                "tenantId": "1234",
                "groupId": "scal44",
                "policyId": "pol4{}".format(i),
                "trigger": "now",
                "cron": None,
                "bucket": 1,
            }
            for i in range(100)
        ]
        self.returns = [events, ValueError("some")]

        d = check_events_in_bucket(self.log, "disp", self.mock_store, 1, "now", 100)

        self.successResultOf(d)
        self.log.bind.return_value.err.assert_called_once_with(CheckFailure(ValueError))
        self.assertEqual(self.mock_store.fetch_and_delete.mock_calls, [mock.call(1, "now", 100)] * 2)
        self.process_events.assert_called_once_with(events, "disp", self.mock_store, self.log.bind())