FOSSology  4.7.1
Open Source License Compliance by Open Source Software
ScanOptionsTest.php
Go to the documentation of this file.
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2021 Siemens AG
4  Author: Gaurav Mishra <mishra.gaurav@siemens.com>
5 
6  SPDX-License-Identifier: GPL-2.0-only
7 */
14 {
15  use Mockery as M;
24  use Symfony\Component\HttpFoundation\Request;
26 
31  class ScanOptionsTest extends \PHPUnit\Framework\TestCase
32  {
37  public static $functions;
38 
43  private $agentAdderMock;
44 
49  private $userDao;
50 
55  public function setUp() : void
56  {
57  global $container;
58  $container = M::mock('ContainerBuilder');
59  $this->agentAdderMock = M::mock('overload:\AgentAdder');
60  $this->userDao = M::mock(UserDao::class);
61  $uploadDao = M::mock(UploadDao::class);
62  $uploadDao->shouldReceive('isAccessible')->andReturn(true);
63  $container->shouldReceive('get')->withArgs(["dao.upload"])
64  ->andReturn($uploadDao);
65  $container->shouldReceive('get')->withArgs(["dao.user"])
66  ->andReturn($this->userDao);
67  $GLOBALS['SysConf']['auth'][Auth::GROUP_ID] = 2;
68  $container->shouldReceive('get')->andReturn(null);
69 
70  self::$functions = M::mock(\stdClass::class);
71  self::$functions->shouldReceive('FolderListUploads_perm')
72  ->withArgs([2, Auth::PERM_WRITE])->andReturn([
73  ['upload_pk' => 2],
74  ['upload_pk' => 3],
75  ['upload_pk' => 4]
76  ]);
77  self::$functions->shouldReceive('register_plugin')
78  ->with(\Hamcrest\Matchers::identicalTo(
79  new ScanOptions(null, null, null, null)));
80  }
81 
89  private function prepareRequest($request, $reuserOpts, $deciderOpts)
90  {
91  if (!empty($reuserOpts)) {
92  if (is_array($reuserOpts['upload'])) {
93  $reuserSelectors = [];
94  foreach ($reuserOpts['upload'] as $uploadId) {
95  $reuserSelectors[] = $uploadId . "," . $reuserOpts['group'];
96  }
97  $request->request->set('uploadToReuse', $reuserSelectors);
98  } else {
99  $reuserSelector = $reuserOpts['upload'] . "," . $reuserOpts['group'];
100  $request->request->set('uploadToReuse', $reuserSelector);
101  }
102  if (key_exists('rules', $reuserOpts)) {
103  $request->request->set('reuseMode', $reuserOpts['rules']);
104  }
105  }
106  if (!empty($deciderOpts)) {
107  $request->request->set('deciderRules', $deciderOpts);
108  if (in_array('nomosInMonk', $deciderOpts)) {
109  $request->request->set('Check_agent_nomos', 1);
110  }
111  }
112  return $request;
113  }
114 
121  public function testScheduleAgentsApiVersionV1()
122  {
123  $reuseUploadId = 2;
124  $uploadId = 4;
125  $folderId = 2;
126  $groupId = 2;
127  $groupName = "fossy";
128  $agentsToAdd = ['agent_nomos', 'agent_ojo', 'agent_monk'];
129  $reuserOpts = [
130  'upload' => $reuseUploadId,
131  'group' => $groupId,
132  'rules' => []
133  ];
134  $deciderOpts = [
135  'nomosInMonk',
136  'ojoNoContradiction'
137  ];
138 
139  $_SERVER['REQUEST_URI'] = "/api/v1/";
140 
141  $mockApiVersion = $this->createMock(ApiVersion::class);
142  $mockApiVersion->method("getVersionFromUri")->willReturn(ApiVersion::V1);
143 
144  $request = new Request();
145  $request = $this->prepareRequest($request, $reuserOpts, $deciderOpts);
146 
147  $analysis = new Analysis();
148  $analysis->setUsingString("nomos,ojo,monk");
149 
150  $reuse = new Reuser($reuseUploadId, $groupName);
151 
152  $decider = new Decider();
153  $decider->setOjoDecider(true);
154  $decider->setNomosMonk(true);
155  $decider->setConcludeLicenseType("Permissive");
156 
157  $scancode = new Scancode();
158 
159  $scanOption = new ScanOptions($analysis, $reuse, $decider, $scancode);
160 
161  $this->userDao->shouldReceive('getGroupIdByName')
162  ->withArgs([$groupName])->andReturn($groupId);
163  $this->agentAdderMock->shouldReceive('scheduleAgents')
164  ->once()
165  ->andReturn(25);
166 
167  $scanOption->scheduleAgents($folderId, $uploadId);
168  }
169 
170  public function testScheduleAgentsApiVersionV2()
171  {
172  $reuseUploadId = 2;
173  $uploadId = 4;
174  $folderId = 2;
175  $groupId = 2;
176  $groupName = "fossy";
177  $agentsToAdd = ['agent_nomos', 'agent_ojo', 'agent_monk'];
178  $reuserOpts = [
179  'upload' => $reuseUploadId,
180  'group' => $groupId,
181  'rules' => []
182  ];
183  $deciderOpts = [
184  'nomosInMonk',
185  'ojoNoContradiction'
186  ];
187 
188  $_SERVER['REQUEST_URI'] = "/api/v2/";
189 
190  $mockApiVersion = $this->createMock(ApiVersion::class);
191  $mockApiVersion->method("getVersionFromUri")->willReturn(ApiVersion::V2);
192 
193  $request = new Request();
194  $request = $this->prepareRequest($request, $reuserOpts, $deciderOpts);
195 
196  $analysis = new Analysis();
197  $analysis->setUsingString("nomos,ojo,monk");
198 
199  $reuse = new Reuser($reuseUploadId, $groupName);
200 
201  $decider = new Decider();
202  $decider->setOjoDecider(true);
203  $decider->setNomosMonk(true);
204  $decider->setConcludeLicenseType("Permissive");
205 
206  $scancode = new Scancode();
207 
208  $scanOption = new ScanOptions($analysis, $reuse, $decider, $scancode);
209 
210  $this->userDao->shouldReceive('getGroupIdByName')
211  ->withArgs([$groupName])->andReturn($groupId);
212  $this->agentAdderMock->shouldReceive('scheduleAgents')
213  ->once()
214  ->andReturn(25);
215 
216  $scanOption->scheduleAgents($folderId, $uploadId);
217  }
218 
225  {
226  $reuseUploadIds = [2, 5, 10];
227  $uploadId = 4;
228  $folderId = 2;
229  $groupId = 2;
230  $groupName = "fossy";
231  $agentsToAdd = ['agent_nomos', 'agent_ojo', 'agent_monk'];
232 
233  $_SERVER['REQUEST_URI'] = "/api/v1/";
234 
235  $analysis = new Analysis();
236  $analysis->setUsingString("nomos,ojo,monk");
237 
238  $reuse = new Reuser($reuseUploadIds, $groupName);
239 
240  $decider = new Decider();
241  $decider->setOjoDecider(true);
242  $decider->setNomosMonk(true);
243  $decider->setConcludeLicenseType("Permissive");
244 
245  $scancode = new Scancode();
246 
247  $scanOption = new ScanOptions($analysis, $reuse, $decider, $scancode);
248 
249  $expectedSelectors = array_map(function ($id) use ($groupId) {
250  return $id . "," . $groupId;
251  }, $reuseUploadIds);
252 
253  $this->userDao->shouldReceive('getGroupIdByName')
254  ->withArgs([$groupName])->andReturn($groupId);
255  $this->agentAdderMock->shouldReceive('scheduleAgents')
256  ->once()
257  ->withArgs(function ($scheduledUploadId, $scheduledAgents, $scheduledRequest) use ($uploadId, $agentsToAdd, $expectedSelectors) {
258  return $scheduledUploadId === $uploadId &&
259  $scheduledAgents === $agentsToAdd &&
260  $scheduledRequest instanceof Request &&
261  $scheduledRequest->get('uploadToReuse') === $expectedSelectors;
262  })
263  ->andReturn(25);
264 
265  $scanOption->scheduleAgents($folderId, $uploadId);
266  }
267  }
268 }
269 
270 namespace Fossology\UI\Api\Models
271 {
272  function register_plugin($obj)
273  {
274  return \Fossology\Ui\Api\Test\Models\ScanOptionsTest::$functions
275  ->register_plugin($obj);
276  }
277 
278  function FolderListUploads_perm($parentFolder, $perm)
279  {
280  return \Fossology\Ui\Api\Test\Models\ScanOptionsTest::$functions
281  ->FolderListUploads_perm($parentFolder, $perm);
282  }
283 }
Contains the constants and helpers for authentication of user.
Definition: Auth.php:24
Model to hold analysis settings.
Definition: Analysis.php:21
Model to hold info required by Reuser agent.
Definition: Reuser.php:18
Model to hold add settings for new scan.
Definition: ScanOptions.php:32
prepareRequest($request, $reuserOpts, $deciderOpts)
FolderListUploads_perm($ParentFolder, $perm)
Returns an array of uploads in a folder.