8 namespace Fossology\Lib\Dao;
26 private $uploadPermissionDao;
28 private $job_pks = array(2,1);
30 protected function setUp() :
void
33 $this->
dbManager = &$this->testDb->getDbManager();
35 $this->testDb->createPlainTables(
44 $this->testDb->createInheritedTables(array(
'uploadtree_a'));
46 $uploadArray = array(array(
'upload_pk'=>1,
'uploadtree_tablename'=>
'uploadtree'),
47 array(
'upload_pk'=>2,
'uploadtree_tablename'=>
'uploadtree_a'));
48 foreach ($uploadArray as $uploadEntry) {
49 $this->
dbManager->insertTableRow(
'upload', $uploadEntry);
52 $this->
dbManager->prepare($stmt =
'insert.job',
53 "INSERT INTO job (job_pk, job_queued, job_name, job_upload_fk, job_user_fk) VALUES ($1, $2, $3, $4, $5)");
54 $jobArray = array(array(1,date(
'c',time()-5),
"FCKeditor_2.6.4.zip", 1,1 ),
55 array(2,date(
'c'),
"zlib_1.2.8.zip", 2,2));
56 foreach ($jobArray as $uploadEntry) {
60 $logger = M::mock(
'Monolog\Logger');
61 $logger->shouldReceive(
'debug');
62 $this->uploadPermissionDao = M::mock(
'Fossology\Lib\Dao\UploadPermissionDao');
63 $this->uploadDao =
new UploadDao($this->
dbManager, $logger, $this->uploadPermissionDao);
66 $this->assertCountBefore = \Hamcrest\MatcherAssert::getCount();
69 protected function tearDown() :
void
71 $this->addToAssertionCount(\Hamcrest\MatcherAssert::getCount()-$this->assertCountBefore);
78 public function testUploads2Jobs()
83 $this->uploadPermissionDao->shouldReceive(
'filterAccessibleUploads')
84 ->andReturnUsing(
function($uploadIds,$group)
86 return array_values(array_filter($uploadIds,
function($upload) {
87 return ($upload==1 || $upload==2 || $upload==3 || $upload==4 || $upload==5);
91 $jobs = array(3=>2, 4=>3, 5=>5, 6=>8%6, 7=>13%6, 8=>21%6);
92 foreach ($jobs as $jobId => $jobUpload) {
93 $this->
dbManager->insertTableRow(
'job', array(
'job_pk' => $jobId,
'job_upload_fk' => $jobUpload));
95 $jobsWithoutUpload = $this->showJobsDao->uploads2Jobs(array());
96 assertThat($jobsWithoutUpload, is(emptyArray()));
97 $jobsWithUploadIdOne = $this->showJobsDao->uploads2Jobs(array(1));
98 assertThat($jobsWithUploadIdOne, equalTo(array(array(7,1),0)));
99 $jobsAtAll = $this->showJobsDao->uploads2Jobs(array(1,2,3,4,5));
100 assertThat($jobsAtAll, equalTo(array(array(8,7,6,5,4,3,2,1),0)));
101 $jobsWithUploadFour = $this->showJobsDao->uploads2Jobs(array(4));
102 assertThat($jobsWithUploadFour[0], is(emptyArray()));
105 public function testUploads2JobsPaged()
111 $this->uploadPermissionDao->shouldReceive(
'filterAccessibleUploads')
112 ->andReturnUsing(
function($uploadIds,$group)
114 return array_values(array_filter($uploadIds,
function($upload) {
115 return in_array($upload, range(1, 17));
119 $jobs = array_combine(range(3,13),range(3,13));
120 foreach ($jobs as $jobId => $jobUpload) {
121 $this->
dbManager->insertTableRow(
'job', array(
'job_pk' => $jobId,
'job_upload_fk' => $jobUpload));
124 $jobsPage1 = $this->showJobsDao->uploads2Jobs(range(1,17),0);
125 assertThat($jobsPage1[0], arrayWithSize(10));
126 assertThat($jobsPage1[1], is(1));
127 $jobsPage2 = $this->showJobsDao->uploads2Jobs(range(1,17),1);
128 assertThat($jobsPage2[0], arrayWithSize(3));
129 assertThat($jobsPage2[1], is(1));
130 $jobsPage3 = $this->showJobsDao->uploads2Jobs(array(),2);
131 assertThat($jobsPage3, arrayWithSize(0));
135 public function testgetJobName()
137 $testJobName = $this->showJobsDao->getJobName(1);
138 assertThat($testJobName, equalTo(
"FCKeditor_2.6.4.zip"));
140 $testJobNameIfNothingQueued = $this->showJobsDao->getJobName($uploadId = 3);
141 assertThat($testJobNameIfNothingQueued, equalTo($uploadId));
144 public function testMyJobs()
150 $this->uploadPermissionDao->shouldReceive(
'isAccessible')->withArgs(array(anything(),$groupId))
151 ->andReturnUsing(
function($upload,$group)
153 return ($upload==1 || $upload==2 || $upload==4);
155 $this->uploadPermissionDao->shouldReceive(
'filterAccessibleUploads')
156 ->andReturnUsing(
function($uploadIds,$group)
158 return array_values(array_filter($uploadIds,
function($upload) {
159 return ($upload==1 || $upload==2 || $upload==4);
162 $testOurJobs = $this->showJobsDao->myJobs(
true);
163 assertThat($testOurJobs[0], is(arrayContainingInAnyOrder($this->job_pks)));
164 $testMyJobs = $this->showJobsDao->myJobs(
false);
165 assertThat($testMyJobs, equalTo(array(array(1), 0)));
167 $this->
dbManager->queryOnce(
"UPDATE job SET job_queued=job_queued-INTERVAL '30 days' WHERE job_pk=1");
168 $this->
dbManager->prepare(__METHOD__.
'insert.perm_upload',
169 "INSERT INTO perm_upload (perm_upload_pk, perm, upload_fk, group_fk) VALUES ($1, $2, $3, $4)");
170 $testOutdatedJobs = $this->showJobsDao->myJobs(
true);
171 assertThat($testOutdatedJobs, equalTo(array(array(2), 0)));
174 public function testgetNumItemsPerSec()
177 $testFilesPerSec = $this->showJobsDao->getNumItemsPerSec(5*$numSecs, $numSecs);
178 assertThat($testFilesPerSec,is(greaterThan(1)));
180 $testFilesPerSec = $this->showJobsDao->getNumItemsPerSec(0.9*$numSecs, $numSecs);
181 assertThat($testFilesPerSec,is(lessThanOrEqualTo(1)));
184 public function testGetJobInfo()
186 $this->
dbManager->prepare($stmt =
'insert.jobqueue',
187 "INSERT INTO jobqueue (jq_pk, jq_job_fk, jq_type, jq_args, jq_starttime, jq_endtime, jq_endtext, jq_end_bits, jq_schedinfo, jq_itemsprocessed)"
188 .
"VALUES ($1, $2, $3, $4,$5, $6,$7,$8,$9,$10)");
192 $nomosTime = date(
'Y-m-d H:i:sO',$nowTime-$diffTime);
193 $uploadArrayQue = array(array(8, $jobId=1,
"nomos", 1,$nomosTime,
null ,
"Started", 0,
"localhost.5963", $itemNomos=147),
194 array(1, $jobId,
"ununpack", 1,
"2015-04-21 18:29:19.23825+05:30",
"2015-04-21 18:29:26.396562+05:30",
"Completed",1,
null,$itemCount=646 ));
195 foreach ($uploadArrayQue as $uploadEntry) {
199 $this->
dbManager->prepare($stmt =
'insert.uploadtree_a',
200 "INSERT INTO uploadtree_a (uploadtree_pk, parent, upload_fk, pfile_fk, ufile_mode, lft, rgt, ufile_name)"
201 .
"VALUES ($1, $2, $3, $4,$5, $6, $7, $8)");
202 $uploadTreeArray = array(array(123, 121, 1, 103, 32768, 542, 543,
"fckeditorcode_ie.js"),
203 array(121,120, 1, 0, 536888320, 537, 544,
"js"),
204 array(715,651, 2,607 ,33188 ,534 ,535 ,
"zconf.h.cmakein"),
205 array(915, 651, 2, 606 ,33188 ,532 ,533 ,
"zconf.h"),
207 foreach ($uploadTreeArray as $uploadEntry) {
211 $this->
dbManager->prepare($stmt =
'insert.jobdepends',
212 "INSERT INTO jobdepends (jdep_jq_fk, jdep_jq_depends_fk) VALUES ($1, $2 )");
213 $jqWithTwoDependencies = 8;
214 $jobDependsArray = array(array(2,1),
219 array($jqWithTwoDependencies,4),
220 array($jqWithTwoDependencies,4),
222 foreach ($jobDependsArray as $uploadEntry) {
226 $testMyJobInfo = $this->showJobsDao->getJobInfo($this->job_pks);
227 assertThat($testMyJobInfo,hasKey($jobId));
228 assertThat($testMyJobInfo[$jobId][
'jobqueue'][$jqWithTwoDependencies][
'depends'], is(arrayWithSize(2)));
230 $testFilesPerSec = 0.23;
231 $formattedEstimatedTime = $this->showJobsDao->getEstimatedTime($job_pk=1, $jq_Type=
"nomos", $testFilesPerSec);
232 assertThat($formattedEstimatedTime, matchesPattern (
'/\\d+:\\d{2}:\\d{2}/'));
233 $hourMinSec = explode(
':', $formattedEstimatedTime);
234 assertThat($hourMinSec[0]*3600+$hourMinSec[1]*60+$hourMinSec[2],
235 is(closeTo(($itemCount-$itemNomos)/$testFilesPerSec,0.5+$testFilesPerSec)));
237 $testGetEstimatedTime = $this->showJobsDao->getEstimatedTime($job_pk=1, $jq_Type, 0);
238 assertThat($testGetEstimatedTime, matchesPattern (
'/\\d+:\\d{2}:\\d{2}/'));
239 $hourMinSec = explode(
':', $testGetEstimatedTime);
240 $tolerance = 0.5+($itemCount-$itemNomos)/$itemNomos+(time()-$nowTime);
241 assertThat($hourMinSec[0]*3600+$hourMinSec[1]*60+$hourMinSec[2],
242 is(closeTo(($itemCount-$itemNomos)/$itemNomos*$diffTime,$tolerance)));
244 $fewFilesPerSec = 0.003;
245 $formattedLongTime = $this->showJobsDao->getEstimatedTime($job_pk=1, $jq_Type=
"nomos", $fewFilesPerSec);
246 assertThat($formattedLongTime, matchesPattern (
'/\\d+:\\d{2}:\\d{2}/'));
247 $hourMinSec = explode(
':', $formattedLongTime);
248 assertThat($hourMinSec[0]*3600+$hourMinSec[1]*60+$hourMinSec[2],
249 is(closeTo(($itemCount-$itemNomos)/$fewFilesPerSec,0.5+$fewFilesPerSec)));
252 public function testGetEstimatedTimeShouldNotDivideByZero()
254 $this->
dbManager->prepare($stmt =
'insert.jobqueue',
255 "INSERT INTO jobqueue (jq_pk, jq_job_fk, jq_type, jq_args, jq_starttime, jq_endtime, jq_endtext, jq_end_bits, jq_schedinfo, jq_itemsprocessed)"
256 .
"VALUES ($1, $2, $3, $4,$5, $6,$7,$8,$9,$10)");
260 $nomosTime = date(
'Y-m-d H:i:sO',$nowTime-$diffTime);
261 $uploadArrayQue = array(array(8, $jobId=1, $jqType=
"nomos", 1,$nomosTime,
null ,
"Started", 0,
"localhost.5963", $itemNomos=147),
262 array(1, $jobId,
"ununpack", 1,
"2015-04-21 18:29:19.23825+05:30",
"2015-04-21 18:29:26.396562+05:30",
"Completed",1,
null,$itemCount=646 ));
263 foreach ($uploadArrayQue as $uploadEntry) {
267 $showJobsDaoMock = M::mock(
'Fossology\\Lib\\Dao\\ShowJobsDao[getNumItemsPerSec]',array($this->
dbManager, $this->uploadDao));
268 $showJobsDaoMock->shouldReceive(
'getNumItemsPerSec')->andReturn(0);
270 $estimated = $showJobsDaoMock->getEstimatedTime($jobId, $jqType);
271 assertThat($estimated, equalTo(
'0:00:00'));
273 private function insertJobQue($jobQueueEndBits = 2)
275 $jobs = array(3=>2, 4=>3, 5=>5, 6=>8%6, 7=>13%6, 8=>21%6);
276 foreach ($jobs as $jobId => $jobUpload) {
277 $this->
dbManager->insertTableRow(
'job', array(
'job_pk' => $jobId,
'job_upload_fk' => $jobUpload));
279 $this->
dbManager->prepare($stmt =
'insert.jobqueue',
280 "INSERT INTO jobqueue (jq_pk, jq_job_fk, jq_type, jq_args, jq_starttime, jq_endtime, jq_endtext, jq_end_bits, jq_schedinfo, jq_itemsprocessed)"
281 .
"VALUES ($1, $2, $3, $4,$5, $6,$7,$8,$9,$10)");
285 $nomosTime = date(
'Y-m-d H:i:sO',$nowTime-$diffTime);
286 $uploadArrayQue = array(array(8, $jobId=1, $jqType=
"nomos", 1,$nomosTime,
null ,
"Started", 0,
"localhost.5963", $itemNomos=147),
287 array(1, $jobId,
"ununpack", 1,
"2015-04-21 18:29:19.23825+05:30",
"2015-04-21 18:29:26.396562+05:30",
"Completed",$jobQueueEndBits,
null,$itemCount=646 ));
288 foreach ($uploadArrayQue as $uploadEntry) {
292 public function testGetJobsForAll()
294 $this->insertJobQue();
295 $result = $this->showJobsDao->getJobsForAll();
296 $this->assertNotNull($result);
297 $this->assertEquals(array(array(
'job' =>
'nomos',
'jq_job_fk' =>
"1",
"upload_fk" =>
"1",
"status" =>
"running")),$result);
299 public function testGetItemsProcessedForDecider()
301 $this->insertJobQue();
302 $result = $this->showJobsDao->getItemsProcessedForDecider(
"nomos",1);
303 $expectedArray = array(
"147",
"1");
304 $this->assertNotNull($result);
305 $this->assertEquals($expectedArray,$result);
307 public function testGetJobStatusFalse()
309 $this->insertJobQue();
310 $jobStatus = $this->showJobsDao->getJobStatus(1);
311 $this->assertNotNull($jobStatus);
312 $this->assertFalse($jobStatus);
314 public function testGetJobStatusTrue()
316 $this->insertJobQue(4);
317 $jobStatus = $this->showJobsDao->getJobStatus(1);
318 $this->assertNotNull($jobStatus);
319 $this->assertTrue($jobStatus);
321 public function testGetDataASingleJob()
323 $this->insertJobQue();
324 $result = $this->showJobsDao->getDataForASingleJob(1);
325 $this->assertNotNull($result);
326 $expectedData = array(
329 'jq_type' =>
"ununpack",
331 'jq_starttime' => $result[
'jq_starttime'],
332 'jq_endtime' => $result[
'jq_endtime'],
333 'jq_endtext' =>
"Completed",
334 'jq_end_bits' =>
"2",
335 'jq_schedinfo' => NULL,
336 'jq_itemsprocessed' =>
"646",
338 'jq_runonpfile' => NULL,
340 'jq_cmd_args' => NULL,
342 'job_queued' => $result[
'job_queued'],
343 'job_priority' => NULL,
344 'job_email_notify' => NULL,
345 'job_name' =>
"FCKeditor_2.6.4.zip",
346 'job_upload_fk' =>
"1",
347 'job_folder_fk' => NULL,
348 'job_user_fk' =>
"1",
349 'job_group_fk' => NULL,
350 'elapsed' =>
"00:00:07.158312"
352 $this->assertEquals($expectedData,$result);
Contains the constants and helpers for authentication of user.
fo_dbManager * dbManager
fo_dbManager object