123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- <?php
- /**
- * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
- * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
- * SPDX-License-Identifier: AGPL-3.0-only
- */
- namespace OCA\Encryption\Tests;
- use OCA\Encryption\Exceptions\PrivateKeyMissingException;
- use OCA\Encryption\Session;
- use OCP\ISession;
- use Test\TestCase;
- class SessionTest extends TestCase {
- private static $tempStorage = [];
- /**
- * @var Session
- */
- private $instance;
- /** @var ISession|\PHPUnit\Framework\MockObject\MockObject */
- private $sessionMock;
- public function testThatGetPrivateKeyThrowsExceptionWhenNotSet(): void {
- $this->expectException(PrivateKeyMissingException::class);
- $this->expectExceptionMessage('Private Key missing for user: please try to log-out and log-in again');
- $this->instance->getPrivateKey();
- }
- /**
- * @depends testThatGetPrivateKeyThrowsExceptionWhenNotSet
- */
- public function testSetAndGetPrivateKey(): void {
- $this->instance->setPrivateKey('dummyPrivateKey');
- $this->assertEquals('dummyPrivateKey', $this->instance->getPrivateKey());
- }
- /**
- * @depends testSetAndGetPrivateKey
- */
- public function testIsPrivateKeySet(): void {
- $this->instance->setPrivateKey('dummyPrivateKey');
- $this->assertTrue($this->instance->isPrivateKeySet());
- unset(self::$tempStorage['privateKey']);
- $this->assertFalse($this->instance->isPrivateKeySet());
- // Set private key back so we can test clear method
- self::$tempStorage['privateKey'] = 'dummyPrivateKey';
- }
- public function testDecryptAllModeActivated(): void {
- $this->instance->prepareDecryptAll('user1', 'usersKey');
- $this->assertTrue($this->instance->decryptAllModeActivated());
- $this->assertSame('user1', $this->instance->getDecryptAllUid());
- $this->assertSame('usersKey', $this->instance->getDecryptAllKey());
- }
- public function testDecryptAllModeDeactivated(): void {
- $this->assertFalse($this->instance->decryptAllModeActivated());
- }
- /**
- * @expectExceptionMessage 'Please activate decrypt all mode first'
- */
- public function testGetDecryptAllUidException(): void {
- $this->expectException(\Exception::class);
- $this->instance->getDecryptAllUid();
- }
- /**
- * @expectExceptionMessage 'No uid found while in decrypt all mode'
- */
- public function testGetDecryptAllUidException2(): void {
- $this->expectException(\Exception::class);
- $this->instance->prepareDecryptAll(null, 'key');
- $this->instance->getDecryptAllUid();
- }
- /**
- * @expectExceptionMessage 'Please activate decrypt all mode first'
- */
- public function testGetDecryptAllKeyException(): void {
- $this->expectException(PrivateKeyMissingException::class);
- $this->instance->getDecryptAllKey();
- }
- /**
- * @expectExceptionMessage 'No key found while in decrypt all mode'
- */
- public function testGetDecryptAllKeyException2(): void {
- $this->expectException(PrivateKeyMissingException::class);
- $this->instance->prepareDecryptAll('user', null);
- $this->instance->getDecryptAllKey();
- }
- public function testSetAndGetStatusWillSetAndReturn(): void {
- // Check if get status will return 0 if it has not been set before
- $this->assertEquals(0, $this->instance->getStatus());
- $this->instance->setStatus(Session::NOT_INITIALIZED);
- $this->assertEquals(0, $this->instance->getStatus());
- $this->instance->setStatus(Session::INIT_EXECUTED);
- $this->assertEquals(1, $this->instance->getStatus());
- $this->instance->setStatus(Session::INIT_SUCCESSFUL);
- $this->assertEquals(2, $this->instance->getStatus());
- }
- /**
- * @dataProvider dataTestIsReady
- *
- * @param int $status
- * @param bool $expected
- */
- public function testIsReady($status, $expected): void {
- /** @var Session | \PHPUnit\Framework\MockObject\MockObject $instance */
- $instance = $this->getMockBuilder(Session::class)
- ->setConstructorArgs([$this->sessionMock])
- ->setMethods(['getStatus'])->getMock();
- $instance->expects($this->once())->method('getStatus')
- ->willReturn($status);
- $this->assertSame($expected, $instance->isReady());
- }
- public function dataTestIsReady() {
- return [
- [Session::INIT_SUCCESSFUL, true],
- [Session::INIT_EXECUTED, false],
- [Session::NOT_INITIALIZED, false],
- ];
- }
- /**
- * @param $key
- * @param $value
- */
- public function setValueTester($key, $value) {
- self::$tempStorage[$key] = $value;
- }
- /**
- * @param $key
- */
- public function removeValueTester($key) {
- unset(self::$tempStorage[$key]);
- }
- /**
- * @param $key
- * @return mixed
- */
- public function getValueTester($key) {
- if (!empty(self::$tempStorage[$key])) {
- return self::$tempStorage[$key];
- }
- return null;
- }
- public function testClearWillRemoveValues(): void {
- $this->instance->setPrivateKey('privateKey');
- $this->instance->setStatus('initStatus');
- $this->instance->prepareDecryptAll('user', 'key');
- $this->assertNotEmpty(self::$tempStorage);
- $this->instance->clear();
- $this->assertEmpty(self::$tempStorage);
- }
- protected function setUp(): void {
- parent::setUp();
- $this->sessionMock = $this->createMock(ISession::class);
- $this->sessionMock->expects($this->any())
- ->method('set')
- ->willReturnCallback([$this, 'setValueTester']);
- $this->sessionMock->expects($this->any())
- ->method('get')
- ->willReturnCallback([$this, 'getValueTester']);
- $this->sessionMock->expects($this->any())
- ->method('remove')
- ->willReturnCallback([$this, 'removeValueTester']);
- $this->instance = new Session($this->sessionMock);
- }
- protected function tearDown(): void {
- self::$tempStorage = [];
- parent::tearDown();
- }
- }
|