ILIAS  release_10 Revision v10.1-43-ga1241a92c2f
ilServicesFileServicesTest Class Reference

// this is necessary to avoid side effects with the DIC disabled More...

+ Inheritance diagram for ilServicesFileServicesTest:
+ Collaboration diagram for ilServicesFileServicesTest:

Public Member Functions

 testSanitizing ()
 
 testBlacklistedUpload ()
 
 testBlacklistedUploadWithPermission ()
 
 testRenamingNonWhitelistedFile ()
 
 testActualWhitelist ()
 
 testFileNamePolicyOnDownloading ()
 

Protected Member Functions

 setUp ()
 
 tearDown ()
 

Private Attributes

ILIAS DI Container $dic_backup
 
ilDBInterface $db_mock = null
 

Detailed Description

// this is necessary to avoid side effects with the DIC disabled

Definition at line 33 of file ilServicesFileServicesTest.php.

Member Function Documentation

◆ setUp()

ilServicesFileServicesTest::setUp ( )
protected

Definition at line 41 of file ilServicesFileServicesTest.php.

References $DIC.

41  : void
42  {
43  global $DIC;
44  $this->dic_backup = is_object($DIC) ? clone $DIC : null;
45 
46  $DIC = new \ILIAS\DI\Container();
47  $DIC['ilDB'] = $this->db_mock = $this->createMock(ilDBInterface::class);
48  }
global $DIC
Definition: shib_login.php:25

◆ tearDown()

ilServicesFileServicesTest::tearDown ( )
protected

Definition at line 50 of file ilServicesFileServicesTest.php.

References $DIC, and $dic_backup.

50  : void
51  {
52  global $DIC;
53  $DIC = $this->dic_backup;
54  }
global $DIC
Definition: shib_login.php:25

◆ testActualWhitelist()

ilServicesFileServicesTest::testActualWhitelist ( )

Definition at line 132 of file ilServicesFileServicesTest.php.

132  : void
133  {
134  $settings_mock = $this->createMock(ilSetting::class);
135  $ini_mock = $this->createMock(ilIniFile::class);
136 
137  $ref = new stdClass();
138  $ref->ref_id = 32;
139  $this->db_mock->expects($this->once())
140  ->method('fetchObject')
141  ->willReturn($ref);
142 
143  $this->db_mock->expects($this->once())
144  ->method('fetchAssoc')
145  ->willReturn([]);
146 
147  $default_whitelist = include __DIR__ . "/../defaults/default_whitelist.php";
148 
149  // Blacklist
150  $consecutive = [
151  ['suffix_custom_expl_black', 'bl001,bl002'], // blacklisted
152  ['suffix_repl_additional', 'docx,doc'], // remove from whitelist
153  ['suffix_custom_white_list', 'wl001,wl002'] // add whitelist
154  ];
155  $settings_mock
156  ->expects($this->exactly(3))
157  ->method('get')
158  ->willReturnCallback(
159  function ($k) use (&$consecutive) {
160  list($expected, $return) = array_shift($consecutive);
161  $this->assertEquals($expected, $k);
162  return $return;
163  }
164  );
165 
166  $settings = new ilFileServicesSettings($settings_mock, $ini_mock, $this->db_mock);
167  $this->assertEquals(['bl001', 'bl002'], $settings->getBlackListedSuffixes());
168  $this->assertEquals(['bl001', 'bl002'], $settings->getProhibited());
169  $this->assertEquals($default_whitelist, $settings->getDefaultWhitelist());
170  $this->assertEquals(['docx', 'doc'], $settings->getWhiteListNegative());
171  $this->assertEquals(['wl001', 'wl002'], $settings->getWhiteListPositive());
172 
173  $whitelist = array_merge(
174  array_diff($default_whitelist, ['docx', 'doc']),
175  ['wl001', 'wl002', '']
176  );
177  $diff = array_diff($whitelist, $settings->getWhiteListedSuffixes());
178 
179  $this->assertEquals([], $diff);
180  $this->assertEquals(0, count($diff));
181  }

◆ testBlacklistedUpload()

ilServicesFileServicesTest::testBlacklistedUpload ( )

Definition at line 69 of file ilServicesFileServicesTest.php.

69  : void
70  {
71  $settings = $this->createMock(ilFileServicesSettings::class);
72  $settings->expects($this->once())
73  ->method('getBlackListedSuffixes')
74  ->willReturn(['pdf']);
75 
76  $settings->expects($this->once())
77  ->method('isByPassAllowedForCurrentUser')
78  ->willReturn(false);
79 
80  $stream = $this->createMock(FileStream::class);
81  $meta = new Metadata('filename.pdf', 42, 'application/pdf');
82 
83  $processor = new ilFileServicesPreProcessor(
84  $settings,
85  'the reason'
86  );
87  // is ok since user has permission
88  $status = $processor->process($stream, $meta);
89  $this->assertEquals(ProcessingStatus::REJECTED, $status->getCode());
90  }

◆ testBlacklistedUploadWithPermission()

ilServicesFileServicesTest::testBlacklistedUploadWithPermission ( )

Definition at line 92 of file ilServicesFileServicesTest.php.

92  : void
93  {
94  $settings = $this->createMock(ilFileServicesSettings::class);
95  $settings->expects($this->once())
96  ->method('getBlackListedSuffixes')
97  ->willReturn(['pdf']);
98 
99  $settings->expects($this->once())
100  ->method('isByPassAllowedForCurrentUser')
101  ->willReturn(true);
102 
103  $stream = $this->createMock(FileStream::class);
104  $meta = new Metadata('filename.pdf', 42, 'application/pdf');
105 
106  $processor = new ilFileServicesPreProcessor(
107  $settings,
108  'the reason'
109  );
110  // is ok since user has permission
111  $status = $processor->process($stream, $meta);
112  $this->assertEquals(ProcessingStatus::OK, $status->getCode());
113  }

◆ testFileNamePolicyOnDownloading()

ilServicesFileServicesTest::testFileNamePolicyOnDownloading ( )

Definition at line 185 of file ilServicesFileServicesTest.php.

185  : void
186  {
187  $settings = $this->createMock(ilFileServicesSettings::class);
188 
189  $settings->expects($this->atLeastOnce())
190  ->method('getBlackListedSuffixes')
191  ->willReturn(['mp3']);
192 
193  $settings->expects($this->atLeastOnce())
194  ->method('getWhiteListedSuffixes')
195  ->willReturn(['pdf', 'png', 'mp3']);
196 
197  $settings->expects($this->atLeastOnce())
198  ->method('isASCIIConvertionEnabled')
199  ->willReturn(true);
200 
201  $policy = new ilFileServicesPolicy($settings);
202  $this->assertEquals('testmp3.sec', $policy->prepareFileNameForConsumer('test.mp3'));
203  $this->assertEquals('test.png', $policy->prepareFileNameForConsumer('test.png'));
204  $this->assertEquals('test.pdf', $policy->prepareFileNameForConsumer('test.pdf'));
205  $this->assertEquals('aeaeaeaeaeaeaeaeae.pdf', $policy->prepareFileNameForConsumer('äääääääää.pdf'));
206  $this->assertEquals('oeoeoeoeoeoeoeoeoe.pdf', $policy->prepareFileNameForConsumer('ööööööööö.pdf'));
207  $this->assertEquals('ueueueueueueueueue.pdf', $policy->prepareFileNameForConsumer('üüüüüüüüü.pdf'));
208  }
Class ilFileServicesPolicy.

◆ testRenamingNonWhitelistedFile()

ilServicesFileServicesTest::testRenamingNonWhitelistedFile ( )

Definition at line 115 of file ilServicesFileServicesTest.php.

115  : void
116  {
117  $settings = $this->createMock(ilFileServicesSettings::class);
118  $settings->expects($this->once())
119  ->method('getWhiteListedSuffixes')
120  ->willReturn(['pdf', 'png', 'jpg']);
121 
122  $sanitizer = new ilFileServicesFilenameSanitizer($settings);
123 
124  $sane_filename = 'bellerophon.pdf';
125  $this->assertEquals($sane_filename, $sanitizer->sanitize($sane_filename));
126 
127  $insane_filename = 'bellerophon.docx';
128  $this->assertNotEquals($insane_filename, $sanitizer->sanitize($insane_filename));
129  $this->assertEquals('bellerophondocx.sec', $sanitizer->sanitize($insane_filename));
130  }
Class ilFileServicesFilenameSanitizer.

◆ testSanitizing()

ilServicesFileServicesTest::testSanitizing ( )

Definition at line 56 of file ilServicesFileServicesTest.php.

56  : void
57  {
58  $settings = $this->createMock(ilFileServicesSettings::class);
59  $settings->expects($this->once())
60  ->method('getWhiteListedSuffixes')
61  ->willReturn(['pdf', 'jpg']);
62 
63  $sanitizer = new ilFileServicesFilenameSanitizer($settings);
64  $this->assertTrue($sanitizer->isClean('/lib/test.pdf'));
65  $this->assertFalse($sanitizer->isClean('/lib/test.xml'));
66  $this->assertEquals('/lib/testxml.sec', $sanitizer->sanitize('/lib/test.xml'));
67  }
Class ilFileServicesFilenameSanitizer.

Field Documentation

◆ $db_mock

ilDBInterface ilServicesFileServicesTest::$db_mock = null
private

Definition at line 39 of file ilServicesFileServicesTest.php.

◆ $dic_backup

ILIAS DI Container ilServicesFileServicesTest::$dic_backup
private

Definition at line 35 of file ilServicesFileServicesTest.php.

Referenced by tearDown().


The documentation for this class was generated from the following file: