FOSSology  4.4.0
Open Source License Compliance by Open Source Software
LatestScannerProxyTest.php
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2015 Siemens AG
4 
5  SPDX-License-Identifier: GPL-2.0-only
6 */
7 
8 namespace Fossology\Lib\Proxy;
9 
10 use Exception;
12 use Mockery as M;
13 
14 class LatestScannerProxyTest extends \PHPUnit\Framework\TestCase
15 {
17  private $testDb;
19  private $assertCountBefore;
20 
21 
22  protected function setUp() : void
23  {
24  $this->testDb = new TestLiteDb();
25  $this->testDb->createPlainTables( array('agent','ars_master') );
26  $dbManager = &$this->testDb->getDbManager();
27  $dbManager->queryOnce('ALTER TABLE ars_master RENAME TO nomos_ars');
28  $this->testDb->insertData(array('agent','nomos_ars'));
29  $this->assertCountBefore = \Hamcrest\MatcherAssert::getCount();
30  }
31 
32  protected function tearDown() : void
33  {
34  $this->addToAssertionCount(\Hamcrest\MatcherAssert::getCount()-$this->assertCountBefore);
35  M::close();
36  }
37 
38  private function getAllColumns($sql,$params=array())
39  {
40  $backtrace = debug_backtrace();
41  $caller = $backtrace[1];
42  $stmt = "$caller[class]::$caller[function]";
43 
44  $dbManager = &$this->testDb->getDbManager();
45  $dbManager->prepare($stmt, $sql);
46 
47  $res = $dbManager->execute($stmt,$params);
48  $result = $dbManager->fetchAll($res);
49  $dbManager->freeResult($res);
50 
51  return $result;
52  }
53 
54  public function testQuery()
55  {
56  $uploadId = 2;
57  $agentNames = array('nomos');
58  $latestScannerProxy = new LatestScannerProxy($uploadId,$agentNames,'latest_scanner', "AND agent_enabled='true'");
59  $sql = $latestScannerProxy->getDbViewQuery();
60  $scanners = $this->getAllColumns($sql);
61  assertThat($scanners,arrayContaining(array(array('agent_pk'=>6,'agent_name'=>'nomos'))));
62  }
63 
64  public function testQueryTwoScanners()
65  {
66  $this->testDb->getDbManager()->queryOnce('CREATE TABLE monk_ars AS SELECT * FROM nomos_ars WHERE 0=1');
67  $this->testDb->insertData(array('monk_ars'));
68  $uploadId = 2;
69  $agentNames = array('nomos','monk');
70  $latestScannerProxy = new LatestScannerProxy($uploadId,$agentNames,'latest_scanner', "AND agent_enabled='true'");
71  $sql = $latestScannerProxy->getDbViewQuery();
72  $scanners = $this->getAllColumns($sql);
73  assertThat($scanners,arrayContainingInAnyOrder(array(array('agent_pk'=>6,'agent_name'=>'nomos'),array('agent_pk'=>5,'agent_name'=>'monk'))));
74  }
75 
76  public function testQueryNoScanners()
77  {
78  $this->expectException(Exception::class);
79  $uploadId = 2;
80  $agentNames = array();
81  new LatestScannerProxy($uploadId,$agentNames,'latest_scanner', "AND agent_enabled='true'");
82  }
83 
84  public function testQueryPrepared()
85  {
86  $uploadId = 2;
87  $agentNames = array('nomos');
88  $latestScannerProxy = new LatestScannerProxy('$1',$agentNames,'latest_scanner', "AND agent_enabled='true'");
89  $sql = $latestScannerProxy->getDbViewQuery();
90  $scanners = $this->getAllColumns($sql,array($uploadId));
91  assertThat($scanners,arrayContaining(array(array('agent_pk'=>6,'agent_name'=>'nomos'))));
92  }
93 
94  public function testMaterializePossibleForUnparameterizedQuery()
95  {
96  $uploadId = 2;
97  $agentNames = array('nomos');
98  $latestScannerProxy = new LatestScannerProxy($uploadId,$agentNames,'latest_scanner', "AND agent_enabled='true'");
99  $latestScannerProxy->materialize();
100  }
101 
102  public function testMaterializeNotPossibleForParameterizedQuery()
103  {
104  $this->expectException(Exception::class);
105  $agentNames = array('nomos');
106  $latestScannerProxy = new LatestScannerProxy('$1',$agentNames,'latest_scanner', "AND agent_enabled='true'");
107  $latestScannerProxy->materialize();
108  }
109 
110 
111  public function testGetNameToIdMap()
112  {
113  $uploadId = 2;
114  $agentNames = array('nomos');
115  $latestScannerProxy = new LatestScannerProxy($uploadId,$agentNames,'latest_scanner', "AND agent_enabled='true'");
116  $map = $latestScannerProxy->getNameToIdMap();
117  assertThat($map,equalTo(array('nomos'=>6)));
118  }
119 
120  public function testGetNameToIdMapNotPossibleForParameterizedQuery()
121  {
122  $this->expectException(Exception::class);
123  $agentNames = array('nomos');
124  $latestScannerProxy = new LatestScannerProxy('$1',$agentNames,'latest_scanner', "AND agent_enabled='true'");
125  $latestScannerProxy->getNameToIdMap();
126  }
127 }