UtilsTest.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. <?php
  2. /**
  3. * 估计测试.
  4. *
  5. * @author nj <nj@gmail.com>
  6. * @date 2020-01-23 00:51:13
  7. */
  8. declare(strict_types=1);
  9. namespace HyperfTest\Units;
  10. use App\Constants\CommonConstant;
  11. use App\Model\Mongo\VideoHistoryModel;
  12. use Carbon\Carbon;
  13. use HyperfTest\HttpTestCase;
  14. use Modules\Api\Services\AuthService;
  15. class UtilsTest extends HttpTestCase
  16. {
  17. /**
  18. * 属性描述.
  19. *
  20. * @var AuthService|null
  21. */
  22. private $appAuthService = null;
  23. /**
  24. * 测试之前执行.
  25. */
  26. public function setUp(): void
  27. {
  28. parent::setUp();
  29. $this->appAuthService = new AuthService;
  30. }
  31. /**
  32. * 测试完毕后执行.
  33. */
  34. public function tearDown(): void
  35. {
  36. parent::tearDown();
  37. }
  38. public function testAesEncode()
  39. {
  40. $handshake = CommonConstant::HANDSHAKE;
  41. // $handshake = 'v20200101';
  42. $encodeToken = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImlzcyI6Imh0dHBzOi8vZ2Z3Lmdvb2dsZS5jb20ifQ.eyJpc3MiOiJodHRwczovL2dmdy5nb29nbGUuY29tIiwiYXVkIjoiYXBwLXVzZXJzIiwiZXhwIjoxNjM5MDYxODU0LjU1MjI4NiwibmJmIjoxNjM4OTUzODI0LjU1MjI4NiwianRpIjoiMjM4OGM3OGFhOWQxOGRiNmY1ZWViNmNkZTM4YTRhZTQiLCJpYXQiOjE2Mzg5NTM4NTQuNTUyMjg2LCJ1c2VyX2lkIjoxNDU2OTk4MiwidmVyc2lvbiI6IjEuMC4wIiwiZGV2aWNlX25vIjoiZGV2aWNlMDAxIiwiZGV2aWNlX3R5cGUiOiJBIiwiZmluZ2VyX2hhc2giOiJmYzljZDUwYzE4MDcyYWY3MjMzNDE4Njk3MDMzMTljOSIsImlwIjoiMTI3LjAuMC4xIn0.BVLWtOrkr9nY6XCz_5nXSAlOZpTYuzBMMTh__u3xHUc';
  43. // $str = <<<EOT
  44. //{
  45. // "token":"{$encodeToken}",
  46. // "version": "1.0.0",
  47. // "device_no": "device001",
  48. // "device_type": "A",
  49. // "finger_hash": "fc9cd50c18072af723341869703319c9"
  50. //}
  51. //EOT;
  52. $str = <<<EOT
  53. {
  54. "version": "1.0.0",
  55. "device_no": "device001",
  56. "device_type": "A",
  57. "finger_hash": "fc9cd50c18072af723341869703319c9"
  58. }
  59. EOT;
  60. $arrData = json_decode(trim($str), true);
  61. $data = $arrData;
  62. $resultData = '';
  63. if (!empty($handshake)) {
  64. $arrMap = CommonConstant::getHandSnakeKey($handshake);
  65. $resultData = hand_encrypt($data, $arrMap['key']);
  66. } else {
  67. $resultData = $data;
  68. }
  69. var_dump($handshake, $arrMap['key'], $resultData);
  70. $this->assertEquals(1, 1);
  71. }
  72. public function testAesDecode()
  73. {
  74. $handshake = CommonConstant::HANDSHAKE;
  75. // $handshake = 'v20211204';
  76. $encodeData = 'q1sblNN9XgvBWx8Ke0mxsa9IywfJACZdo61C287W7rc3FC1At+annD2lLF48prLqFwcDO+PqAAZCbUE7cCiKTvZGsxBGNIg/SB5dgjeMtOdEX2WRrIB9OgSWPQIi82WuiQhJpkspyDwmcrq/sl/DVmRIMuwSeKRNgew82wOqNuAgFMqG+G5S4pdu/z3jdK147CGphJe72jFTdTXR4+GGOwLMzu5Y5hGea2XrqsdQ6jw=';
  77. // $data = 'Fom4gekRgYiPQ9T2jdL+itR3mXMPbkhhKemb7jRccP7mPcmBrLsMxKcHk6Ws3XVub8yqSvKrAAhtr3GSw+gUk4Wa1njyBIEWlVujQTFgK4uxY2Y\/GrjoCZG7P6LcAiEb2huoiavlQCrDz5\/DMGF2tVkt6wnOT5\/K43lY1AxicHd8AP8xqM3o12WwOolZCGzc2c4IMnm1WdiJedFufyJCmHHRvKpdeL3CFjv\/MU6KS\/1+JjutM7Qn\/7Z+rjng0QeJ9opdzu2cqinXwD9fBF97ZwQ4y7jheF8IyUCLte7jkPpxK9Xfq2H5NLJGoxgIB79orHlMUiXWsP\/3V2G9QvvkEZ1xsnjIrxiKnS43+1VcAVxUR69ZSxwYwYxY7QhnBIeHyHW2TZI1YjIxzLZyQD3XBvQ350IM\/uWdYdjOaFPVia8du6ZNMtSLpvnxCIKgOChf4HducXPqd6T9ClOZxXthcPLAL4Ddrg8lViK+eu0HMmnnRi4zYOG1buTtchAVY1PJuXRkl8RIGYmp4b+80He3y2lBAk0uyOkXt6hTQSs42LOAWSIa42N4WaXwPLm8ysBPgWuuj8G15jU+x4GsQdhdydB6WD5t7G\/IUSRFWf\/iPHnF+3UqOW4WRH\/a1se5VknN8E8WNnfvrjBkH7WisGUhAK\/1J2cVZm\/LxNon6GwUwwU1PXcTMmc05ZUhq8VwwacHV3++yrkweYTWIIRTS8S46\/GmhoqKm\/N9HdWpUJ0gsi8+yW6gsDKrHW2uyUDkThfHtsyfyuGkJzBfIP\/FIwj9qg+tz\/sf48IDQDkGQKY7cDfeba3dfaqR9wRqW2LWHkFVWoS90kF9nuDkSIfJvMuHxSWAnOAgGY73f9HJPtcyYHL5fY9NHXK4Gza9Y4Liw1s+S27QbHNw6ZhoxuzFUEtb\/N73bxVYyTVM4Q7kEYTwGlGPHrtg7IHvi1QcXwRPn1L1iN+IRe1qMXSRfzhDqia8g\/J8t100veZf8pHAkxslWl2XoBijiRIYi\/KgqKr1oaIWSc+a0Viyc4jXuJlP5wDyl+oOljHyd9epRIooh0twheyxBuNa96Kzt\/XTa7F4scOJkTR9\/V9HMJitJnGj+dKfil\/X4NTxLkrblJi0kpeetNfwNsMDcJlErQZyQjl8QMuz4UIzvogrwAAQ88rdB97j6hMYo8SPkh0xGpBtQKLq5LJYRcJcgWDtI1LTlZXdsScg7BW6wp6\/CQXGP15+Cgojcoqb0UN+KjjHKVmDBSLj\/a7JWErAHzPKq+OmRWM0mBkgWGj9wqfPIZ9CjhO0ddhvXUMV1IkfIv0C+bkYGZ7vuNgXCwBCK8+QT7Lq2KOip5IggWLsHZqa0tXOC030rGmQoTtiY6lplGKNYE1PxE3NuMO\/L0W0GcoATTOz914ucyrZWZRLagBtXR+32vlKuW+KUPmStXaK+HqiskC2chYbS0SV8NS3v7Jp9jMgHLsYn8hxNRjUANleiFcccONJ8bPg3975aBnZA9u5iVmLTfJfwkTtvtscLx\/2MIjCkdeoiDjCuwuBRXwoiH1XOppQJHyubEYV859Jayg90X2Ef6oKzMbpe0i0mTvQMMK591yxfgnZK6hw4LjqpOj3BzSaHt6ZMQXUPpOPMCARFcFM46usI9kaA+k5TsSU2XJR3gwIrzWRpSGQKhdlwb9f+fM7ruIxANQTii1TPq2ZR8f6TLLSScdukT4LNjsDPne7BgNbFKXJ44snONzvLGdNUnZJaLf0QiEYkPmB5Q6viCODm12pY2qPUgkl4OBUmq3myWRhoWek6oP0EqryTvzAOUbAcs6k6F0btQxyD6kgV8zo\/tRHm+xIRU51F5HWFzRFPARqIffFJGVT95n+scctVPaKY9gfciiHwvUby3pEETSgQqzEVx4tG6u86Zu09dtcY1D5aS6RKB3mg8XkKncPVvQJLGjIkyB4A9Wbh\/2\/+9FKNjvEYr3UbOd7yEhfqEY1nSSbWWb8gGup7K9dOKh7v39GNzoXXkaI8TWa6jCWfPKXYr10Ck0HnLDdmcGYUzYxYyiLLkHxXDDd4lMmax7vcasG+IdG0TaQMKDwImIIjdLWoDykfInGrHZ04MBpaTtpTl06BoR0N7ymIUSIeFaDu0zdD\/MUv3XgqF1gQyDl1PG2oPAi5VChh2m0EVXpFCCM6+6dtnMKzrR\/yaBsOfLfZnvsV7B5jVV7Uxohtf7riuNY5lhKMlLzcDWuYC99R9NSb6Hh8NRGPqAHscaDI667xWxvLGEhrp9wi2gxBKRVUshmTZrx4x1LqmuR9BCT8XNBNF745U\/4zMsM4ATe9mr2G5k+aTjVsz9oRlQq6BgYblTweVl7+sDZ8n6LHXeE5WibwpNfJ8Cx4PtVBQErOx+f8YqjME\/5l3ZvxWSMmhn9bR\/V3Z4OpLjbrPBMEu1PB1Yz9GPSa+yfnA1i25bNkB7UDhu6tEHTOYGzOInVK3HIbWkr4U\/Qe+MOmCHtEMsf5Jp0g+doq3uOXQNxd83\/w6zOHmwrYN37PhRVVq5MrO\/YDqXv8mjmHsHcpn3VdxBWfU7UYbo\/IYW6KBGVEpelMi+lH0a0\/SCrkwqxTawJGRpLUkrZPWaukp7WcppOBDi3EPJfdljsSR7mupThBRc0\/Gh6t4pwgEjODIfvr60tA8sLpR9OPMC5Q9EiLa2RNdQGMdSIHSdhs3+RgM9JGfaZ\/4miPUFAEQmbp3sDsedJZGQYUZtWoAVMM\/n5V4AFsJpkAT6CGw+SuKTX';
  78. $resultData = '';
  79. if (!empty($handshake)) {
  80. $arrMap = CommonConstant::getHandSnakeKey($handshake);
  81. $originStr = hand_decrypt($encodeData, $arrMap['key'], $arrMap['iv']);
  82. $resultData = json_decode($originStr, true);
  83. } else {
  84. $resultData = $encodeData;
  85. }
  86. var_dump($resultData);
  87. $this->assertEquals(1, 1);
  88. }
  89. public function testEncodeHeaderTokenInfo()
  90. {
  91. // JWT
  92. $strToken = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvZ2Z3Lmdvb2dsZS5jb20iLCJhdWQiOiJhcHAtdXNlcnMiLCJleHAiOjE1ODE3OTgzMjQsImp0aSI6ImUzNDEyYjVmM2M2MzlkZDZhNjRmOTU4YWFmMmFhYWUzIiwiaWF0IjoxNTgxNzU1MTI0LCJ1c2VyX2lkIjoiNEZNTUVLIiwiZGV2aWNlX25vIjoiYWJjZDEyMzQiLCJkZXZpY2VfdHlwZSI6IkEiLCJpcCI6IjEwLjIxMS41NS4yIn0.J0tbFJq58JtV8teH0p-kHhJzDKwaaHTQ42mhDdVHB9k';
  93. $deviceNo = 'abcd1234';
  94. $fingerHash = 'fc9cd50c18072af723341869703319c9';
  95. $deviceType = 'A';
  96. $handshake = CommonConstant::getHandShake();
  97. $arrInfo = [
  98. 'token' => $strToken,
  99. 'device_no' => $deviceNo,
  100. 'device_type' => $deviceType,
  101. 'finger_hash' => $fingerHash,
  102. ];
  103. $enToken = $this->appAuthService->encodeHeaderTokenInfo($arrInfo);
  104. $arrData = [
  105. 'token' => $enToken,
  106. ];
  107. $strData = hand_encrypt(json_encode($arrData), CommonConstant::HANDSHAKE, '');
  108. $res = [
  109. 'code' => 200,
  110. 'message' => '',
  111. 'data' => $strData,
  112. 'handshake' => $handshake,
  113. ];
  114. var_dump($res, json_encode($res, JSON_UNESCAPED_UNICODE));
  115. //'HISG9I8yopDgL31wGyhkzC9Ga1OnaHWNVJsMYBZsdjZqA0mO+dcDQooDbumAd6vlZubyi1OnhSGKyvW90tZzNe/vr6zXwgDWrNIu0Muqi8rdUDKl2fLZ7RrMj7cI7VNiIWMuXptDd/S8Ox5G4YIVqheCxOcBu80+xmc0liZ6Y6Sdxv19pJxvEY1PcF0yf3HxDFvkdqdtXXhlr1xr0Tgndtp15saaRUadk62V3ETqBPYbYBR31o9Qq5lzbNiB2ZYyuPgIdH7ZLb68YCtGgDusfxonNtMpTouCbJSQVw409F+tEWYcKRjXJA9jqETtKNFsb46fJE4bD7NosxE4M8R5ZlcDzbkHouW6zP8ulyal5RWstpsGjf4GsVNq28/giG5IAtT9NHeuiE+EvmNAQYKksSU2T9rhMfdJE7EONQifPItRb+uA0KKYY+y7Zp+/BSCmDRXhlUw+9I5LhI1FGNelbgPLu7SecOZPWnDtApkon9CX9j7v4BL1mmqF1yfZWsMq523OjY1zPd7YW/8Z4TH18H4UjwYzjLbPK5Yde/DdKcqITv64Qj/u7HFCvizIx+C84EIWC1YpdgYmIkKxBlY+Ng=='
  116. // '{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvZ2Z3Lmdvb2dsZS5jb20iLCJhdWQiOiJhcHAtdXNlcnMiLCJleHAiOjE1ODA0MTM4MjgsImp0aSI6Ijg3Y2QzZGI5ZjNjMzg1OTY0NWUyN2I1M2EzMGE0ZWY2IiwiaWF0IjoxNTgwMzcwNjI4LCJ1c2VyX2lkIjoiVlM5TElDIiwiZGV2aWNlX25vIjoicnJzZXBtbXhqOWNwZW5tOXhtbG9zYW1zM205cHljeWEiLCJkZXZpY2VfdHlwZSI6IkEifQ.H-eduLB-GTpMhdyGB0mDQ1yMLGv5fHH_v07pm8f8U4Y","device_no":"rrsepmmxj9cpenm9xmlosams3m9pycya","device_type":"A"}'
  117. $this->assertIsString($enToken);
  118. }
  119. public function testDecodeHeaderTokenInfo()
  120. {
  121. $enToken = 'HISG9I8yopDgL31wGyhkzC9Ga1OnaHWNVJsMYBZsdjZqA0mO+dcDQooDbumAd6vlZubyi1OnhSGKyvW90tZzNe/vr6zXwgDWrNIu0Muqi8rdUDKl2fLZ7RrMj7cI7VNiIWMuXptDd/S8Ox5G4YIVqheCxOcBu80+xmc0liZ6Y6Sdxv19pJxvEY1PcF0yf3HxDFvkdqdtXXhlr1xr0Tgndtp15saaRUadk62V3ETqBPYbYBR31o9Qq5lzbNiB2ZYyuPgIdH7ZLb68YCtGgDusfxonNtMpTouCbJSQVw409F+tEWYcKRjXJA9jqETtKNFsb46fJE4bD7NosxE4M8R5ZlcDzbkHouW6zP8ulyal5RWstpsGjf4GsVNq28/giG5IAtT9NHeuiE+EvmNAQYKksSU2T9rhMfdJE7EONQifPItRb+uA0KKYY+y7Zp+/BSCmDRXhlUw+9I5LhI1FGNelbgPLu7SecOZPWnDtApkon9CX9j7v4BL1mmqF1yfZWsMq523OjY1zPd7YW/8Z4TH18H4UjwYzjLbPK5Yde/DdKcqITv64Qj/u7HFCvizIx+C84EIWC1YpdgYmIkKxBlY+Ng==';
  122. $enToken = '{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvZ2Z3Lmdvb2dsZS5jb20iLCJhdWQiOiJhcHAtdXNlcnMiLCJleHAiOjE1ODA0MTM4MjgsImp0aSI6Ijg3Y2QzZGI5ZjNjMzg1OTY0NWUyN2I1M2EzMGE0ZWY2IiwiaWF0IjoxNTgwMzcwNjI4LCJ1c2VyX2lkIjoiVlM5TElDIiwiZGV2aWNlX25vIjoicnJzZXBtbXhqOWNwZW5tOXhtbG9zYW1zM205cHljeWEiLCJkZXZpY2VfdHlwZSI6IkEifQ.H-eduLB-GTpMhdyGB0mDQ1yMLGv5fHH_v07pm8f8U4Y","device_no":"rrsepmmxj9cpenm9xmlosams3m9pycya","device_type":"A"}';
  123. $arrTokenInfo = $this->appAuthService->decodeHeaderTokenInfo($enToken);
  124. var_dump($arrTokenInfo);
  125. $this->assertIsArray($arrTokenInfo);
  126. }
  127. public function testFilemtime()
  128. {
  129. $filePath = base_path('/storage/cache/m3u8_url/ff19/3e65/ff193e657aeaeb971d072becae6061df.url');
  130. $mtime = filemtime($filePath);
  131. $phpDate = date('Y-m-d H:i:s', $mtime);
  132. $diffSeconds = Carbon::now()->diffInSeconds(Carbon::parse($mtime));
  133. $expiredSeconds = 2 * 60 * 60; // 原始文件保存2小时.
  134. $diffSeconds2 = abs($diffSeconds);
  135. }
  136. public function testUserViewedVideo()
  137. {
  138. $userId = '40009';
  139. $date = Carbon::now()->toDateString();
  140. $videoId = '24805';
  141. $key = $date .'_'. $userId .'_'. $videoId;
  142. $mongoId = substr(md5($key), 8, 16);
  143. // $count = make(VideoHistoryModel::class)->db()->countDocuments(
  144. // ['_id' => $mongoId]
  145. // );
  146. var_dump($mongoId);
  147. $this->assertIsBool(true);
  148. }
  149. }