diff options
author | Bjoern Schiessle <bjoern@schiessle.org> | 2016-07-11 15:51:48 +0200 |
---|---|---|
committer | Bjoern Schiessle <bjoern@schiessle.org> | 2016-07-11 15:51:48 +0200 |
commit | 7c64e1973fdcb41758c221118c6167668a563953 (patch) | |
tree | 829ce6b82f34a3b1883a6865f8e994d5d74a8d69 /tests | |
parent | d15fd5cb96043f908f8fdb9e111f1c8686a0434b (diff) | |
download | nextcloud-server-7c64e1973fdcb41758c221118c6167668a563953.tar.gz nextcloud-server-7c64e1973fdcb41758c221118c6167668a563953.zip |
add test for needsRebundling() check
Diffstat (limited to 'tests')
-rw-r--r-- | tests/lib/Security/CertificateManagerTest.php | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/tests/lib/Security/CertificateManagerTest.php b/tests/lib/Security/CertificateManagerTest.php index 43206569cf4..3abd3392e6c 100644 --- a/tests/lib/Security/CertificateManagerTest.php +++ b/tests/lib/Security/CertificateManagerTest.php @@ -118,4 +118,96 @@ class CertificateManagerTest extends \Test\TestCase { $this->assertSame('/' . $this->username . '/files_external/rootcerts.crt', $this->certificateManager->getCertificateBundle()); } + /** + * @dataProvider dataTestNeedRebundling + * + * @param string $uid + * @param int $CaBundleMtime + * @param int $systemWideMtime + * @param int $targetBundleMtime + * @param int $targetBundleExists + * @param bool $expected + */ + function testNeedRebundling($uid, + $CaBundleMtime, + $systemWideMtime, + $targetBundleMtime, + $targetBundleExists, + $expected + ) { + + $view = $this->getMockBuilder('OC\Files\View') + ->disableOriginalConstructor()->getMock(); + $config = $this->getMock('OCP\IConfig'); + + /** @var CertificateManager | \PHPUnit_Framework_MockObject_MockObject $certificateManager */ + $certificateManager = $this->getMockBuilder('OC\Security\CertificateManager') + ->setConstructorArgs([$uid, $view, $config]) + ->setMethods(['getFilemtimeOfCaBundle', 'getCertificateBundle']) + ->getMock(); + + $certificateManager->expects($this->any())->method('getFilemtimeOfCaBundle') + ->willReturn($CaBundleMtime); + + $certificateManager->expects($this->at(1))->method('getCertificateBundle') + ->with($uid)->willReturn('targetBundlePath'); + + $view->expects($this->any())->method('file_exists') + ->with('targetBundlePath') + ->willReturn($targetBundleExists); + + + if ($uid !== null && $targetBundleExists) { + $certificateManager->expects($this->at(2))->method('getCertificateBundle') + ->with(null)->willReturn('SystemBundlePath'); + + } + + $view->expects($this->any())->method('filemtime') + ->willReturnCallback(function($path) use ($systemWideMtime, $targetBundleMtime) { + if ($path === 'SystemBundlePath') { + return $systemWideMtime; + } elseif ($path === 'targetBundlePath') { + return $targetBundleMtime; + } + throw new \Exception('unexpected path'); + }); + + + $this->assertSame($expected, + $this->invokePrivate($certificateManager, 'needsRebundling', [$uid]) + ); + + } + + function dataTestNeedRebundling() { + return [ + //values: uid, CaBundleMtime, systemWideMtime, targetBundleMtime, targetBundleExists, expected + + // compare minimum of CaBundleMtime and systemWideMtime with targetBundleMtime + ['user1', 10, 20, 30, true, false], + ['user1', 10, 20, 15, true, true], + ['user1', 10, 5, 30, true, false], + ['user1', 10, 5, 8, true, true], + + // if no user exists we ignore 'systemWideMtime' because this is the bundle we re-build + [null, 10, 20, 30, true, false], + [null, 10, 20, 15, true, false], + [null, 10, 20, 8, true, true], + [null, 10, 5, 30, true, false], + [null, 10, 5, 8, true, true], + + // if no target bundle exists we always build a new one + ['user1', 10, 20, 30, false, true], + ['user1', 10, 20, 15, false, true], + ['user1', 10, 5, 30, false, true], + ['user1', 10, 5, 8, false, true], + [null, 10, 20, 30, false, true], + [null, 10, 20, 15, false, true], + [null, 10, 20, 8, false, true], + [null, 10, 5, 30, false, true], + [null, 10, 5, 8, false, true], + ]; + } + } |