def test_get_jobs(self):
     """Check Database._get_all_jobs_in_state()"""
     db = MemoryDatabase(Job)
     db._connect(None)
     db._create_tables()
     make_test_jobs(db.conn)
     jobs = list(db._get_all_jobs_in_state('INCOMING'))
     self.assertEqual(len(jobs), 1)
     self.assertEqual(jobs[0]._metadata['name'], 'job1')
     self.assertEqual(jobs[0]._metadata['runner_id'], 'SGE-job-1')
     jobs = list(db._get_all_jobs_in_state('RUNNING'))
     self.assertEqual(len(jobs), 2)
     jobs = list(db._get_all_jobs_in_state('INCOMING', name='job1'))
     self.assertEqual(len(jobs), 1)
     jobs = list(db._get_all_jobs_in_state('INCOMING', name='job2'))
     self.assertEqual(len(jobs), 0)
     jobs = list(db._get_all_jobs_in_state('INCOMING',
                                           after_time='expire_time'))
     self.assertEqual(len(jobs), 0)
     jobs = list(db._get_all_jobs_in_state('RUNNING',
                                           after_time='expire_time'))
     self.assertEqual(len(jobs), 1)
     self.assertEqual(jobs[0]._metadata['name'], 'job3')
     jobs = list(db._get_all_jobs_in_state('COMPLETED',
                                           after_time='expire_time'))
     self.assertEqual(len(jobs), 0)
 def test_count_jobs(self):
     """Check Database._count_all_jobs_in_state()"""
     db = MemoryDatabase(Job)
     db._connect(None)
     db._create_tables()
     make_test_jobs(db.conn)
     self.assertEqual(db._count_all_jobs_in_state('INCOMING'), 1)
     self.assertEqual(db._count_all_jobs_in_state('RUNNING'), 2)
     self.assertEqual(db._count_all_jobs_in_state('EXPIRED'), 0)
 def test_update_job(self):
     """Check Database._update_job()"""
     db = MemoryDatabase(Job)
     db._connect(None)
     db._create_tables()
     make_test_jobs(db.conn)
     job = list(db._get_all_jobs_in_state('INCOMING'))[0]
     job._metadata['runner_id'] = 'new-SGE-ID'
     db._update_job(job._metadata, 'INCOMING')
     # Get a fresh copy of the job from the database
     newjob = list(db._get_all_jobs_in_state('INCOMING'))[0]
     self.assert_(job is not newjob)
     self.assertEqual(newjob._metadata['runner_id'], 'new-SGE-ID')
 def test_create_tables(self):
     """Make sure that Database._create_tables() makes tables and indexes"""
     db = MemoryDatabase(Job)
     db._connect(None)
     db._create_tables()
     c = db.conn.cursor()
     c.execute('DROP INDEX state_index')
     for bad_index in ('GARBAGE', 'state', 'name_index'):
         self.assertRaises(sqlite3.OperationalError, c.execute,
                           'DROP INDEX ' + bad_index)
     c.execute('DROP TABLE jobs')
     self.assertRaises(sqlite3.OperationalError, c.execute,
                       'DROP TABLE GARBAGE')
     db.conn.commit()
    def test_order_by(self):
        """Test Database._get_all_jobs_in_state() order_by parameter"""
        db = MemoryDatabase(Job)
        db._connect(None)
        db._create_tables()
        make_test_jobs(db.conn)
        jobs = list(db._get_all_jobs_in_state('RUNNING'))
        # Jobs should come out in the same order they were inserted
        self.assertEqual([x._metadata['name'] for x in jobs], ['job2', 'job3'])

        jobs = list(db._get_all_jobs_in_state('RUNNING',
                                              order_by='submit_time'))
        # Jobs should be sorted by submit time
        self.assertEqual([x._metadata['name'] for x in jobs], ['job3', 'job2'])
 def test_drop_tables(self):
     """Check Database._drop_tables()"""
     db = MemoryDatabase(Job)
     db._connect(None)
     c = db.conn.cursor()
     c.execute('CREATE TABLE jobs (test TEXT)')
     db.conn.commit()
     # Should work regardless of whether tables exist
     db._drop_tables()
     # It should have deleted the jobs table and state index
     self.assertRaises(sqlite3.OperationalError, c.execute,
                       'DROP TABLE jobs')
     self.assertRaises(sqlite3.OperationalError, c.execute,
                       'DROP INDEX state_index')
 def test_change_job_state(self):
     """Check Database._change_job_state()"""
     db = MemoryDatabase(Job)
     db._connect(None)
     db._create_tables()
     make_test_jobs(db.conn)
     job = list(db._get_all_jobs_in_state('INCOMING'))[0]
     # side effect: should update _metadata
     job._metadata['runner_id'] = 'new-SGE-ID'
     db._change_job_state(job._metadata, 'INCOMING', 'FAILED')
     jobs = list(db._get_all_jobs_in_state('INCOMING'))
     self.assertEqual(len(jobs), 0)
     jobs = list(db._get_all_jobs_in_state('FAILED'))
     self.assertEqual(len(jobs), 1)
     self.assertEqual(jobs[0]._metadata['runner_id'], 'new-SGE-ID')