16 #include <scheduler.h>
22 char sqltmp[1024] = {0};
46 FO_ASSERT_PTR_NOT_NULL(scheduler->
db_conn);
49 sql = g_string_new(sqltmp);
50 g_string_append(sql,
"'users';");
57 if(PQresultStatus(db_result) == PGRES_TUPLES_OK && PQntuples(db_result) != 0)
60 FO_ASSERT_STRING_EQUAL(g_strdup(PQgetvalue(db_result, 0, 0)),
"user_pk");
61 FO_ASSERT_STRING_EQUAL(g_strdup(PQgetvalue(db_result, 1, 0)),
"user_name");
62 FO_ASSERT_STRING_EQUAL(g_strdup(PQgetvalue(db_result, 2, 0)),
"root_folder_fk");
63 FO_ASSERT_STRING_EQUAL(g_strdup(PQgetvalue(db_result, 3, 0)),
"user_desc");
64 FO_ASSERT_STRING_EQUAL(g_strdup(PQgetvalue(db_result, 4, 0)),
"user_seed");
68 g_string_free(sql, TRUE);
84 FO_ASSERT_PTR_NULL(scheduler->
db_conn);
86 FO_ASSERT_PTR_NOT_NULL(scheduler->
db_conn);
110 FO_ASSERT_PTR_NULL(scheduler->
db_conn);
112 FO_ASSERT_PTR_NOT_NULL(scheduler->
db_conn);
117 sprintf(sql,
"SELECT * FROM job WHERE job_name = 'testing file' ORDER BY job_pk DESC LIMIT 1;");
119 if(PQresultStatus(db_result) == PGRES_TUPLES_OK && PQntuples(db_result) != 0)
121 FO_ASSERT_STRING_EQUAL(PQget(db_result, 0,
"job_name"),
"testing file");
122 FO_ASSERT_NOT_EQUAL(atoi(PQget(db_result, 0,
"job_user_fk")), 0);
150 FO_ASSERT_PTR_NULL(scheduler->
db_conn);
152 FO_ASSERT_PTR_NOT_NULL(scheduler->
db_conn);
157 params->second = jq_pk;
158 params->first = g_tree_lookup(scheduler->
job_list, ¶ms->second);
160 if(params->first == NULL)
162 tmp_job.
id = params->second;
163 tmp_job.
status = JB_NOT_AVAILABLE;
170 FO_ASSERT_STRING_EQUAL(job_status_strings[job->
status],
"JOB_NOT_AVAILABLE");
173 FO_ASSERT_STRING_EQUAL(job_status_strings[job->
status],
"JOB_NOT_AVAILABLE");
201 int jq_pk1, jq_pk2, job_pk2, user_pk,
upload_pk;
204 FO_ASSERT_PTR_NULL(scheduler->
db_conn);
206 FO_ASSERT_PTR_NOT_NULL(scheduler->
db_conn);
210 "DELETE FROM jobqueue WHERE jq_job_fk IN "
211 "(SELECT job_pk FROM job WHERE job_name = 'testing file 2')");
213 db_result =
database_exec(scheduler,
"DELETE FROM job WHERE job_name = 'testing file 2'");
221 "SELECT j.job_user_fk, j.job_upload_fk"
222 " FROM job j INNER JOIN jobqueue jq ON jq.jq_job_fk = j.job_pk"
223 " WHERE jq.jq_pk = %d",
226 user_pk = (PQresultStatus(db_result) == PGRES_TUPLES_OK && PQntuples(db_result) > 0)
227 ? atoi(PQgetvalue(db_result, 0, 0)) : 1;
228 upload_pk = (PQresultStatus(db_result) == PGRES_TUPLES_OK && PQntuples(db_result) > 0)
229 ? atoi(PQgetvalue(db_result, 0, 1)) : 0;
236 " (job_pk, job_user_fk, job_queued, job_priority, job_name, job_upload_fk)"
237 " VALUES (nextval('job_job_pk_seq'), %d, now(), 0, 'testing file 2', %d)"
241 job_pk2 = (PQresultStatus(db_result) == PGRES_TUPLES_OK && PQntuples(db_result) > 0)
242 ? atoi(PQgetvalue(db_result, 0, 0)) : 0;
244 FO_ASSERT_NOT_EQUAL(job_pk2, 0);
247 "INSERT INTO jobqueue"
248 " (jq_pk, jq_job_fk, jq_type, jq_args, jq_runonpfile,"
249 " jq_starttime, jq_endtime, jq_end_bits, jq_host)"
250 " VALUES (nextval('jobqueue_jq_pk_seq'), %d, 'ununpack', '0',"
251 " NULL, NULL, NULL, 0, NULL)"
255 jq_pk2 = (PQresultStatus(db_result) == PGRES_TUPLES_OK && PQntuples(db_result) > 0)
256 ? atoi(PQgetvalue(db_result, 0, 0)) : 0;
258 FO_ASSERT_NOT_EQUAL(jq_pk2, 0);
262 host =
host_init(
"limit_test_host",
"localhost",
".", 1);
267 FO_ASSERT_PTR_NOT_NULL_FATAL(g_tree_lookup(scheduler->
job_list, &jq_pk1));
274 FO_ASSERT_PTR_NOT_NULL(g_tree_lookup(scheduler->
job_list, &jq_pk2));
300 FO_ASSERT_PTR_NULL(scheduler->
db_conn);
302 FO_ASSERT_PTR_NOT_NULL(scheduler->
db_conn);
307 params->second = jq_pk;
308 params->first = g_tree_lookup(scheduler->
job_list, ¶ms->second);
310 if(params->first == NULL)
312 tmp_job.
id = params->second;
313 tmp_job.
status = JB_NOT_AVAILABLE;
320 FO_ASSERT_STRING_EQUAL(job_status_strings[job->
status],
"JOB_NOT_AVAILABLE");
345 FO_ASSERT_PTR_NULL(scheduler->
db_conn);
348 FO_ASSERT_PTR_NOT_NULL(scheduler->
db_conn);
355 FO_ASSERT_STRING_EQUAL(job_status_strings[job->
status],
"JOB_CHECKEDOUT");
363 CU_TestInfo tests_database[] =
374 CU_TestInfo tests_email[] =
void host_insert(host_t *host, scheduler_t *scheduler)
Inserts a new host into the scheduler structure.
host_t * host_init(char *name, char *address, char *agent_dir, int max)
Creates a new host, and adds it to the host list.
job_t * job_init(GTree *job_list, GSequence *job_queue, char *type, char *host, int id, int parent_id, int user_id, int group_id, int priority, char *jq_cmd_args)
Create a new job.
PGresult * database_exec(scheduler_t *scheduler, const char *sql)
Executes an sql statement for the scheduler.
void database_reset_queue(scheduler_t *scheduler)
Resets any jobs in the job queue that are not completed.
void database_init(scheduler_t *scheduler)
void database_job_priority(scheduler_t *scheduler, job_t *job, int priority)
Changes the priority of a job queue entry in the database.
void database_update_job(scheduler_t *scheduler, job_t *job, job_status status)
Change the status of a job in the database.
void database_update_event(scheduler_t *scheduler, void *unused)
Checks the job queue for any new entries.
void database_job_log(int j_id, char *log_name)
Enters the name of the log file for a job into the database.
void database_exec_event(scheduler_t *scheduler, char *sql)
void email_init(scheduler_t *scheduler)
Loads information about the email that will be sent for job notifications.
void database_job_processed(int j_id, int num)
Updates the number of items that a job queue entry has processed.
scheduler_t * scheduler_init(gchar *sysconfigdir, log_t *log)
Create a new scheduler object.
void scheduler_destroy(scheduler_t *scheduler)
Free any memory associated with a scheduler_t.
#define SafePQclear(pgres)
int Prepare_Testing_Data(scheduler_t *scheduler)
int32_t id
The identifier for this job.
job_status status
The current status for the job.
gchar * message
Message that will be sent with job notification email.
GList * running_agents
The list of agents assigned to this job that are still working.
GTree * job_list
List of jobs that have been created.
PGconn * db_conn
The database connection.
GSequence * job_queue
heap of jobs that still need to be started
void test_database_init()
Test for database_init()
char * check_scheduler_tables
void test_database_update_job()
Test for database_update_job()
void test_database_update_event_excludes_known()
Test that database_update_event() excludes already-known jobs via the NOT IN clause.
void test_email_notify()
Test for email_notification()
void test_database_update_event()
Test for database_update_event()
void test_database_job()
Test for database_job_processed(),database_job_log(),database_job_priority()
void test_database_exec_event()
Test for database_exec_event()