FOSSology  4.7.1
Open Source License Compliance by Open Source Software
utils.c
Go to the documentation of this file.
1 /*
2  SPDX-FileCopyrightText: © Fossology contributors
3 
4  SPDX-License-Identifier: GPL-2.0-only
5 */
11 /* include functions to test */
12 #include <testRun.h>
13 
14 /* scheduler includes */
15 #include <database.h>
16 #include <scheduler.h>
17 
18 /* library includes */
19 
24 {
25  char sql[1024];
26  int upload_pk, job_pk, jq_pk, user_pk, folder_pk;
27  PGresult* db_result;
28 
29  /* Remove stale test data so the test job is not already in job_list and is
30  * returned by basic_checkout (NOT IN exclusion skips known jobs). */
31  database_exec(scheduler,
32  "DELETE FROM jobqueue WHERE jq_job_fk IN "
33  "(SELECT job_pk FROM job WHERE job_name = 'testing file')");
34  database_exec(scheduler, "DELETE FROM job WHERE job_name = 'testing file'");
35  database_exec(scheduler,
36  "DELETE FROM foldercontents WHERE child_id IN "
37  "(SELECT upload_pk FROM upload WHERE upload_desc = 'testing upload data')");
38  database_exec(scheduler, "DELETE FROM upload WHERE upload_desc = 'testing upload data'");
39 
40  /* Ensure a user exists.
41  * The test DB is built with createPlainTables() which strips DEFAULT clauses,
42  * so sequence-backed columns have no auto-increment. We must call nextval()
43  * explicitly in every INSERT and use RETURNING to get the real pk. */
44  db_result = database_exec(scheduler, "SELECT user_pk FROM users LIMIT 1");
45  if(PQntuples(db_result) > 0)
46  {
47  user_pk = atoi(PQget(db_result, 0, "user_pk"));
48  PQclear(db_result);
49  }
50  else
51  {
52  PQclear(db_result);
53 
54  db_result = database_exec(scheduler,
55  "INSERT INTO folder (folder_pk, folder_name, folder_desc)"
56  " VALUES (nextval('folder_folder_pk_seq'),"
57  " 'Software Repository', 'Top Folder')"
58  " RETURNING folder_pk");
59  folder_pk = (PQntuples(db_result) > 0) ? atoi(PQget(db_result, 0, "folder_pk")) : 1;
60  PQclear(db_result);
61 
62  sprintf(sql,
63  "INSERT INTO users"
64  " (user_pk, user_name, user_desc, user_seed, user_pass, user_perm,"
65  " user_email, email_notify, root_folder_fk, default_folder_fk)"
66  " VALUES (nextval('users_user_pk_seq'), 'testuser', '', '', '', 10, '', 'n', %d, -1)"
67  " RETURNING user_pk",
68  folder_pk);
69  db_result = database_exec(scheduler, sql);
70  user_pk = (PQntuples(db_result) > 0) ? atoi(PQget(db_result, 0, "user_pk")) : 1;
71  PQclear(db_result);
72  }
73 
74  sprintf(sql,
75  "INSERT INTO upload"
76  " (upload_pk, upload_desc, upload_filename, user_fk, upload_mode, upload_origin)"
77  " VALUES (nextval('upload_upload_pk_seq'),"
78  " 'testing upload data', 'testing file', '%d', '100', 'testing file')"
79  " RETURNING upload_pk",
80  user_pk);
81  db_result = database_exec(scheduler, sql);
82  upload_pk = (PQntuples(db_result) > 0) ? atoi(PQget(db_result, 0, "upload_pk")) : 0;
83  PQclear(db_result);
84 
85  /* Add the upload record to the folder */
86  sprintf(sql,
87  "INSERT INTO foldercontents (parent_fk, foldercontents_mode, child_id)"
88  " VALUES (1, 2, '%d')",
89  upload_pk);
90  database_exec(scheduler, sql);
91 
92  /* High priority ensures this job is ordered first in basic_checkout results. */
93  sprintf(sql,
94  "INSERT INTO job"
95  " (job_pk, job_user_fk, job_queued, job_priority, job_name, job_upload_fk)"
96  " VALUES (nextval('job_job_pk_seq'), '%d', now(), '9999', 'testing file', %d)"
97  " RETURNING job_pk",
98  user_pk, upload_pk);
99  db_result = database_exec(scheduler, sql);
100  job_pk = (PQntuples(db_result) > 0) ? atoi(PQget(db_result, 0, "job_pk")) : 0;
101  PQclear(db_result);
102 
103  /* Let the sequence assign jq_pk */
104  sprintf(sql,
105  "INSERT INTO jobqueue"
106  " (jq_pk, jq_job_fk, jq_type, jq_args, jq_runonpfile,"
107  " jq_starttime, jq_endtime, jq_end_bits, jq_host)"
108  " VALUES (nextval('jobqueue_jq_pk_seq'), '%d', 'ununpack', '%d',"
109  " NULL, NULL, NULL, 0, NULL)"
110  " RETURNING jq_pk",
111  job_pk, upload_pk);
112  db_result = database_exec(scheduler, sql);
113  jq_pk = (PQntuples(db_result) > 0) ? atoi(PQget(db_result, 0, "jq_pk")) : 0;
114  PQclear(db_result);
115 
116  return jq_pk;
117 }
PGresult * database_exec(scheduler_t *scheduler, const char *sql)
Executes an sql statement for the scheduler.
Definition: database.c:804
int Prepare_Testing_Data(scheduler_t *scheduler)
Definition: utils.c:23
const char * upload_pk
Definition: sqlstatements.h:82