mirror of
https://github.com/predis/predis.git
synced 2026-08-23 08:22:17 +00:00
84e0f5af7a
The Predis\Transaction\MultiExecState class is actually quite dummy as it does not work as a finite-state machine, but is used to track state using flags. It basically replicates the same behaviour of when it was part of the Predis\Transaction\MultiExec code and it will do for now.
203 lines
5.3 KiB
PHP
203 lines
5.3 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Predis package.
|
|
*
|
|
* (c) Daniele Alessandri <suppakilla@gmail.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Predis\Transaction;
|
|
|
|
use PHPUnit_Framework_TestCase as StandardTestCase;
|
|
|
|
/**
|
|
* @group realm-transaction
|
|
*/
|
|
class MultiExecStateTest extends StandardTestCase
|
|
{
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testFlagsValues()
|
|
{
|
|
$this->assertSame(1, MultiExecState::INITIALIZED);
|
|
$this->assertSame(2, MultiExecState::INSIDEBLOCK);
|
|
$this->assertSame(4, MultiExecState::DISCARDED);
|
|
$this->assertSame(8, MultiExecState::CAS);
|
|
$this->assertSame(16, MultiExecState::WATCH);
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testStateConstructorStartsWithResetState()
|
|
{
|
|
$state = new MultiExecState();
|
|
|
|
$this->assertSame(0, $state->get());
|
|
$this->assertTrue($state->isReset());
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testCanCheckOneOrMoreStateFlags()
|
|
{
|
|
$flags = MultiExecState::INITIALIZED | MultiExecState::CAS;
|
|
$state = new MultiExecState();
|
|
$state->set($flags);
|
|
|
|
$this->assertSame($flags, $state->get());
|
|
|
|
$this->assertFalse($state->check(MultiExecState::INSIDEBLOCK));
|
|
$this->assertTrue($state->check(MultiExecState::INITIALIZED));
|
|
$this->assertTrue($state->check(MultiExecState::CAS));
|
|
|
|
$this->assertTrue($state->check($flags));
|
|
$this->assertFalse($state->check($flags | MultiExecState::INSIDEBLOCK));
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testSettingAndGettingWholeFlags()
|
|
{
|
|
$flags = MultiExecState::INITIALIZED | MultiExecState::CAS;
|
|
$state = new MultiExecState();
|
|
$state->set($flags);
|
|
|
|
$this->assertFalse($state->check(MultiExecState::INSIDEBLOCK));
|
|
$this->assertTrue($state->check(MultiExecState::INITIALIZED));
|
|
$this->assertTrue($state->check(MultiExecState::CAS));
|
|
$this->assertSame($flags, $state->get());
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testCanFlagSingleStates()
|
|
{
|
|
$flags = MultiExecState::INITIALIZED | MultiExecState::CAS;
|
|
$state = new MultiExecState();
|
|
|
|
$state->flag(MultiExecState::INITIALIZED);
|
|
$this->assertTrue($state->check(MultiExecState::INITIALIZED));
|
|
$this->assertFalse($state->check(MultiExecState::CAS));
|
|
|
|
$state->flag(MultiExecState::CAS);
|
|
$this->assertTrue($state->check(MultiExecState::INITIALIZED));
|
|
$this->assertTrue($state->check(MultiExecState::CAS));
|
|
|
|
$this->assertSame($flags, $state->get());
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testCanUnflagSingleStates()
|
|
{
|
|
$state = new MultiExecState();
|
|
$state->set(MultiExecState::INITIALIZED | MultiExecState::CAS);
|
|
|
|
$this->assertTrue($state->check(MultiExecState::INITIALIZED));
|
|
$this->assertTrue($state->check(MultiExecState::CAS));
|
|
|
|
$state->unflag(MultiExecState::CAS);
|
|
$this->assertTrue($state->check(MultiExecState::INITIALIZED));
|
|
$this->assertFalse($state->check(MultiExecState::CAS));
|
|
|
|
$state->unflag(MultiExecState::INITIALIZED);
|
|
$this->assertFalse($state->check(MultiExecState::INITIALIZED));
|
|
$this->assertFalse($state->check(MultiExecState::CAS));
|
|
|
|
$this->assertTrue($state->isReset());
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testIsInitializedMethod()
|
|
{
|
|
$state = new MultiExecState();
|
|
|
|
$this->assertFalse($state->isInitialized());
|
|
|
|
$state->set(MultiExecState::INITIALIZED);
|
|
$this->assertTrue($state->isInitialized());
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testIsExecuting()
|
|
{
|
|
$state = new MultiExecState();
|
|
|
|
$this->assertFalse($state->isExecuting());
|
|
|
|
$state->set(MultiExecState::INSIDEBLOCK);
|
|
$this->assertTrue($state->isExecuting());
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testIsCAS()
|
|
{
|
|
$state = new MultiExecState();
|
|
|
|
$this->assertFalse($state->isCAS());
|
|
|
|
$state->set(MultiExecState::CAS);
|
|
$this->assertTrue($state->isCAS());
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testIsWatchAllowed()
|
|
{
|
|
$state = new MultiExecState();
|
|
|
|
$this->assertFalse($state->isWatchAllowed());
|
|
|
|
$state->flag(MultiExecState::INITIALIZED);
|
|
$this->assertTrue($state->isWatchAllowed());
|
|
|
|
$state->flag(MultiExecState::CAS);
|
|
$this->assertFalse($state->isWatchAllowed());
|
|
|
|
$state->unflag(MultiExecState::CAS);
|
|
$this->assertTrue($state->isWatchAllowed());
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testIsWatching()
|
|
{
|
|
$state = new MultiExecState();
|
|
|
|
$this->assertFalse($state->isWatching());
|
|
|
|
$state->set(MultiExecState::WATCH);
|
|
$this->assertTrue($state->isWatching());
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testIsDiscarded()
|
|
{
|
|
$state = new MultiExecState();
|
|
|
|
$this->assertFalse($state->isDiscarded());
|
|
|
|
$state->set(MultiExecState::DISCARDED);
|
|
$this->assertTrue($state->isDiscarded());
|
|
}
|
|
}
|