diff options
author | Klaus Weidenbach <Klaus.Weidenbach@gmx.net> | 2018-02-15 00:01:11 +0100 |
---|---|---|
committer | Klaus Weidenbach <Klaus.Weidenbach@gmx.net> | 2018-02-28 16:04:13 +0100 |
commit | 7c28a40c3e55ea1d8f248639e578cb41ae17e49f (patch) | |
tree | 5be451b4bd3e402b2b5dbf918c9567239175284d /tests/unit | |
parent | 029d155a07e4d2a0af82a19d3234cee50b57a085 (diff) | |
download | volse-hubzilla-7c28a40c3e55ea1d8f248639e578cb41ae17e49f.tar.gz volse-hubzilla-7c28a40c3e55ea1d8f248639e578cb41ae17e49f.tar.bz2 volse-hubzilla-7c28a40c3e55ea1d8f248639e578cb41ae17e49f.zip |
:white_check_mark: Unit Test for HTTPSig.
Diffstat (limited to 'tests/unit')
-rw-r--r-- | tests/unit/Web/HttpSigTest.php | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/tests/unit/Web/HttpSigTest.php b/tests/unit/Web/HttpSigTest.php new file mode 100644 index 000000000..18f2ce92b --- /dev/null +++ b/tests/unit/Web/HttpSigTest.php @@ -0,0 +1,125 @@ +<?php +/* + * Copyright (c) 2018 Hubzilla + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +namespace Zotlabs\Tests\Unit\Web; + +use phpmock\phpunit\PHPMock; +use Zotlabs\Tests\Unit\UnitTestCase; + +use Zotlabs\Web\HTTPSig; + +/** + * @brief Unit Test case for HTTPSig class. + * + * @covers Zotlabs\Web\HTTPSig + */ +class PermissionDescriptionTest extends UnitTestCase { + + use PHPMock; + + /** + * @dataProvider generate_digestProvider + */ + function testGenerate_digest($text, $digest) { + $this->assertSame( + $digest, + HTTPSig::generate_digest($text, false) + ); + } + public function generate_digestProvider() { + return [ + 'empty body text' => [ + '', + '47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=' + ], + 'sample body text' => [ + 'body text', + '2fu8kUkvuzuo5XyhWwORNOcJgDColXgxWkw1T5EXzPI=' + ], + 'NULL body text' => [ + null, + '47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=' + ], + ]; + } + + function testGeneratedDigestsOfDifferentTextShouldNotBeEqual() { + $this->assertNotSame( + HTTPSig::generate_digest('text1', false), + HTTPSig::generate_digest('text2', false) + ); + } + + /** + * Process separation needed for header() check. + * @runInSeparateProcess + */ + function testGenerate_digestSendsHttpHeader() { + $ret = HTTPSig::generate_digest('body text', true); + + $this->assertSame('2fu8kUkvuzuo5XyhWwORNOcJgDColXgxWkw1T5EXzPI=', $ret); + $this->assertContains( + 'Digest: SHA-256=2fu8kUkvuzuo5XyhWwORNOcJgDColXgxWkw1T5EXzPI=', + xdebug_get_headers(), + 'HTTP header Digest does not match' + ); + } + + /** + * @uses ::crypto_unencapsulate + */ + function testDecrypt_sigheader() { + $header = 'Header: iv="value_iv" key="value_key" alg="value_alg" data="value_data"'; + $result = [ + 'iv' => 'value_iv', + 'key' => 'value_key', + 'alg' => 'value_alg', + 'data' => 'value_data' + ]; + + $this->assertSame($result, HTTPSig::decrypt_sigheader($header, 'site private key')); + } + /** + * @uses ::crypto_unencapsulate + */ + function testDecrypt_sigheaderUseSitePrivateKey() { + // Create a stub for global function get_config() with expectation + $t = $this->getFunctionMock('Zotlabs\Web', 'get_config'); + $t->expects($this->once())->willReturn('system.prvkey'); + + $header = 'Header: iv="value_iv" key="value_key" alg="value_alg" data="value_data"'; + $result = [ + 'iv' => 'value_iv', + 'key' => 'value_key', + 'alg' => 'value_alg', + 'data' => 'value_data' + ]; + + $this->assertSame($result, HTTPSig::decrypt_sigheader($header)); + } + function testDecrypt_sigheaderIncompleteHeaderShouldReturnEmptyString() { + $header = 'Header: iv="value_iv" key="value_key"'; + + $this->assertEmpty(HTTPSig::decrypt_sigheader($header, 'site private key')); + } +} |