From d637bffac6b8149aa2520ee7acb637ca1cbcc5f1 Mon Sep 17 00:00:00 2001 From: Clark Tomlinson Date: Mon, 6 Apr 2015 15:08:09 -0400 Subject: [PATCH] adding user setup test and adding 4 tests to keymanager --- apps/encryption/tests/lib/KeyManagerTest.php | 76 ++++++++++++++--- apps/encryption/tests/lib/users/SetupTest.php | 81 +++++++++++++++++++ 2 files changed, 144 insertions(+), 13 deletions(-) create mode 100644 apps/encryption/tests/lib/users/SetupTest.php diff --git a/apps/encryption/tests/lib/KeyManagerTest.php b/apps/encryption/tests/lib/KeyManagerTest.php index 5a85007aa57..d12578bb8d2 100644 --- a/apps/encryption/tests/lib/KeyManagerTest.php +++ b/apps/encryption/tests/lib/KeyManagerTest.php @@ -67,7 +67,7 @@ class KeyManagerTest extends TestCase { $this->utilMock = $this->getMockBuilder('OCA\Encryption\Util') ->disableOriginalConstructor() ->getMock(); - + $this->instance = new KeyManager( $this->keyStorageMock, $this->cryptMock, @@ -83,7 +83,7 @@ class KeyManagerTest extends TestCase { ->method('deleteFileKey') ->with($this->equalTo('/path'), $this->equalTo('keyId.shareKey')) ->willReturn(true); - + $this->assertTrue( $this->instance->deleteShareKey('/path', 'keyId') ); @@ -94,7 +94,7 @@ class KeyManagerTest extends TestCase { ->method('getUserKey') ->with($this->equalTo($this->userId), $this->equalTo('privateKey')) ->willReturn('privateKey'); - + $this->assertSame('privateKey', $this->instance->getPrivateKey($this->userId) @@ -106,7 +106,7 @@ class KeyManagerTest extends TestCase { ->method('getUserKey') ->with($this->equalTo($this->userId), $this->equalTo('publicKey')) ->willReturn('publicKey'); - + $this->assertSame('publicKey', $this->instance->getPublicKey($this->userId) @@ -118,7 +118,7 @@ class KeyManagerTest extends TestCase { ->method('getSystemUserKey') ->with($this->equalTo($this->systemKeyId . '.publicKey')) ->willReturn('recoveryKey'); - + $this->assertTrue($this->instance->recoveryKeyExists()); } @@ -144,7 +144,7 @@ class KeyManagerTest extends TestCase { $this->equalTo('publicKey'), $this->equalTo('key')) ->willReturn(true); - + $this->assertTrue( $this->instance->setPublicKey($this->userId, 'key') @@ -159,7 +159,7 @@ class KeyManagerTest extends TestCase { $this->equalTo('privateKey'), $this->equalTo('key')) ->willReturn(true); - + $this->assertTrue( $this->instance->setPrivateKey($this->userId, 'key') @@ -171,7 +171,7 @@ class KeyManagerTest extends TestCase { ->method('getUserKey') ->with($this->equalTo($this->userId), $this->anything()) ->willReturn('key'); - + $this->assertTrue( $this->instance->userHasKeys($this->userId) @@ -187,7 +187,7 @@ class KeyManagerTest extends TestCase { ->method('decryptPrivateKey') ->with($this->equalTo('privateKey'), $this->equalTo('pass')) ->willReturn('decryptedPrivateKey'); - + $this->assertTrue( $this->instance->init($this->userId, 'pass') @@ -203,10 +203,11 @@ class KeyManagerTest extends TestCase { ->method('symmetricEncryptFileContent') ->with($this->equalTo('privateKey'), $this->equalTo('pass')) ->willReturn('decryptedPrivateKey'); - + $this->assertTrue( - $this->instance->setRecoveryKey('pass', array('publicKey' => 'publicKey', 'privateKey' => 'privateKey')) + $this->instance->setRecoveryKey('pass', + array('publicKey' => 'publicKey', 'privateKey' => 'privateKey')) ); } @@ -215,7 +216,7 @@ class KeyManagerTest extends TestCase { ->method('setSystemUserKey') ->with($this->equalTo('keyId.privateKey'), $this->equalTo('key')) ->willReturn(true); - + $this->assertTrue( $this->instance->setSystemPrivateKey('keyId', 'key') @@ -227,10 +228,59 @@ class KeyManagerTest extends TestCase { ->method('getSystemUserKey') ->with($this->equalTo('keyId.privateKey')) ->willReturn('systemPrivateKey'); - + $this->assertSame('systemPrivateKey', $this->instance->getSystemPrivateKey('keyId') ); } + + public function testGetEncryptedFileKey() { + $this->keyStorageMock->expects($this->once()) + ->method('getFileKey') + ->with('/', 'fileKey') + ->willReturn(true); + + $this->assertTrue($this->instance->getEncryptedFileKey('/')); + } + + public function testGetFileKey() { + $this->keyStorageMock->expects($this->exactly(4)) + ->method('getFileKey') + ->willReturn(true); + + $this->keyStorageMock->expects($this->once()) + ->method('getSystemUserKey') + ->willReturn(true); + + $this->cryptMock->expects($this->once()) + ->method('symmetricDecryptFileContent') + ->willReturn(true); + + $this->cryptMock->expects($this->once()) + ->method('multiKeyDecrypt') + ->willReturn(true); + + $this->assertTrue($this->instance->getFileKey('/', null)); + $this->assertEmpty($this->instance->getFileKey('/', $this->userId)); + } + + public function testDeletePrivateKey() { + $this->keyStorageMock->expects($this->once()) + ->method('deleteUserKey') + ->with('user1', 'privateKey') + ->willReturn(true); + + $this->assertTrue(\Test_Helper::invokePrivate($this->instance, + 'deletePrivateKey', + [$this->userId])); + } + + public function testDeleteAllFileKeys() { + $this->keyStorageMock->expects($this->once()) + ->method('deleteAllFileKeys') + ->willReturn(true); + + $this->assertTrue($this->instance->deleteAllFileKeys('/')); + } } diff --git a/apps/encryption/tests/lib/users/SetupTest.php b/apps/encryption/tests/lib/users/SetupTest.php new file mode 100644 index 00000000000..6a66df3674b --- /dev/null +++ b/apps/encryption/tests/lib/users/SetupTest.php @@ -0,0 +1,81 @@ + + * @since 4/6/15, 11:50 AM + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see + * + */ + + +namespace OCA\Encryption\Tests\Users; + + +use OCA\Encryption\Users\Setup; +use Test\TestCase; + +class SetupTest extends TestCase { + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $keyManagerMock; + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $cryptMock; + /** + * @var Setup + */ + private $instance; + + public function testSetupServerSide() { + $this->keyManagerMock->expects($this->exactly(2)) + ->method('userHasKeys') + ->with('admin') + ->willReturnOnConsecutiveCalls(true, false); + + $this->assertTrue($this->instance->setupServerSide('admin', + 'password')); + + $this->keyManagerMock->expects($this->once()) + ->method('storeKeyPair') + ->with('admin', 'password') + ->willReturn(false); + + $this->assertFalse($this->instance->setupServerSide('admin', + 'password')); + } + + protected function setUp() { + parent::setUp(); + $logMock = $this->getMock('OCP\ILogger'); + $userSessionMock = $this->getMockBuilder('OCP\IUserSession') + ->disableOriginalConstructor() + ->getMock(); + $this->cryptMock = $this->getMockBuilder('OCA\Encryption\Crypto\Crypt') + ->disableOriginalConstructor() + ->getMock(); + + $this->keyManagerMock = $this->getMockBuilder('OCA\Encryption\KeyManager') + ->disableOriginalConstructor() + ->getMock(); + + $this->instance = new Setup($logMock, + $userSessionMock, + $this->cryptMock, + $this->keyManagerMock); + } + +} -- 2.39.5