9 namespace Fossology\Lib\Dao;
27 private $uploadPermissionDao;
29 private $job_pks = array(2,1);
31 protected function setUp() :
void
34 $this->
dbManager = &$this->testDb->getDbManager();
36 $this->testDb->createPlainTables(
45 $this->testDb->createInheritedTables(array(
'uploadtree_a'));
47 $uploadArray = array(array(
'upload_pk'=>1,
'uploadtree_tablename'=>
'uploadtree'),
48 array(
'upload_pk'=>2,
'uploadtree_tablename'=>
'uploadtree_a'));
49 foreach ($uploadArray as $uploadEntry) {
50 $this->
dbManager->insertTableRow(
'upload', $uploadEntry);
53 $this->
dbManager->prepare($stmt =
'insert.job',
54 "INSERT INTO job (job_pk, job_queued, job_name, job_upload_fk, job_user_fk) VALUES ($1, $2, $3, $4, $5)");
55 $jobArray = array(array(1,date(
'c',time()-5),
"FCKeditor_2.6.4.zip", 1,1 ),
56 array(2,date(
'c'),
"zlib_1.2.8.zip", 2,2));
57 foreach ($jobArray as $uploadEntry) {
61 $logger = M::mock(
'Monolog\Logger');
62 $logger->shouldReceive(
'debug');
63 $this->uploadPermissionDao = M::mock(
'Fossology\Lib\Dao\UploadPermissionDao');
64 $this->uploadDao =
new UploadDao($this->
dbManager, $logger, $this->uploadPermissionDao);
67 $this->assertCountBefore = \Hamcrest\MatcherAssert::getCount();
70 protected function tearDown() :
void
72 $this->addToAssertionCount(\Hamcrest\MatcherAssert::getCount()-$this->assertCountBefore);
79 public function testUploads2Jobs()
81 $jobs = array(3=>2, 4=>3, 5=>5, 6=>8%6, 7=>13%6, 8=>21%6);
82 foreach ($jobs as $jobId => $jobUpload) {
83 $this->
dbManager->insertTableRow(
'job', array(
'job_pk' => $jobId,
'job_upload_fk' => $jobUpload));
85 $uploadDao = M::mock(
'Fossology\Lib\Dao\UploadDao');
87 $jobsWithoutUpload = $showJobDao->uploads2Jobs(array());
88 assertThat($jobsWithoutUpload, is(emptyArray()));
89 $jobsWithUploadIdOne = $showJobDao->uploads2Jobs(array(1));
90 assertThat($jobsWithUploadIdOne, equalTo(array(array(1,7),0)));
91 $jobsAtAll = $showJobDao->uploads2Jobs(array(1,2,3,4,5));
92 assertThat($jobsAtAll, equalTo(array(array(1,7, 2,3,6, 4,8, 5),0)));
93 $jobsWithUploadFour = $showJobDao->uploads2Jobs(array(4));
94 assertThat($jobsWithUploadFour[0], is(emptyArray()));
97 public function testUploads2JobsPaged()
99 $jobs = array_combine(range(3,13),range(3,13));
100 foreach ($jobs as $jobId => $jobUpload) {
101 $this->
dbManager->insertTableRow(
'job', array(
'job_pk' => $jobId,
'job_upload_fk' => $jobUpload));
103 $uploadDao = M::mock(
'Fossology\Lib\Dao\UploadDao');
106 $jobsPage1 = $showJobDao->uploads2Jobs(range(1,17),0);
107 assertThat($jobsPage1[0], arrayWithSize(10));
108 assertThat($jobsPage1[1], is(1));
109 $jobsPage2 = $showJobDao->uploads2Jobs(array_combine(range(10,16),range(11,17)),1);
110 assertThat($jobsPage2[0], arrayWithSize(3));
111 assertThat($jobsPage2[1], is(0));
112 $jobsPage3 = $showJobDao->uploads2Jobs(array(),2);
113 assertThat($jobsPage3, arrayWithSize(0));
117 public function testgetJobName()
119 $testJobName = $this->showJobsDao->getJobName(1);
120 assertThat($testJobName, equalTo(
"FCKeditor_2.6.4.zip"));
122 $testJobNameIfNothingQueued = $this->showJobsDao->getJobName($uploadId = 3);
123 assertThat($testJobNameIfNothingQueued, equalTo($uploadId));
126 public function testMyJobs()
132 $this->uploadPermissionDao->shouldReceive(
'isAccessible')->withArgs(array(anything(),$groupId))
133 ->andReturnUsing(
function($upload,$group)
135 return ($upload==1 || $upload==2 || $upload==4);
137 $testOurJobs = $this->showJobsDao->myJobs(
true);
138 assertThat($testOurJobs[0], is(arrayContainingInAnyOrder($this->job_pks)));
139 $testMyJobs = $this->showJobsDao->myJobs(
false);
140 assertThat($testMyJobs, equalTo(array(array(1), 0)));
142 $this->
dbManager->queryOnce(
"UPDATE job SET job_queued=job_queued-INTERVAL '30 days' WHERE job_pk=1");
143 $this->
dbManager->prepare(__METHOD__.
'insert.perm_upload',
144 "INSERT INTO perm_upload (perm_upload_pk, perm, upload_fk, group_fk) VALUES ($1, $2, $3, $4)");
145 $testOutdatedJobs = $this->showJobsDao->myJobs(
true);
146 assertThat($testOutdatedJobs, equalTo(array(array(2), 0)));
149 public function testgetNumItemsPerSec()
152 $testFilesPerSec = $this->showJobsDao->getNumItemsPerSec(5*$numSecs, $numSecs);
153 assertThat($testFilesPerSec,is(greaterThan(1)));
155 $testFilesPerSec = $this->showJobsDao->getNumItemsPerSec(0.9*$numSecs, $numSecs);
156 assertThat($testFilesPerSec,is(lessThanOrEqualTo(1)));
159 public function testGetJobInfo()
161 $this->
dbManager->prepare($stmt =
'insert.jobqueue',
162 "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)"
163 .
"VALUES ($1, $2, $3, $4,$5, $6,$7,$8,$9,$10)");
167 $nomosTime = date(
'Y-m-d H:i:sO',$nowTime-$diffTime);
168 $uploadArrayQue = array(array(8, $jobId=1,
"nomos", 1,$nomosTime,
null ,
"Started", 0,
"localhost.5963", $itemNomos=147),
169 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 ));
170 foreach ($uploadArrayQue as $uploadEntry) {
174 $this->
dbManager->prepare($stmt =
'insert.uploadtree_a',
175 "INSERT INTO uploadtree_a (uploadtree_pk, parent, upload_fk, pfile_fk, ufile_mode, lft, rgt, ufile_name)"
176 .
"VALUES ($1, $2, $3, $4,$5, $6, $7, $8)");
177 $uploadTreeArray = array(array(123, 121, 1, 103, 32768, 542, 543,
"fckeditorcode_ie.js"),
178 array(121,120, 1, 0, 536888320, 537, 544,
"js"),
179 array(715,651, 2,607 ,33188 ,534 ,535 ,
"zconf.h.cmakein"),
180 array(915, 651, 2, 606 ,33188 ,532 ,533 ,
"zconf.h"),
182 foreach ($uploadTreeArray as $uploadEntry) {
186 $this->
dbManager->prepare($stmt =
'insert.jobdepends',
187 "INSERT INTO jobdepends (jdep_jq_fk, jdep_jq_depends_fk) VALUES ($1, $2 )");
188 $jqWithTwoDependencies = 8;
189 $jobDependsArray = array(array(2,1),
194 array($jqWithTwoDependencies,4),
195 array($jqWithTwoDependencies,4),
197 foreach ($jobDependsArray as $uploadEntry) {
201 $testMyJobInfo = $this->showJobsDao->getJobInfo($this->job_pks);
202 assertThat($testMyJobInfo,hasKey($jobId));
203 assertThat($testMyJobInfo[$jobId][
'jobqueue'][$jqWithTwoDependencies][
'depends'], is(arrayWithSize(2)));
205 $testFilesPerSec = 0.23;
206 $formattedEstimatedTime = $this->showJobsDao->getEstimatedTime($job_pk=1, $jq_Type=
"nomos", $testFilesPerSec);
207 assertThat($formattedEstimatedTime, matchesPattern (
'/\\d+:\\d{2}:\\d{2}/'));
208 $hourMinSec = explode(
':', $formattedEstimatedTime);
209 assertThat($hourMinSec[0]*3600+$hourMinSec[1]*60+$hourMinSec[2],
210 is(closeTo(($itemCount-$itemNomos)/$testFilesPerSec,0.5+$testFilesPerSec)));
212 $testGetEstimatedTime = $this->showJobsDao->getEstimatedTime($job_pk=1, $jq_Type, 0);
213 assertThat($testGetEstimatedTime, matchesPattern (
'/\\d+:\\d{2}:\\d{2}/'));
214 $hourMinSec = explode(
':', $testGetEstimatedTime);
215 $tolerance = 0.5+($itemCount-$itemNomos)/$itemNomos+(time()-$nowTime);
216 assertThat($hourMinSec[0]*3600+$hourMinSec[1]*60+$hourMinSec[2],
217 is(closeTo(($itemCount-$itemNomos)/$itemNomos*$diffTime,$tolerance)));
219 $fewFilesPerSec = 0.003;
220 $formattedLongTime = $this->showJobsDao->getEstimatedTime($job_pk=1, $jq_Type=
"nomos", $fewFilesPerSec);
221 assertThat($formattedLongTime, matchesPattern (
'/\\d+:\\d{2}:\\d{2}/'));
222 $hourMinSec = explode(
':', $formattedLongTime);
223 assertThat($hourMinSec[0]*3600+$hourMinSec[1]*60+$hourMinSec[2],
224 is(closeTo(($itemCount-$itemNomos)/$fewFilesPerSec,0.5+$fewFilesPerSec)));
227 public function testGetEstimatedTimeShouldNotDivideByZero()
229 $this->
dbManager->prepare($stmt =
'insert.jobqueue',
230 "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)"
231 .
"VALUES ($1, $2, $3, $4,$5, $6,$7,$8,$9,$10)");
235 $nomosTime = date(
'Y-m-d H:i:sO',$nowTime-$diffTime);
236 $uploadArrayQue = array(array(8, $jobId=1, $jqType=
"nomos", 1,$nomosTime,
null ,
"Started", 0,
"localhost.5963", $itemNomos=147),
237 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 ));
238 foreach ($uploadArrayQue as $uploadEntry) {
242 $showJobsDaoMock = M::mock(
'Fossology\\Lib\\Dao\\ShowJobsDao[getNumItemsPerSec]',array($this->
dbManager, $this->uploadDao));
243 $showJobsDaoMock->shouldReceive(
'getNumItemsPerSec')->andReturn(0);
245 $estimated = $showJobsDaoMock->getEstimatedTime($jobId, $jqType);
246 assertThat($estimated, equalTo(
'0:00:00'));
Contains the constants and helpers for authentication of user.
fo_dbManager * dbManager
fo_dbManager object