FOSSology  4.4.0
Open Source License Compliance by Open Source Software
SolidDbManagerTest.php
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2014 Siemens AG
4 
5  SPDX-License-Identifier: GPL-2.0-only
6 */
7 
8 namespace Fossology\Lib\Db;
9 
11 {
12  function setUp() : void
13  {
14  parent::setUp();
15  $this->dbManager = new SolidDbManager($this->logger);
16  $this->dbManager->setDriver($this->driver);
17  }
18 
19  function tearDown() : void
20  {
21  parent::tearDown();
22  }
23 
24  function testInsertTableRow()
25  {
26  $tableName = 'foo';
27  $assocParams = array('cola'=>1,'colb'=>2);
28  $sqlLog = 'bar';
29  $this->driver->shouldReceive('query')->once();
30  $this->driver->shouldReceive('freeResult');
31  $this->dbManager->insertTableRow($tableName,$assocParams,$sqlLog);
32  }
33 
34  function testCreateMap()
35  {
36  $keyColumn = 'yek';
37  $valueColumn = 'lav';
38  $tableName = 'foo';
39  $sqlLog = 'bar';
40  $preSql = "/ $keyColumn, *$valueColumn /";
41  $this->driver->shouldReceive('query')->andReturn('fakeRes');
42  $this->driver->shouldReceive('fetchArray')->andReturn(
43  array($keyColumn=>'k0',$valueColumn=>'v0'),
44  array($keyColumn=>'k1',$valueColumn=>'v1'),
45  false
46  );
47  $this->driver->shouldReceive('freeResult');
48  $map = $this->dbManager->createMap($tableName,$keyColumn,$valueColumn,$sqlLog);
49  assertThat($map,hasKey('k0'));
50  assertThat($map,EqualTo(array('k0'=>'v0','k1'=>'v1')));
51  }
52 
53  function testEvaluateStatement()
54  {
55  $this->driver->shouldReceive('query');
56  $sqlStmt = 'SELECT pet FROM africa WHERE cervical=$1 AND class=$2 AND $3';
57  $this->dbManager->prepare($stmt='statement',$sqlStmt);
58 
59  $reflection = new \ReflectionClass(get_class($this->dbManager));
60  $method = $reflection->getMethod('evaluateStatement');
61  $method->setAccessible(true);
62 
63  $params = array(7,'Mammalia',true);
64  $sql = $method->invoke($this->dbManager,$stmt,$params);
65  assertThat($sql, is('SELECT pet FROM africa WHERE cervical=7 AND class=\'Mammalia\' AND t') );
66 
67  $params = array(7,'Mammalia\'; SELECT * FROM passwords WHERE user like \'%',true);
68  $sql = $method->invoke($this->dbManager,$stmt,$params);
69  assertThat($sql, is('SELECT pet FROM africa WHERE cervical=7 AND class=\'Mammalia\'\'; SELECT * FROM passwords WHERE user like \'\'%\' AND t') );
70  }
71 
72  function testEvaluateStatement_exception()
73  {
74  $sqlStmt = 'SELECT pet FROM africa WHERE cervical=$1 AND class=$2';
75  $this->dbManager->prepare($stmt='statement',$sqlStmt);
76 
77  $reflection = new \ReflectionClass(get_class($this->dbManager));
78  $method = $reflection->getMethod('evaluateStatement');
79  $method->setAccessible(true);
80 
81  $exceptionMsg = false;
82  $params = array(7,'Mammalia','non-used parameter');
83  try {
84  $method->invoke($this->dbManager,$stmt,$params);
85  }
86  catch(\Exception $e) {
87  $exceptionMsg = $e->getMessage();
88  }
89  assertThat($exceptionMsg, is('$3 not found in prepared statement'));
90  }
91 }
Fossology exception.
Definition: Exception.php:15
fo_dbManager * dbManager
fo_dbManager object
Definition: process.c:16