1
0
mirror of https://github.com/danog/parallel.git synced 2025-01-22 22:11:11 +01:00
parallel/test/Sync/SharedMemoryParcelTest.php

76 lines
1.9 KiB
PHP
Raw Normal View History

2016-12-29 19:16:04 -06:00
<?php
2016-08-23 16:47:40 -05:00
namespace Amp\Parallel\Test\Sync;
2016-08-18 11:04:48 -05:00
2017-11-29 14:40:07 -06:00
use Amp\Loop;
2016-08-23 16:47:40 -05:00
use Amp\Parallel\Sync\SharedMemoryParcel;
use Amp\Promise;
/**
* @requires extension shmop
2015-08-31 12:26:11 -05:00
* @requires extension sysvmsg
*/
2016-08-18 17:36:58 -05:00
class SharedMemoryParcelTest extends AbstractParcelTest {
2017-11-29 14:40:07 -06:00
const ID = __CLASS__;
2015-08-28 16:58:15 -05:00
private $parcel;
2016-08-18 17:36:58 -05:00
protected function createParcel($value) {
2017-11-29 14:40:07 -06:00
$this->parcel = SharedMemoryParcel::create(self::ID, $value);
2015-08-28 16:58:15 -05:00
return $this->parcel;
}
2016-08-18 17:36:58 -05:00
public function tearDown() {
2017-11-29 14:40:07 -06:00
$this->parcel = null;
}
2015-08-10 14:28:47 -05:00
2016-08-18 17:36:58 -05:00
public function testObjectOverflowMoved() {
2017-11-29 14:40:07 -06:00
$object = SharedMemoryParcel::create(self::ID, 'hi', 2);
2016-08-18 17:36:58 -05:00
$awaitable = $object->synchronized(function () {
return 'hello world';
2016-08-18 17:36:58 -05:00
});
Promise\wait($awaitable);
$this->assertEquals('hello world', Promise\wait($object->unwrap()));
}
2015-08-10 14:28:47 -05:00
/**
* @group posix
* @requires extension pcntl
2015-08-10 14:28:47 -05:00
*/
2016-08-18 17:36:58 -05:00
public function testSetInSeparateProcess() {
2017-11-29 14:40:07 -06:00
$object = SharedMemoryParcel::create(self::ID, 42);
2015-08-10 14:28:47 -05:00
$this->doInFork(function () use ($object) {
2017-11-29 14:40:07 -06:00
$awaitable = $object->synchronized(function ($value) {
return $value + 1;
2016-08-18 17:36:58 -05:00
});
Promise\wait($awaitable);
2015-08-10 14:28:47 -05:00
});
$this->assertEquals(43, Promise\wait($object->unwrap()));
2015-08-10 14:28:47 -05:00
}
/**
* @group posix
* @requires extension pcntl
2015-08-10 14:28:47 -05:00
*/
2017-11-29 14:40:07 -06:00
public function testInSeparateProcess() {
$parcel = SharedMemoryParcel::create(self::ID, 42);
$this->doInFork(function () {
Loop::run(function () {
$parcel = SharedMemoryParcel::use(self::ID);
$this->assertSame(43, yield $parcel->synchronized(function ($value) {
$this->assertSame(42, $value);
return $value + 1;
}));
});
2015-08-10 14:28:47 -05:00
});
2017-11-29 14:40:07 -06:00
Loop::run(function () use ($parcel) {
$this->assertSame(43, yield $parcel->unwrap());
});
2015-08-10 14:28:47 -05:00
}
}