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 basic_checkout's LIMIT 10 always includes ours. */
30  database_exec(scheduler,
31  "DELETE FROM jobqueue WHERE jq_job_fk IN "
32  "(SELECT job_pk FROM job WHERE job_name = 'testing file')");
33  database_exec(scheduler, "DELETE FROM job WHERE job_name = 'testing file'");
34  database_exec(scheduler,
35  "DELETE FROM foldercontents WHERE child_id IN "
36  "(SELECT upload_pk FROM upload WHERE upload_desc = 'testing upload data')");
37  database_exec(scheduler, "DELETE FROM upload WHERE upload_desc = 'testing upload data'");
38 
39  /* Ensure a user exists.
40  * The test DB is built with createPlainTables() which strips DEFAULT clauses,
41  * so sequence-backed columns have no auto-increment. We must call nextval()
42  * explicitly in every INSERT and use RETURNING to get the real pk. */
43  db_result = database_exec(scheduler, "SELECT user_pk FROM users LIMIT 1");
44  if(PQntuples(db_result) > 0)
45  {
46  user_pk = atoi(PQget(db_result, 0, "user_pk"));
47  PQclear(db_result);
48  }
49  else
50  {
51  PQclear(db_result);
52 
53  db_result = database_exec(scheduler,
54  "INSERT INTO folder (folder_pk, folder_name, folder_desc)"
55  " VALUES (nextval('folder_folder_pk_seq'),"
56  " 'Software Repository', 'Top Folder')"
57  " RETURNING folder_pk");
58  folder_pk = (PQntuples(db_result) > 0) ? atoi(PQget(db_result, 0, "folder_pk")) : 1;
59  PQclear(db_result);
60 
61  sprintf(sql,
62  "INSERT INTO users"
63  " (user_pk, user_name, user_desc, user_seed, user_pass, user_perm,"
64  " user_email, email_notify, root_folder_fk, default_folder_fk)"
65  " VALUES (nextval('users_user_pk_seq'), 'testuser', '', '', '', 10, '', 'n', %d, -1)"
66  " RETURNING user_pk",
67  folder_pk);
68  db_result = database_exec(scheduler, sql);
69  user_pk = (PQntuples(db_result) > 0) ? atoi(PQget(db_result, 0, "user_pk")) : 1;
70  PQclear(db_result);
71  }
72 
73  sprintf(sql,
74  "INSERT INTO upload"
75  " (upload_pk, upload_desc, upload_filename, user_fk, upload_mode, upload_origin)"
76  " VALUES (nextval('upload_upload_pk_seq'),"
77  " 'testing upload data', 'testing file', '%d', '100', 'testing file')"
78  " RETURNING upload_pk",
79  user_pk);
80  db_result = database_exec(scheduler, sql);
81  upload_pk = (PQntuples(db_result) > 0) ? atoi(PQget(db_result, 0, "upload_pk")) : 0;
82  PQclear(db_result);
83 
84  /* Add the upload record to the folder */
85  sprintf(sql,
86  "INSERT INTO foldercontents (parent_fk, foldercontents_mode, child_id)"
87  " VALUES (1, 2, '%d')",
88  upload_pk);
89  database_exec(scheduler, sql);
90 
91  /* High priority ensures this job is within basic_checkout's LIMIT 10. */
92  sprintf(sql,
93  "INSERT INTO job"
94  " (job_pk, job_user_fk, job_queued, job_priority, job_name, job_upload_fk)"
95  " VALUES (nextval('job_job_pk_seq'), '%d', now(), '9999', 'testing file', %d)"
96  " RETURNING job_pk",
97  user_pk, upload_pk);
98  db_result = database_exec(scheduler, sql);
99  job_pk = (PQntuples(db_result) > 0) ? atoi(PQget(db_result, 0, "job_pk")) : 0;
100  PQclear(db_result);
101 
102  /* Let the sequence assign jq_pk */
103  sprintf(sql,
104  "INSERT INTO jobqueue"
105  " (jq_pk, jq_job_fk, jq_type, jq_args, jq_runonpfile,"
106  " jq_starttime, jq_endtime, jq_end_bits, jq_host)"
107  " VALUES (nextval('jobqueue_jq_pk_seq'), '%d', 'ununpack', '%d',"
108  " NULL, NULL, NULL, 0, NULL)"
109  " RETURNING jq_pk",
110  job_pk, upload_pk);
111  db_result = database_exec(scheduler, sql);
112  jq_pk = (PQntuples(db_result) > 0) ? atoi(PQget(db_result, 0, "jq_pk")) : 0;
113  PQclear(db_result);
114 
115  return jq_pk;
116 }
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