END_TEST START_TEST(decrement_queued_jobs_test) { users.lock(); users.clear(); user_info *ui = (user_info *)calloc(1,sizeof(user_info)); ui->user_name = strdup("tom"); ui->num_jobs_queued = 1; users.insert(ui,ui->user_name); users.unlock(); fail_unless(decrement_queued_jobs(&users, (char *)"bob") == THING_NOT_FOUND, "decremented for non-existent user"); fail_unless(decrement_queued_jobs(&users, (char *)"tom") == 0, "couldn't decrement for tom?"); fail_unless(get_num_queued(&users, "tom") == 0, "didn't actually decrement tom"); fail_unless(decrement_queued_jobs(&users, (char *)"tom") == 0, "couldn't decrement for tom?"); fail_unless(get_num_queued(&users, "tom") == 0, "didn't actually decrement tom"); }
END_TEST START_TEST(get_num_queued_test) { unsigned int queued; users.lock(); users.clear(); users.unlock(); user_info ui; ui.user_name = (char *)"tom"; ui.num_jobs_queued = 1; users.lock(); users.insert(&ui,ui.user_name); users.unlock(); queued = get_num_queued(&users, "bob"); fail_unless(queued == 0, "incorrect queued count for bob"); queued = get_num_queued(&users, "tom"); fail_unless(queued == 1, "incorrect queued count for tom"); }
END_TEST START_TEST(increment_queued_jobs_test) { job pjob; memset(&pjob, 0, sizeof(pjob)); users.lock(); users.clear(); user_info *ui = (user_info *)calloc(1,sizeof(user_info)); ui->user_name = strdup("tom"); ui->num_jobs_queued = 1; users.insert(ui,ui->user_name); ui = (user_info *)calloc(1,sizeof(user_info)); ui->user_name = strdup("bob"); ui->num_jobs_queued = 0; users.insert(ui,ui->user_name); users.unlock(); fail_unless(increment_queued_jobs(&users, (char *)"tom", &pjob) == 0, "can't increment queued jobs"); fail_unless(increment_queued_jobs(&users, (char *)"bob", &pjob) == 0, "can't increment queued jobs"); // after 1 increment the count should be 2 because initialize_user_info() starts out with tom at // 1 instead of 0, as a normal program would start. Its done this way for the decrement code. fail_unless(get_num_queued(&users, "tom") == 2, "didn't actually increment tom 1"); fail_unless(increment_queued_jobs(&users, strdup("tom@napali"), &pjob) == 0); fail_unless(get_num_queued(&users, "tom") == 3, "didn't actually increment tom 2"); }
int can_queue_new_job( char *user_name, job *pjob) { long max_queuable = -1; int can_queue_another = TRUE; unsigned int num_queued = 0; unsigned int num_to_add; get_svr_attr_l(SRV_ATR_MaxUserQueuable, &max_queuable); if (max_queuable >= 0) { num_to_add = count_jobs_submitted(pjob); num_queued = get_num_queued(&users, user_name); if (num_queued + num_to_add > (unsigned int)max_queuable) can_queue_another = FALSE; } return(can_queue_another); } /* END can_queue_new_job() */