summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorBjoern Schiessle <bjoern@schiessle.org>2016-07-11 15:51:48 +0200
committerBjoern Schiessle <bjoern@schiessle.org>2016-07-11 15:51:48 +0200
commit7c64e1973fdcb41758c221118c6167668a563953 (patch)
tree829ce6b82f34a3b1883a6865f8e994d5d74a8d69 /tests
parentd15fd5cb96043f908f8fdb9e111f1c8686a0434b (diff)
downloadnextcloud-server-7c64e1973fdcb41758c221118c6167668a563953.tar.gz
nextcloud-server-7c64e1973fdcb41758c221118c6167668a563953.zip
add test for needsRebundling() check
Diffstat (limited to 'tests')
-rw-r--r--tests/lib/Security/CertificateManagerTest.php92
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],
+ ];
+ }
+
}