mirror of
https://gitee.com/hyperf/hyperf.git
synced 2024-12-05 05:07:58 +08:00
Added generate and degenerate.
This commit is contained in:
parent
1201d946ed
commit
2dae99714a
@ -12,7 +12,10 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace Hyperf\AsyncQueue;
|
namespace Hyperf\AsyncQueue;
|
||||||
|
|
||||||
abstract class Job implements JobInterface
|
use Hyperf\Contract\CodeDegenerateInterface;
|
||||||
|
use Hyperf\Contract\CodeGenerateInterface;
|
||||||
|
|
||||||
|
abstract class Job implements JobInterface, CodeGenerateInterface, CodeDegenerateInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var int
|
* @var int
|
||||||
@ -23,4 +26,20 @@ abstract class Job implements JobInterface
|
|||||||
{
|
{
|
||||||
return $this->maxAttempts;
|
return $this->maxAttempts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return JobInterface
|
||||||
|
*/
|
||||||
|
public function degenerate(): CodeGenerateInterface
|
||||||
|
{
|
||||||
|
foreach ($this as $key) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return JobInterface
|
||||||
|
*/
|
||||||
|
public function generate(): CodeDegenerateInterface
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,10 @@ use Hyperf\AsyncQueue\Driver\RedisDriver;
|
|||||||
use Hyperf\AsyncQueue\Message;
|
use Hyperf\AsyncQueue\Message;
|
||||||
use Hyperf\Utils\Context;
|
use Hyperf\Utils\Context;
|
||||||
use Hyperf\Utils\Packer\PhpSerializerPacker;
|
use Hyperf\Utils\Packer\PhpSerializerPacker;
|
||||||
|
use Hyperf\Utils\Str;
|
||||||
use HyperfTest\AsyncQueue\Stub\DemoJob;
|
use HyperfTest\AsyncQueue\Stub\DemoJob;
|
||||||
|
use HyperfTest\AsyncQueue\Stub\DemoModel;
|
||||||
|
use HyperfTest\AsyncQueue\Stub\DemoModelMeta;
|
||||||
use HyperfTest\AsyncQueue\Stub\Redis;
|
use HyperfTest\AsyncQueue\Stub\Redis;
|
||||||
use Mockery;
|
use Mockery;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
@ -49,7 +52,7 @@ class RedisDriverTest extends TestCase
|
|||||||
$id = uniqid();
|
$id = uniqid();
|
||||||
$driver->push(new DemoJob($id));
|
$driver->push(new DemoJob($id));
|
||||||
/** @var Message $class */
|
/** @var Message $class */
|
||||||
$class = $packer->unpack(Context::get('test.async-queue.lpush.value'));
|
$class = $packer->unpack((string) Context::get('test.async-queue.lpush.value'));
|
||||||
$this->assertSame($id, $class->job()->id);
|
$this->assertSame($id, $class->job()->id);
|
||||||
$key = Context::get('test.async-queue.lpush.key');
|
$key = Context::get('test.async-queue.lpush.key');
|
||||||
$this->assertSame('test:waiting', $key);
|
$this->assertSame('test:waiting', $key);
|
||||||
@ -57,11 +60,28 @@ class RedisDriverTest extends TestCase
|
|||||||
$id = uniqid();
|
$id = uniqid();
|
||||||
$driver->push(new DemoJob($id), 5);
|
$driver->push(new DemoJob($id), 5);
|
||||||
/** @var Message $class */
|
/** @var Message $class */
|
||||||
$class = $packer->unpack(Context::get('test.async-queue.zadd.value'));
|
$class = $packer->unpack((string) Context::get('test.async-queue.zadd.value'));
|
||||||
$this->assertSame($id, $class->job()->id);
|
$this->assertSame($id, $class->job()->id);
|
||||||
$key = Context::get('test.async-queue.zadd.key');
|
$key = Context::get('test.async-queue.zadd.key');
|
||||||
$this->assertSame('test:delayed', $key);
|
$this->assertSame('test:delayed', $key);
|
||||||
$time = Context::get('test.async-queue.zadd.delay');
|
$time = Context::get('test.async-queue.zadd.delay');
|
||||||
$this->assertSame(time() + 5, $time);
|
$this->assertSame(time() + 5, $time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testDemoModelGenerate()
|
||||||
|
{
|
||||||
|
$content = Str::random(1000);
|
||||||
|
|
||||||
|
$model = new DemoModel(1, 'Hyperf', 1, $content);
|
||||||
|
$s1 = serialize($model);
|
||||||
|
$this->assertSame(1128, strlen($s1));
|
||||||
|
|
||||||
|
$meta = $model->generate();
|
||||||
|
$s2 = serialize($meta);
|
||||||
|
$this->assertSame(65, strlen($s2));
|
||||||
|
$this->assertInstanceOf(DemoModelMeta::class, $meta);
|
||||||
|
|
||||||
|
$model2 = $meta->degenerate();
|
||||||
|
$this->assertEquals($model, $model2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
45
src/async-queue/tests/Stub/DemoModel.php
Normal file
45
src/async-queue/tests/Stub/DemoModel.php
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
/**
|
||||||
|
* This file is part of Hyperf.
|
||||||
|
*
|
||||||
|
* @link https://www.hyperf.io
|
||||||
|
* @document https://doc.hyperf.io
|
||||||
|
* @contact group@hyperf.io
|
||||||
|
* @license https://github.com/hyperf-cloud/hyperf/blob/master/LICENSE
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace HyperfTest\AsyncQueue\Stub;
|
||||||
|
|
||||||
|
use Hyperf\Contract\CodeDegenerateInterface;
|
||||||
|
use Hyperf\Contract\CodeGenerateInterface;
|
||||||
|
use Hyperf\Utils\Context;
|
||||||
|
|
||||||
|
class DemoModel implements CodeGenerateInterface
|
||||||
|
{
|
||||||
|
public $id;
|
||||||
|
|
||||||
|
public $name;
|
||||||
|
|
||||||
|
public $gendar;
|
||||||
|
|
||||||
|
public $signature;
|
||||||
|
|
||||||
|
public function __construct($id, $name, $gendar, $signature)
|
||||||
|
{
|
||||||
|
$this->id = $id;
|
||||||
|
$this->name = $name;
|
||||||
|
$this->gendar = $gendar;
|
||||||
|
$this->signature = $signature;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function generate(): CodeDegenerateInterface
|
||||||
|
{
|
||||||
|
Context::set('test.async-queue.demo.model.' . $this->id, [
|
||||||
|
$this->name, $this->gendar, $this->signature,
|
||||||
|
]);
|
||||||
|
|
||||||
|
return new DemoModelMeta($this->id);
|
||||||
|
}
|
||||||
|
}
|
34
src/async-queue/tests/Stub/DemoModelMeta.php
Normal file
34
src/async-queue/tests/Stub/DemoModelMeta.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
/**
|
||||||
|
* This file is part of Hyperf.
|
||||||
|
*
|
||||||
|
* @link https://www.hyperf.io
|
||||||
|
* @document https://doc.hyperf.io
|
||||||
|
* @contact group@hyperf.io
|
||||||
|
* @license https://github.com/hyperf-cloud/hyperf/blob/master/LICENSE
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace HyperfTest\AsyncQueue\Stub;
|
||||||
|
|
||||||
|
use Hyperf\Contract\CodeDegenerateInterface;
|
||||||
|
use Hyperf\Contract\CodeGenerateInterface;
|
||||||
|
use Hyperf\Utils\Context;
|
||||||
|
|
||||||
|
class DemoModelMeta implements CodeDegenerateInterface
|
||||||
|
{
|
||||||
|
public $id;
|
||||||
|
|
||||||
|
public function __construct($id)
|
||||||
|
{
|
||||||
|
$this->id = $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function degenerate(): CodeGenerateInterface
|
||||||
|
{
|
||||||
|
$data = Context::get('test.async-queue.demo.model.' . $this->id);
|
||||||
|
|
||||||
|
return new DemoModel($this->id, ...$data);
|
||||||
|
}
|
||||||
|
}
|
18
src/contract/src/CodeDegenerateInterface.php
Normal file
18
src/contract/src/CodeDegenerateInterface.php
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
/**
|
||||||
|
* This file is part of Hyperf.
|
||||||
|
*
|
||||||
|
* @link https://www.hyperf.io
|
||||||
|
* @document https://doc.hyperf.io
|
||||||
|
* @contact group@hyperf.io
|
||||||
|
* @license https://github.com/hyperf-cloud/hyperf/blob/master/LICENSE
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Hyperf\Contract;
|
||||||
|
|
||||||
|
interface CodeDegenerateInterface
|
||||||
|
{
|
||||||
|
public function degenerate(): CodeGenerateInterface;
|
||||||
|
}
|
18
src/contract/src/CodeGenerateInterface.php
Normal file
18
src/contract/src/CodeGenerateInterface.php
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
/**
|
||||||
|
* This file is part of Hyperf.
|
||||||
|
*
|
||||||
|
* @link https://www.hyperf.io
|
||||||
|
* @document https://doc.hyperf.io
|
||||||
|
* @contact group@hyperf.io
|
||||||
|
* @license https://github.com/hyperf-cloud/hyperf/blob/master/LICENSE
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Hyperf\Contract;
|
||||||
|
|
||||||
|
interface CodeGenerateInterface
|
||||||
|
{
|
||||||
|
public function generate(): CodeDegenerateInterface;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user