| Current File : /home/jvzmxxx/wiki/vendor/firebase/php-jwt/tests/JWTTest.php |
<?php
use \Firebase\JWT\JWT;
class JWTTest extends PHPUnit_Framework_TestCase
{
public function testEncodeDecode()
{
$msg = JWT::encode('abc', 'my_key');
$this->assertEquals(JWT::decode($msg, 'my_key', array('HS256')), 'abc');
}
public function testDecodeFromPython()
{
$msg = 'eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.Iio6aHR0cDovL2FwcGxpY2F0aW9uL2NsaWNreT9ibGFoPTEuMjMmZi5vbz00NTYgQUMwMDAgMTIzIg.E_U8X2YpMT5K1cEiT_3-IvBYfrdIFIeVYeOqre_Z5Cg';
$this->assertEquals(
JWT::decode($msg, 'my_key', array('HS256')),
'*:http://application/clicky?blah=1.23&f.oo=456 AC000 123'
);
}
public function testUrlSafeCharacters()
{
$encoded = JWT::encode('f?', 'a');
$this->assertEquals('f?', JWT::decode($encoded, 'a', array('HS256')));
}
public function testMalformedUtf8StringsFail()
{
$this->setExpectedException('DomainException');
JWT::encode(pack('c', 128), 'a');
}
public function testMalformedJsonThrowsException()
{
$this->setExpectedException('DomainException');
JWT::jsonDecode('this is not valid JSON string');
}
public function testExpiredToken()
{
$this->setExpectedException('Firebase\JWT\ExpiredException');
$payload = array(
"message" => "abc",
"exp" => time() - 20); // time in the past
$encoded = JWT::encode($payload, 'my_key');
JWT::decode($encoded, 'my_key', array('HS256'));
}
public function testBeforeValidTokenWithNbf()
{
$this->setExpectedException('Firebase\JWT\BeforeValidException');
$payload = array(
"message" => "abc",
"nbf" => time() + 20); // time in the future
$encoded = JWT::encode($payload, 'my_key');
JWT::decode($encoded, 'my_key', array('HS256'));
}
public function testBeforeValidTokenWithIat()
{
$this->setExpectedException('Firebase\JWT\BeforeValidException');
$payload = array(
"message" => "abc",
"iat" => time() + 20); // time in the future
$encoded = JWT::encode($payload, 'my_key');
JWT::decode($encoded, 'my_key', array('HS256'));
}
public function testValidToken()
{
$payload = array(
"message" => "abc",
"exp" => time() + JWT::$leeway + 20); // time in the future
$encoded = JWT::encode($payload, 'my_key');
$decoded = JWT::decode($encoded, 'my_key', array('HS256'));
$this->assertEquals($decoded->message, 'abc');
}
public function testValidTokenWithLeeway()
{
JWT::$leeway = 60;
$payload = array(
"message" => "abc",
"exp" => time() - 20); // time in the past
$encoded = JWT::encode($payload, 'my_key');
$decoded = JWT::decode($encoded, 'my_key', array('HS256'));
$this->assertEquals($decoded->message, 'abc');
JWT::$leeway = 0;
}
public function testExpiredTokenWithLeeway()
{
JWT::$leeway = 60;
$payload = array(
"message" => "abc",
"exp" => time() - 70); // time far in the past
$this->setExpectedException('Firebase\JWT\ExpiredException');
$encoded = JWT::encode($payload, 'my_key');
$decoded = JWT::decode($encoded, 'my_key', array('HS256'));
$this->assertEquals($decoded->message, 'abc');
JWT::$leeway = 0;
}
public function testValidTokenWithList()
{
$payload = array(
"message" => "abc",
"exp" => time() + 20); // time in the future
$encoded = JWT::encode($payload, 'my_key');
$decoded = JWT::decode($encoded, 'my_key', array('HS256', 'HS512'));
$this->assertEquals($decoded->message, 'abc');
}
public function testValidTokenWithNbf()
{
$payload = array(
"message" => "abc",
"iat" => time(),
"exp" => time() + 20, // time in the future
"nbf" => time() - 20);
$encoded = JWT::encode($payload, 'my_key');
$decoded = JWT::decode($encoded, 'my_key', array('HS256'));
$this->assertEquals($decoded->message, 'abc');
}
public function testValidTokenWithNbfLeeway()
{
JWT::$leeway = 60;
$payload = array(
"message" => "abc",
"nbf" => time() + 20); // not before in near (leeway) future
$encoded = JWT::encode($payload, 'my_key');
$decoded = JWT::decode($encoded, 'my_key', array('HS256'));
$this->assertEquals($decoded->message, 'abc');
JWT::$leeway = 0;
}
public function testInvalidTokenWithNbfLeeway()
{
JWT::$leeway = 60;
$payload = array(
"message" => "abc",
"nbf" => time() + 65); // not before too far in future
$encoded = JWT::encode($payload, 'my_key');
$this->setExpectedException('Firebase\JWT\BeforeValidException');
$decoded = JWT::decode($encoded, 'my_key', array('HS256'));
JWT::$leeway = 0;
}
public function testValidTokenWithIatLeeway()
{
JWT::$leeway = 60;
$payload = array(
"message" => "abc",
"iat" => time() + 20); // issued in near (leeway) future
$encoded = JWT::encode($payload, 'my_key');
$decoded = JWT::decode($encoded, 'my_key', array('HS256'));
$this->assertEquals($decoded->message, 'abc');
JWT::$leeway = 0;
}
public function testInvalidTokenWithIatLeeway()
{
JWT::$leeway = 60;
$payload = array(
"message" => "abc",
"iat" => time() + 65); // issued too far in future
$encoded = JWT::encode($payload, 'my_key');
$this->setExpectedException('Firebase\JWT\BeforeValidException');
$decoded = JWT::decode($encoded, 'my_key', array('HS256'));
JWT::$leeway = 0;
}
public function testInvalidToken()
{
$payload = array(
"message" => "abc",
"exp" => time() + 20); // time in the future
$encoded = JWT::encode($payload, 'my_key');
$this->setExpectedException('Firebase\JWT\SignatureInvalidException');
$decoded = JWT::decode($encoded, 'my_key2', array('HS256'));
}
public function testNullKeyFails()
{
$payload = array(
"message" => "abc",
"exp" => time() + JWT::$leeway + 20); // time in the future
$encoded = JWT::encode($payload, 'my_key');
$this->setExpectedException('InvalidArgumentException');
$decoded = JWT::decode($encoded, null, array('HS256'));
}
public function testEmptyKeyFails()
{
$payload = array(
"message" => "abc",
"exp" => time() + JWT::$leeway + 20); // time in the future
$encoded = JWT::encode($payload, 'my_key');
$this->setExpectedException('InvalidArgumentException');
$decoded = JWT::decode($encoded, '', array('HS256'));
}
public function testRSEncodeDecode()
{
$privKey = openssl_pkey_new(array('digest_alg' => 'sha256',
'private_key_bits' => 1024,
'private_key_type' => OPENSSL_KEYTYPE_RSA));
$msg = JWT::encode('abc', $privKey, 'RS256');
$pubKey = openssl_pkey_get_details($privKey);
$pubKey = $pubKey['key'];
$decoded = JWT::decode($msg, $pubKey, array('RS256'));
$this->assertEquals($decoded, 'abc');
}
public function testKIDChooser()
{
$keys = array('1' => 'my_key', '2' => 'my_key2');
$msg = JWT::encode('abc', $keys['1'], 'HS256', '1');
$decoded = JWT::decode($msg, $keys, array('HS256'));
$this->assertEquals($decoded, 'abc');
}
public function testArrayAccessKIDChooser()
{
$keys = new ArrayObject(array('1' => 'my_key', '2' => 'my_key2'));
$msg = JWT::encode('abc', $keys['1'], 'HS256', '1');
$decoded = JWT::decode($msg, $keys, array('HS256'));
$this->assertEquals($decoded, 'abc');
}
public function testNoneAlgorithm()
{
$msg = JWT::encode('abc', 'my_key');
$this->setExpectedException('DomainException');
JWT::decode($msg, 'my_key', array('none'));
}
public function testIncorrectAlgorithm()
{
$msg = JWT::encode('abc', 'my_key');
$this->setExpectedException('DomainException');
JWT::decode($msg, 'my_key', array('RS256'));
}
public function testMissingAlgorithm()
{
$msg = JWT::encode('abc', 'my_key');
$this->setExpectedException('DomainException');
JWT::decode($msg, 'my_key');
}
public function testAdditionalHeaders()
{
$msg = JWT::encode('abc', 'my_key', 'HS256', null, array('cty' => 'test-eit;v=1'));
$this->assertEquals(JWT::decode($msg, 'my_key', array('HS256')), 'abc');
}
public function testInvalidSegmentCount()
{
$this->setExpectedException('UnexpectedValueException');
JWT::decode('brokenheader.brokenbody', 'my_key', array('HS256'));
}
}