def test_legacy_new_crash_source_basics(self):
        m_transaction_executor_class = mock.Mock()

        config = DotDict()
        database = mock.Mock()
        config.database_class = mock.Mock(return_value=database)
        config.transaction_executor_class = m_transaction_executor_class
        config.batchJobLimit = 10

        LegacyNewCrashSource(config, processor_name='dwight-1234')

        eq_(m_transaction_executor_class.call_count, 1)
        m_transaction_executor_class.assert_called_with(config, database, None)
    def test_normal_jobs_iter_simple(self):
        m_transaction = mock.Mock()
        m_transaction_executor_class = mock.Mock(return_value=m_transaction)
        config = DotDict()
        config.database_class = mock.Mock()
        config.transaction_executor_class = m_transaction_executor_class
        config.batchJobLimit = 10
        config.logger = mock.Mock()
        config.pollingInterval = timedelta(0, 0, 0, 0)

        transaction_returns = (
          'priority_jobs_17',
          [  # fetchall
              (1, '1234', 1),
              (2, '2345', 1),
              (3, '3456', 1),
          ],
          [  # nothing to do
          ],
          [
              (4, '4567', 1),
              (5, '5678', 1),
          ],
          None,  # drop table
        )
        m_transaction.side_effect = sequencer(*transaction_returns)

        exepected_sequence = (
            (1, '1234', 1),
            (2, '2345', 1),
            (3, '3456', 1),
            None,
            (4, '4567', 1),
            (5, '5678', 1),
        )

        new_crash_source = LegacyNewCrashSource(config,
                                       processor_name='dwight')
        new_crash_source.processor_id = 17
        for x, y in zip(new_crash_source._normal_jobs_iter(),
                        exepected_sequence):
            self.assertEqual(x, y)

        expected_get_normal_sql = (
          "select"
          "    j.id,"
          "    j.uuid,"
          "    priority "
          "from"
          "    jobs j "
          "where"
          "    j.owner = 17"
          "    and j.starteddatetime is null "
          "order by queueddatetime"
          "  limit 10"
        )
        expected_transactions = (
            ((new_crash_source._create_priority_jobs,),),
            ((execute_query_fetchall, expected_get_normal_sql,),),
            ((execute_query_fetchall, expected_get_normal_sql,),),
            ((execute_query_fetchall, expected_get_normal_sql,),),
            ((execute_query_fetchall, expected_get_normal_sql,),),
            ((execute_no_results, "drop table priority_jobs_17"),),
        )
        for actual, expected in zip(m_transaction.call_args_list,
                                    expected_transactions):
            self.assertEqual(actual, expected)
    def test_priority_jobs_iter_simple(self):
        m_transaction = mock.Mock()
        m_transaction_executor_class = mock.Mock(return_value=m_transaction)
        config = DotDict()
        config.database_class = mock.Mock()
        config.transaction_executor_class = m_transaction_executor_class
        config.batchJobLimit = 10
        config.logger = mock.Mock()

        transaction_returns = (
          'priority_jobs_17',
          [  # fetchall
              (1, '1234', 1, None),
              (2, '2345', 1, None),
              (3, '3456', 1, None),
          ],
          None,  # delete
          None,  # delete
          None,  # delete
          [  # nothing to do
          ],
          [
              (4, '4567', 1, None),
              (5, '5678', 1, None),
          ],
          None,  # delete
          None,  # delete
          [  # nothing to do
          ],
          None,  # drop table
        )
        m_transaction.side_effect = sequencer(*transaction_returns)

        expected_sequence = (
            (1, '1234', 1),
            (2, '2345', 1),
            (3, '3456', 1),
            None,
            (4, '4567', 1),
            (5, '5678', 1),
        )

        new_crash_source = LegacyNewCrashSource(config,
                                       processor_name='dwight')

        for x, y in zip(new_crash_source._priority_jobs_iter(),
                        expected_sequence):
            self.assertEqual(x, y)

        expected_get_priority_jobs_sql = (
          "select"
          "    j.id,"
          "    pj.uuid,"
          "    1,"
          "    j.starteddatetime "
          "from"
          "    jobs j right join priority_jobs_17 pj on j.uuid = pj.uuid"
        )
        expected_delete_one_priority_job_sql = (
          "delete from priority_jobs_17 where uuid = %s"
        )
        expected_transactions = (
            ((new_crash_source._create_priority_jobs,),),
            ((execute_query_fetchall, expected_get_priority_jobs_sql,),),
            ((execute_no_results, expected_delete_one_priority_job_sql,
                ('1234',)),),
            ((execute_no_results, expected_delete_one_priority_job_sql,
                ('2345',)),),
            ((execute_no_results, expected_delete_one_priority_job_sql,
                ('3456',)),),
            ((execute_query_fetchall, expected_get_priority_jobs_sql,),),
            ((execute_query_fetchall, expected_get_priority_jobs_sql,),),
            ((execute_no_results, expected_delete_one_priority_job_sql,
                ('4567',)),),
            ((execute_no_results, expected_delete_one_priority_job_sql,
                ('5678',)),),
            ((execute_query_fetchall, expected_get_priority_jobs_sql,),),
            ((execute_no_results, "drop table priority_jobs_17"),),
        )
        for actual, expected in zip(m_transaction.call_args_list,
                                    expected_transactions):
            self.assertEqual(actual, expected)
    def test_normal_jobs_iter_simple(self):
        m_transaction = mock.Mock()
        m_transaction_executor_class = mock.Mock(return_value=m_transaction)
        config = DotDict()
        config.database_class = mock.Mock()
        config.transaction_executor_class = m_transaction_executor_class
        config.batchJobLimit = 10
        config.logger = mock.Mock()
        config.pollingInterval = timedelta(0, 0, 0, 0)

        transaction_returns = (
            'priority_jobs_17',
            [  # fetchall
                (1, '1234', 1),
                (2, '2345', 1),
                (3, '3456', 1),
            ],
            [  # nothing to do
            ],
            [
                (4, '4567', 1),
                (5, '5678', 1),
            ],
            None,  # drop table
        )
        m_transaction.side_effect = sequencer(*transaction_returns)

        exepected_sequence = (
            (1, '1234', 1),
            (2, '2345', 1),
            (3, '3456', 1),
            None,
            (4, '4567', 1),
            (5, '5678', 1),
        )

        new_crash_source = LegacyNewCrashSource(config,
                                                processor_name='dwight')
        new_crash_source.processor_id = 17
        for x, y in zip(new_crash_source._normal_jobs_iter(),
                        exepected_sequence):
            eq_(x, y)

        expected_get_normal_sql = ("select"
                                   "    j.id,"
                                   "    j.uuid,"
                                   "    priority "
                                   "from"
                                   "    jobs j "
                                   "where"
                                   "    j.owner = 17"
                                   "    and j.starteddatetime is null "
                                   "order by queueddatetime"
                                   "  limit 10")
        expected_transactions = (
            ((new_crash_source._create_priority_jobs, ), ),
            ((
                execute_query_fetchall,
                expected_get_normal_sql,
            ), ),
            ((
                execute_query_fetchall,
                expected_get_normal_sql,
            ), ),
            ((
                execute_query_fetchall,
                expected_get_normal_sql,
            ), ),
            ((
                execute_query_fetchall,
                expected_get_normal_sql,
            ), ),
            ((execute_no_results, "drop table priority_jobs_17"), ),
        )
        for actual, expected in zip(m_transaction.call_args_list,
                                    expected_transactions):
            eq_(actual, expected)
    def test_priority_jobs_iter_simple(self):
        m_transaction = mock.Mock()
        m_transaction_executor_class = mock.Mock(return_value=m_transaction)
        config = DotDict()
        config.database_class = mock.Mock()
        config.transaction_executor_class = m_transaction_executor_class
        config.batchJobLimit = 10
        config.logger = mock.Mock()

        transaction_returns = (
            'priority_jobs_17',
            [  # fetchall
                (1, '1234', 1, None),
                (2, '2345', 1, None),
                (3, '3456', 1, None),
            ],
            None,  # delete
            None,  # delete
            None,  # delete
            [  # nothing to do
            ],
            [
                (4, '4567', 1, None),
                (5, '5678', 1, None),
            ],
            None,  # delete
            None,  # delete
            [  # nothing to do
            ],
            None,  # drop table
        )
        m_transaction.side_effect = sequencer(*transaction_returns)

        expected_sequence = (
            (1, '1234', 1),
            (2, '2345', 1),
            (3, '3456', 1),
            None,
            (4, '4567', 1),
            (5, '5678', 1),
        )

        new_crash_source = LegacyNewCrashSource(config,
                                                processor_name='dwight')

        for x, y in zip(new_crash_source._priority_jobs_iter(),
                        expected_sequence):
            eq_(x, y)

        expected_get_priority_jobs_sql = (
            "select"
            "    j.id,"
            "    pj.uuid,"
            "    1,"
            "    j.starteddatetime "
            "from"
            "    jobs j right join priority_jobs_17 pj on j.uuid = pj.uuid")
        expected_delete_one_priority_job_sql = (
            "delete from priority_jobs_17 where uuid = %s")
        expected_transactions = (
            ((new_crash_source._create_priority_jobs, ), ),
            ((
                execute_query_fetchall,
                expected_get_priority_jobs_sql,
            ), ),
            ((execute_no_results, expected_delete_one_priority_job_sql,
              ('1234', )), ),
            ((execute_no_results, expected_delete_one_priority_job_sql,
              ('2345', )), ),
            ((execute_no_results, expected_delete_one_priority_job_sql,
              ('3456', )), ),
            ((
                execute_query_fetchall,
                expected_get_priority_jobs_sql,
            ), ),
            ((
                execute_query_fetchall,
                expected_get_priority_jobs_sql,
            ), ),
            ((execute_no_results, expected_delete_one_priority_job_sql,
              ('4567', )), ),
            ((execute_no_results, expected_delete_one_priority_job_sql,
              ('5678', )), ),
            ((
                execute_query_fetchall,
                expected_get_priority_jobs_sql,
            ), ),
            ((execute_no_results, "drop table priority_jobs_17"), ),
        )
        for actual, expected in zip(m_transaction.call_args_list,
                                    expected_transactions):
            eq_(actual, expected)