FOSSology  4.4.0
Open Source License Compliance by Open Source Software
AgentDaoTest.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\Dao;
9 
13 use Mockery as M;
14 use Monolog\Logger;
15 
16 class AgentDaoTest extends \PHPUnit\Framework\TestCase
17 {
18 
19  private $uploadId = 25;
20  private $olderAgentId = 3;
21  private $otherAgentId = 4;
22  private $agentId = 5;
23  private $incompleteAgentId = 6;
24 
25  private $agentName = "agentName";
26  private $otherAgentName = "otherAgentName";
27 
28  private $agentRev = "<agentRev>";
29  private $olderAgentRev = "<olderAgentRev>";
30  private $otherAgentRev = "<otherAgentRev>";
31  private $incompleteAgentRev = "<incompleteAgentRev>";
32 
33  private $agentDesc = "<agentDesc>";
34  private $otherAgentDesc = "<otherAgentDesc>";
35 
36  private $agentEnabled = true;
37 
39  private $testDb;
40 
42  private $dbManager;
43 
45  private $logger;
46 
48  private $agentsDao;
49 
51  private $agent;
53  private $olderAgent;
55  private $otherAgent;
57  private $incompleteAgent;
58 
59  protected function setUp() : void
60  {
61  $this->dbManager = M::mock(DbManager::class);
62  $this->logger = M::mock('Monolog\Logger');
63 
64  $this->testDb = new TestPgDb();
65  $this->dbManager = &$this->testDb->getDbManager();
66 
67  $this->agent = new AgentRef($this->agentId, $this->agentName, $this->agentRev);
68  $this->olderAgent = new AgentRef($this->olderAgentId, $this->agentName, $this->olderAgentRev);
69  $this->otherAgent = new AgentRef($this->otherAgentId, $this->otherAgentName, $this->otherAgentRev);
70  $this->incompleteAgent = new AgentRef($this->incompleteAgentId, $this->agentName, $this->incompleteAgentRev);
71 
72  $this->testDb->createPlainTables(
73  array(
74  'agent'
75  ));
76 
77  $agentArray = array(
78  array($this->olderAgentId, $this->agentName, $this->olderAgentRev, $this->agentDesc, $this->dbManager->booleanToDb($this->agentEnabled)),
79  array($this->otherAgentId, $this->otherAgentName, $this->otherAgentRev, $this->otherAgentDesc, $this->dbManager->booleanToDb($this->agentEnabled)),
80  array($this->agentId, $this->agentName, $this->agentRev, $this->agentDesc, $this->dbManager->booleanToDb($this->agentEnabled)),
81  array($this->incompleteAgentId, $this->agentName, $this->incompleteAgentRev, $this->agentDesc, $this->dbManager->booleanToDb($this->agentEnabled)),
82  );
83  foreach ($agentArray as $agentRow) {
84  $this->dbManager->insertInto('agent', 'agent_pk, agent_name, agent_rev, agent_desc, agent_enabled', $agentRow);
85  }
86  $this->agentsDao = new AgentDao($this->dbManager, $this->logger);
87 
88  $arsTableName = $this->agentName . AgentDao::ARS_TABLE_SUFFIX;
89  $this->dbManager->queryOnce("create table " . $arsTableName . " (ars_pk int, agent_fk int, upload_fk int, ars_success bool)");
90  $arsArray = array(
91  array(1, $this->olderAgentId, $this->uploadId, $this->dbManager->booleanToDb(true)),
92  array(2, $this->agentId, $this->uploadId, $this->dbManager->booleanToDb(true)),
93  array(3, $this->incompleteAgentId, $this->uploadId, $this->dbManager->booleanToDb(false))
94  );
95  foreach ($arsArray as $arsRow) {
96  $this->dbManager->insertInto($arsTableName, 'ars_pk, agent_fk, upload_fk, ars_success', $arsRow);
97  }
98 
99  $arsTableName = $this->otherAgentName . AgentDao::ARS_TABLE_SUFFIX;
100  $this->dbManager->queryOnce("create table " . $arsTableName . " (ars_pk int, agent_fk int, upload_fk int, ars_success bool)");
101  $arsArray = array(
102  array(1, $this->otherAgentId, $this->uploadId, $this->dbManager->booleanToDb(true)),
103  );
104  foreach ($arsArray as $arsRow) {
105  $this->dbManager->insertInto($arsTableName, 'ars_pk, agent_fk, upload_fk, ars_success', $arsRow);
106  }
107  }
108 
109  protected function tearDown() : void
110  {
111  $this->dbManager->queryOnce("drop table " . $this->agentName . AgentDao::ARS_TABLE_SUFFIX);
112  $this->dbManager->queryOnce("drop table " . $this->otherAgentName . AgentDao::ARS_TABLE_SUFFIX);
113 
114  $this->dbManager = null;
115  $this->testDb = null;
116 
117  M::close();
118  }
119 
120  public function testGetCurrentAgent()
121  {
122  assertThat($this->agentsDao->getCurrentAgentRef($this->agentName), is($this->incompleteAgent));
123  $this->addToAssertionCount(1);
124  }
125 
126  public function testGetSuccessfulAgentRuns()
127  {
128  assertThat($this->agentsDao->getSuccessfulAgentRuns($this->agentName, $this->uploadId), is(array($this->agent, $this->olderAgent)));
129  $this->addToAssertionCount(1);
130  }
131 
132  public function testGetLatestAgentResultForUpload()
133  {
134  global $container;
135  $container = M::mock('ContainerBuilder');
136  $this->dbManagerMock = M::mock(DbManager::class);
137  $container->shouldReceive('get')->withArgs(array('db.manager'))->andReturn($this->dbManagerMock);
138 
139  $this->dbManagerMock->shouldReceive('prepare')->once();
140  $this->dbManagerMock->shouldReceive('execute')->once();
141  $this->dbManagerMock->shouldReceive('fetchArray')
142  ->andReturn(array('agent_pk'=>$this->agentId,'agent_name'=>$this->agentName),
143  array('agent_pk'=>$this->otherAgentId,'agent_name'=>$this->otherAgentName),
144  false);
145  $this->dbManagerMock->shouldReceive('freeResult')->once();
146 
147  $latestAgentResults = $this->agentsDao->getLatestAgentResultForUpload($this->uploadId, array($this->agentName, $this->otherAgentName));
148  assertThat($latestAgentResults, is(array(
149  $this->agentName => $this->agentId,
150  $this->otherAgentName => $this->otherAgentId
151  )));
152  $this->addToAssertionCount(1);
153  }
154 
155  public function testGetRunningAgentIds()
156  {
157  assertThat($this->agentsDao->getRunningAgentIds($this->uploadId, $this->agentName), is(array($this->incompleteAgentId)));
158  $this->addToAssertionCount(1);
159  }
160 
161  public function testGetRunningAgentIdsForFinishedAgent()
162  {
163  assertThat($this->agentsDao->getRunningAgentIds($this->uploadId, $this->otherAgentName), is(emptyArray()));
164  $this->addToAssertionCount(1);
165  }
166 
167  public function testGetRunningAgentIdsForUnknownAgent()
168  {
169  assertThat($this->agentsDao->getRunningAgentIds($this->uploadId, "unknown"), is(emptyArray()));
170  $this->addToAssertionCount(1);
171  }
172 
173  public function testArsTableExists()
174  {
175  $this->assertTrue($this->agentsDao->arsTableExists($this->agentName));
176  }
177 
178  public function testArsTableExistsReturnsFalseIfTableDoesNotExist()
179  {
180  $this->assertFalse($this->agentsDao->arsTableExists("unknown"));
181  }
182 }
fo_dbManager * dbManager
fo_dbManager object
Definition: process.c:16