summaryrefslogtreecommitdiffstats
path: root/apps/encryption/tests/lib
diff options
context:
space:
mode:
authorBjoern Schiessle <schiessle@owncloud.com>2015-04-09 14:59:03 +0200
committerBjoern Schiessle <schiessle@owncloud.com>2015-04-10 15:12:57 +0200
commitd1fa3c6b3201ee06d36d736f3a47f7d0a7257697 (patch)
tree9007cd01a9af2b3434f8cf6168abe221c2830abe /apps/encryption/tests/lib
parent79ef54fe00ad099944291acd869e058ce12daec6 (diff)
downloadnextcloud-server-d1fa3c6b3201ee06d36d736f3a47f7d0a7257697.tar.gz
nextcloud-server-d1fa3c6b3201ee06d36d736f3a47f7d0a7257697.zip
add unit test for crypt.php
Diffstat (limited to 'apps/encryption/tests/lib')
-rw-r--r--apps/encryption/tests/lib/crypto/cryptTest.php263
1 files changed, 263 insertions, 0 deletions
diff --git a/apps/encryption/tests/lib/crypto/cryptTest.php b/apps/encryption/tests/lib/crypto/cryptTest.php
new file mode 100644
index 00000000000..3ea57668348
--- /dev/null
+++ b/apps/encryption/tests/lib/crypto/cryptTest.php
@@ -0,0 +1,263 @@
+<?php
+/**
+ * @author Björn Schießle <schiessle@owncloud.com>
+ *
+ * @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 <http://www.gnu.org/licenses/>
+ *
+ */
+
+
+namespace OCA\Encryption\Tests\Crypt;
+
+
+use OCA\Encryption\Crypto\Crypt;
+use Test\TestCase;
+
+class cryptTest extends TestCase {
+
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject */
+ private $logger;
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject */
+ private $userSession;
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject */
+ private $config;
+
+ /** @var Crypt */
+ private $crypt;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->logger = $this->getMockBuilder('OCP\ILogger')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $this->logger->expects($this->any())
+ ->method('warning')
+ ->willReturn(true);
+ $this->userSession = $this->getMockBuilder('OCP\IUserSession')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $this->config = $this->getMockBuilder('OCP\IConfig')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->crypt = new Crypt($this->logger, $this->userSession, $this->config);
+ }
+
+ /**
+ * test getOpenSSLConfig without any additional parameters
+ */
+ public function testGetOpenSSLConfigBasic() {
+
+ $this->config->expects($this->once())
+ ->method('getSystemValue')
+ ->with($this->equalTo('openssl'), $this->equalTo([]))
+ ->willReturn(array());
+
+ $result = \Test_Helper::invokePrivate($this->crypt, 'getOpenSSLConfig');
+ $this->assertSame(1, count($result));
+ $this->assertArrayHasKey('private_key_bits', $result);
+ $this->assertSame(4096, $result['private_key_bits']);
+ }
+
+ /**
+ * test getOpenSSLConfig with additional parameters defined in config.php
+ */
+ public function testGetOpenSSLConfig() {
+
+ $this->config->expects($this->once())
+ ->method('getSystemValue')
+ ->with($this->equalTo('openssl'), $this->equalTo([]))
+ ->willReturn(array('foo' => 'bar', 'private_key_bits' => 1028));
+
+ $result = \Test_Helper::invokePrivate($this->crypt, 'getOpenSSLConfig');
+ $this->assertSame(2, count($result));
+ $this->assertArrayHasKey('private_key_bits', $result);
+ $this->assertArrayHasKey('foo', $result);
+ $this->assertSame(1028, $result['private_key_bits']);
+ $this->assertSame('bar', $result['foo']);
+ }
+
+
+ /**
+ * test generateHeader
+ */
+ public function testGenerateHeader() {
+
+ $this->config->expects($this->once())
+ ->method('getSystemValue')
+ ->with($this->equalTo('cipher'), $this->equalTo('AES-256-CFB'))
+ ->willReturn('AES-128-CFB');
+
+ $this->assertSame('HBEGIN:cipher:AES-128-CFB:HEND',
+ $this->crypt->generateHeader()
+ );
+ }
+
+ /**
+ * @dataProvider dataProviderGetCipher
+ * @param string $configValue
+ * @param string $expected
+ */
+ public function testGetCipher($configValue, $expected) {
+
+ $this->config->expects($this->once())
+ ->method('getSystemValue')
+ ->with($this->equalTo('cipher'), $this->equalTo('AES-256-CFB'))
+ ->willReturn($configValue);
+
+ $this->assertSame($expected,
+ $this->crypt->getCipher()
+ );
+
+ }
+
+ /**
+ * data provider for testGetCipher
+ *
+ * @return array
+ */
+ public function dataProviderGetCipher() {
+ return array(
+ array('AES-128-CFB', 'AES-128-CFB'),
+ array('AES-256-CFB', 'AES-256-CFB'),
+ array('unknown', 'AES-256-CFB')
+ );
+ }
+
+ /**
+ * test concatIV()
+ */
+ public function testConcatIV() {
+
+ $result = \Test_Helper::invokePrivate(
+ $this->crypt,
+ 'concatIV',
+ array('content', 'my_iv'));
+
+ $this->assertSame('content00iv00my_iv',
+ $result
+ );
+ }
+
+ /**
+ * test splitIV()
+ */
+ public function testSplitIV() {
+ $data = 'encryptedContent00iv001234567890123456';
+ $result = \Test_Helper::invokePrivate($this->crypt, 'splitIV', array($data));
+ $this->assertTrue(is_array($result));
+ $this->assertSame(2, count($result));
+ $this->assertArrayHasKey('encrypted', $result);
+ $this->assertArrayHasKey('iv', $result);
+ $this->assertSame('encryptedContent', $result['encrypted']);
+ $this->assertSame('1234567890123456', $result['iv']);
+ }
+
+ /**
+ * test addPadding()
+ */
+ public function testAddPadding() {
+ $result = \Test_Helper::invokePrivate($this->crypt, 'addPadding', array('data'));
+ $this->assertSame('dataxx', $result);
+ }
+
+ /**
+ * test removePadding()
+ *
+ * @dataProvider dataProviderRemovePadding
+ * @param $data
+ * @param $expected
+ */
+ public function testRemovePadding($data, $expected) {
+ $result = \Test_Helper::invokePrivate($this->crypt, 'removePadding', array($data));
+ $this->assertSame($expected, $result);
+ }
+
+ /**
+ * data provider for testRemovePadding
+ *
+ * @return array
+ */
+ public function dataProviderRemovePadding() {
+ return array(
+ array('dataxx', 'data'),
+ array('data', false)
+ );
+ }
+
+ /**
+ * test parseHeader()
+ */
+ public function testParseHeader() {
+
+ $header= 'HBEGIN:foo:bar:cipher:AES-256-CFB:HEND';
+ $result = \Test_Helper::invokePrivate($this->crypt, 'parseHeader', array($header));
+
+ $this->assertTrue(is_array($result));
+ $this->assertSame(2, count($result));
+ $this->assertArrayHasKey('foo', $result);
+ $this->assertArrayHasKey('cipher', $result);
+ $this->assertSame('bar', $result['foo']);
+ $this->assertSame('AES-256-CFB', $result['cipher']);
+ }
+
+ /**
+ * test encrypt()
+ *
+ * @return string
+ */
+ public function testEncrypt() {
+
+ $decrypted = 'content';
+ $password = 'password';
+ $iv = \Test_Helper::invokePrivate($this->crypt, 'generateIv');
+
+ $this->assertTrue(is_string($iv));
+ $this->assertSame(16, strlen($iv));
+
+ $result = \Test_Helper::invokePrivate($this->crypt, 'encrypt', array($decrypted, $iv, $password));
+
+ $this->assertTrue(is_string($result));
+
+ return array(
+ 'password' => $password,
+ 'iv' => $iv,
+ 'encrypted' => $result,
+ 'decrypted' => $decrypted);
+
+ }
+
+ /**
+ * test decrypt()
+ *
+ * @depends testEncrypt
+ */
+ public function testDecrypt($data) {
+
+ $result = \Test_Helper::invokePrivate(
+ $this->crypt,
+ 'decrypt',
+ array($data['encrypted'], $data['iv'], $data['password']));
+
+ $this->assertSame($data['decrypted'], $result);
+
+ }
+
+}