def test_get_jobs_for_user_different_users_some_jobs(self): num_of_jobs_user1 = ONE # Add one job to the tabfile for user1 test_jobs_user1 = create_test_tab(num_of_jobs_user1, user1) api.set_jobs(test_jobs_user1, user1) jobs_list_user1 = api.get_jobs_for_user(user1) num_of_jobs_user2 = ZERO # Add zero jobs to the tabfile for user2 test_jobs_user2 = create_test_tab(num_of_jobs_user2, user2) api.set_jobs(test_jobs_user2, user2) jobs_list_user2 = api.get_jobs_for_user(user2) num_of_jobs_user3 = SOME # Add some jobs to the tabfile for user3 test_jobs_user3 = create_test_tab(num_of_jobs_user3, user3) api.set_jobs(test_jobs_user3, user3) jobs_list_user3 = api.get_jobs_for_user(user3) # Verify that the jobs list for user1 contains # the correct number of jobs self.assertEqual(len(jobs_list_user1), num_of_jobs_user1) # Verify that the jobs list for user2 contains # the correct number of jobs self.assertEqual(len(jobs_list_user2), num_of_jobs_user2) # Verify that the jobs list for user3 contains # the correct number of jobs self.assertEqual(len(jobs_list_user3), num_of_jobs_user3) # Verify that the information we get matches what was set check_job_fields(self, jobs_list_user1, test_jobs_user1, user1) # Verify that the information we get matches what was set check_job_fields(self, jobs_list_user2, test_jobs_user2, user2) # Verify that the information we get matches what was set check_job_fields(self, jobs_list_user3, test_jobs_user3, user3)
def test_remove_schedules_many_schedules_random_schedules(self): # Number of jobs and floor(requests) + ceiling(requests) are equal num_of_jobs = MANY num_of_schedules = num_of_jobs # Leave one schedule remaining for comparison at the end num_of_requests = num_of_jobs - 1 # Create a crontab with many jobs test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) jobs_list = api.get_jobs() test_workers = [] # Create one worker and add them to a list for bookkeeping test_workers.append(api.create_worker()) test_schedules = [] for schedule in range(num_of_schedules): test_schedules.append(api.Schedule(datetime.now(), test_jobs[schedule], test_workers[0])) api.add_schedules(test_schedules) # Kill number of requests random schedules in the list for request in range(num_of_requests): random_schedule = random.randrange(len(test_schedules)) api.remove_schedule(test_schedules.pop(random_schedule)) schedules_list = [] schedules_list = api.get_schedules(test_workers[0]) # Verify that the schedules list contains exactly one schedule self.assertEqual(len(schedules_list), 1) # Verify that the correct remaining schedule is still in the list check_schedule_fields(self, schedules_list, test_schedules)
def test_remove_schedule_many_schedules(self): # Number of jobs and floor(requests) + ceiling(requests) are equal num_of_jobs = MANY num_of_schedules = num_of_jobs # Automatic flooring care of Python num_of_requests = num_of_jobs / 2 # Create a crontab with many jobs test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) jobs_list = api.get_jobs() test_workers = [] # Create one worker and add them to a list for bookkeeping test_workers.append(api.create_worker()) # Create a schedule for many jobs test_schedules = [] for schedule in range(num_of_schedules): test_schedules.append( api.Schedule(datetime.now(), test_jobs[schedule], test_workers[0])) api.add_schedules(test_schedules) # Kill the floor of half of the workers in the list for request in range(num_of_requests): api.remove_schedule(test_schedules.pop()) schedules_list = api.get_schedules(test_workers[0]) # Verify that the correct remaining schedules are still in the list check_schedule_fields(self, schedules_list, test_schedules) # Remove all remaining test schedules while test_schedules: api.remove_schedule(test_schedules.pop()) # Try to get schedules from an empty pool schedules_list = api.get_schedules(test_workers[0]) # Verify that the next worker does not exist self.assertFalse(len(schedules_list))
def test_remove_schedules_many_schedules_random_schedules(self): # Number of jobs and floor(requests) + ceiling(requests) are equal num_of_jobs = MANY num_of_schedules = num_of_jobs # Leave one schedule remaining for comparison at the end num_of_requests = num_of_jobs - 1 # Create a crontab with many jobs test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) jobs_list = api.get_jobs() test_workers = [] # Create one worker and add them to a list for bookkeeping test_workers.append(api.create_worker()) test_schedules = [] for schedule in range(num_of_schedules): test_schedules.append( api.Schedule(datetime.now(), test_jobs[schedule], test_workers[0])) api.add_schedules(test_schedules) # Kill number of requests random schedules in the list for request in range(num_of_requests): random_schedule = random.randrange(len(test_schedules)) api.remove_schedule(test_schedules.pop(random_schedule)) schedules_list = [] schedules_list = api.get_schedules(test_workers[0]) # Verify that the schedules list contains exactly one schedule self.assertEqual(len(schedules_list), 1) # Verify that the correct remaining schedule is still in the list check_schedule_fields(self, schedules_list, test_schedules)
def test_remove_schedule_many_schedules(self): # Number of jobs and floor(requests) + ceiling(requests) are equal num_of_jobs = MANY num_of_schedules = num_of_jobs # Automatic flooring care of Python num_of_requests = num_of_jobs / 2 # Create a crontab with many jobs test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) jobs_list = api.get_jobs() test_workers = [] # Create one worker and add them to a list for bookkeeping test_workers.append(api.create_worker()) # Create a schedule for many jobs test_schedules = [] for schedule in range(num_of_schedules): test_schedules.append(api.Schedule(datetime.now(), test_jobs[schedule], test_workers[0])) api.add_schedules(test_schedules) # Kill the floor of half of the workers in the list for request in range(num_of_requests): api.remove_schedule(test_schedules.pop()) schedules_list = api.get_schedules(test_workers[0]) # Verify that the correct remaining schedules are still in the list check_schedule_fields(self, schedules_list, test_schedules) # Remove all remaining test schedules while test_schedules: api.remove_schedule(test_schedules.pop()) # Try to get schedules from an empty pool schedules_list = api.get_schedules(test_workers[0]) # Verify that the next worker does not exist self.assertFalse(len(schedules_list))
def test_get_schedules_many_workers_many_schedules(self): num_of_jobs = MANY num_of_schedules = num_of_jobs num_of_workers = num_of_schedules num_of_workers = MANY test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) jobs_list = api.get_jobs() test_workers = [] # Create many workers and add them to a list for bookkeeping for worker in range(num_of_workers): test_workers.append(api.create_worker()) # Create a schedule belonging to each worker representing the only job test_schedules = [] for worker in test_workers: for job in jobs_list: test_schedules.append(api.Schedule(datetime.now(), job, worker)) api.add_schedules(test_schedules) # Aggregate each worker's schedules into a single list for comparison # with test schedules schedules_for_workers = [] for worker in test_workers: schedules_list = api.get_schedules(worker) schedules_for_workers.extend(schedules_list) # Verify that the information we get matches what was set check_schedule_fields(self, schedules_for_workers, test_schedules)
def test_get_crontab_empty_jobs(self): num_of_jobs = ZERO # Create a crontab with zero jobs test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) crontab = api.get_crontab(user1) # Verify that the crontab is empty self.assertEqual(crontab, False)
def test_get_jobs_for_user_empty_jobs(self): num_of_jobs = ZERO # Create a crontab with zero jobs test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) jobs_list_user1 = api.get_jobs_for_user(user1) # Verify that the jobs list for user1 is empty self.assertFalse(len(jobs_list_user1))
def test_get_jobs_many_jobs(self): num_of_jobs = MANY # Create a crontab with many jobs test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) jobs_list = api.get_jobs() self.assertEqual(len(jobs_list), num_of_jobs) # Verify that the information we get matches what was set check_job_fields(self, jobs_list, test_jobs, user1)
def test_get_crontab_different_users_many_jobs(self): num_of_jobs = MANY # Create a crontab with many jobs for another user from crontab owner test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) with open(TAB_FILE, 'r') as tabfile: crontab = tabfile.read() api.set_crontab(crontab, user2) test_crontab = api.get_crontab(user2) self.assertEqual(crontab, test_crontab) # Append crontab for another user test_jobs = create_test_tab(num_of_jobs, user3) api.set_jobs(test_jobs, user3) with open(TAB_FILE, 'r') as tabfile: crontab = tabfile.read() api.set_crontab(crontab, user3) test_crontab = api.get_crontab(user3) self.assertEqual(crontab, test_crontab)
def test_get_jobs_for_user_many_jobs(self): num_of_jobs = MANY # Create a crontab with many jobs test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) jobs_list_user1 = api.get_jobs_for_user(user1) # Verify that the jobs list for user1 # contains the correct number of jobs self.assertEqual(len(jobs_list_user1), num_of_jobs)
def test_get_jobs_one_job(self): num_of_jobs = ONE # Create a crontab with one job test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) jobs_list = api.get_jobs() # Verify that the jobs list contains exactly one job self.assertEqual(len(jobs_list), num_of_jobs) # Verify that the information we get matches what was set check_job_fields(self, jobs_list, test_jobs, user1)
def test_get_crontab_many_jobs(self): num_of_jobs = MANY # Create a crontab with many jobs test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) with open(TAB_FILE, 'r') as tabfile: crontab = tabfile.read() api.set_crontab(crontab, user1) test_crontab = api.get_crontab(user1) self.assertEqual(crontab, test_crontab)
def test_get_jobs_empty_jobs(self): num_of_jobs = ZERO # Create a crontab with zero jobs test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) jobs_list = api.get_jobs() # Verify that the jobs list is empty self.assertEqual(len(jobs_list), num_of_jobs) # Verify that the information we get matches what was set check_job_fields(self, jobs_list, test_jobs, user1)
def test_get_jobs_for_user_some_users_empty_jobs(self): jobs_list_user4 = api.get_jobs_for_user(user4) # Verify that the jobs_list for user4 is empty self.assertFalse(len(jobs_list_user4)) num_of_jobs_user1 = ONE # Add one job to the tabfile user1 test_jobs_user1 = create_test_tab(num_of_jobs_user1, user1) api.set_jobs(test_jobs_user1, user1) jobs_list_user4 = api.get_jobs_for_user(user4) # Verify that the jobs_list for user4 is empty self.assertFalse(len(jobs_list_user4))
def test_set_crontab_one_job(self): num_of_jobs = ONE # Create a crontab with one jobs test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) with open(TAB_FILE, 'r') as tabfile: crontab = tabfile.read() test_crontab = api.get_crontab(user1) self.assertEquals(test_crontab, False) api.set_crontab(crontab, user1) test_crontab = api.get_crontab(user1) self.assertEqual(crontab, test_crontab)
def test_set_job_time_one_job(self): checkpoint1 = datetime.now() num_of_jobs = ONE # Create a crontab with one job test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) # Pop the only job in the list to modify its time job = test_jobs.pop() api.set_job_time(job) checkpoint2 = datetime.now() # Verify that the job's last time run was updated correctly self.assertTrue(job.last_time_run > checkpoint1 and job.last_time_run < checkpoint2)
def test_set_job_time_random_job_from_many(self): checkpoint1 = datetime.now() num_of_jobs = MANY # Create a crontab with many jobs test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) # Pop a random job in list to modify its time job = test_jobs.pop(random.randrange(len(test_jobs))) api.set_job_time(job) checkpoint2 = datetime.now() # Verify that the job's last time run was updated correctly self.assertTrue(job.last_time_run > checkpoint1 and job.last_time_run < checkpoint2)
def test_set_jobs_empty_jobs(self): checkpoint1 = datetime.now() num_of_jobs = ZERO # Create a crontab with zero jobs test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) # Query metadata for the database file creation time db_creation_time = datetime.fromtimestamp( os.stat(api.FILE_NAME).st_mtime) # We are comparing different orders of time, so offset by one second new_time = db_creation_time.replace(second=db_creation_time.second + 1) checkpoint2 = datetime.now() checkpoint2 = checkpoint2.replace(second=checkpoint2.second + 1) # Verify that the jobs have been set just now self.assertTrue(new_time > checkpoint1 and new_time < checkpoint2)
def test_add_schedules_one_job_one_schedule(self): num_of_jobs = ONE num_of_schedules = num_of_jobs # Create a crontab with one job test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) jobs_list = api.get_jobs() test_workers = [] # Create one worker and add them to a list for bookkeeping test_workers.append(api.create_worker()) # Create a schedule for the only job test_schedules = [] test_schedules.append( api.Schedule(datetime.now(), test_jobs[0], test_workers[0])) api.add_schedules(test_schedules) schedules_list = api.get_schedules(test_workers[0]) # Verify that the schedules list contains exactly one schedule self.assertEqual(len(schedules_list), num_of_schedules)
def test_get_schedules_one_worker_many_schedules(self): num_of_jobs = MANY num_of_schedules = num_of_jobs test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) jobs_list = api.get_jobs() test_workers = [] # Create one worker and add them to a list for bookkeeping test_workers.append(api.create_worker()) # Create a schedule for the only job test_schedules = [] for job in range(num_of_jobs): test_schedules.append( api.Schedule(datetime.now(), test_jobs[job], test_workers[0])) api.add_schedules(test_schedules) schedules_list = api.get_schedules(test_workers[0]) # Verify that the information we get matches what was set check_schedule_fields(self, schedules_list, test_schedules)
def test_get_schedules_one_worker_many_schedules(self): num_of_jobs = MANY num_of_schedules = num_of_jobs test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) jobs_list = api.get_jobs() test_workers = [] # Create one worker and add them to a list for bookkeeping test_workers.append(api.create_worker()) # Create a schedule for the only job test_schedules = [] for job in range(num_of_jobs): test_schedules.append(api.Schedule(datetime.now(), test_jobs[job], test_workers[0])) api.add_schedules(test_schedules) schedules_list = api.get_schedules(test_workers[0]) # Verify that the information we get matches what was set check_schedule_fields(self, schedules_list, test_schedules)
def test_add_schedules_one_job_one_schedule(self): num_of_jobs = ONE num_of_schedules = num_of_jobs # Create a crontab with one job test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) jobs_list = api.get_jobs() test_workers = [] # Create one worker and add them to a list for bookkeeping test_workers.append(api.create_worker()) # Create a schedule for the only job test_schedules = [] test_schedules.append(api.Schedule(datetime.now(), test_jobs[0], test_workers[0])) api.add_schedules(test_schedules) schedules_list = api.get_schedules(test_workers[0]) # Verify that the schedules list contains exactly one schedule self.assertEqual(len(schedules_list), num_of_schedules)
def test_remove_schedule_one_schedule(self): num_of_jobs = ONE num_of_schedules = num_of_jobs # Create a crontab with one job test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) jobs_list = api.get_jobs() test_workers = [] # Create one worker and add them to a list for bookkeeping test_workers.append(api.create_worker()) # Create a schedule for the only job test_schedules = [] test_schedules.append( api.Schedule(datetime.now(), test_jobs[0], test_workers[0])) api.add_schedules(test_schedules) # Kill the only schedule in the list api.remove_schedule(test_schedules[0]) schedules_list = api.get_schedules(test_workers[0]) # Verify that the schedules list is empty self.assertFalse(len(schedules_list))
def test_remove_schedule_one_schedule(self): num_of_jobs = ONE num_of_schedules = num_of_jobs # Create a crontab with one job test_jobs = create_test_tab(num_of_jobs, user1) api.set_jobs(test_jobs, user1) jobs_list = api.get_jobs() test_workers = [] # Create one worker and add them to a list for bookkeeping test_workers.append(api.create_worker()) # Create a schedule for the only job test_schedules = [] test_schedules.append(api.Schedule(datetime.now(), test_jobs[0], test_workers[0])) api.add_schedules(test_schedules) # Kill the only schedule in the list api.remove_schedule(test_schedules[0]) schedules_list = api.get_schedules(test_workers[0]) # Verify that the schedules list is empty self.assertFalse(len(schedules_list))