getCommand(); $command->setArguments($arguments); $this->assertSame($expected, $command->getArguments()); } /** * @group disconnected */ public function testParseResponse(): void { $command = $this->getCommand(); $this->assertSame(0, $command->parseResponse(0)); $this->assertSame(1, $command->parseResponse(1)); } /** * @group connected */ public function testReturnsZeroOnNonExistingKeys(): void { $redis = $this->getClient(); $this->assertSame(0, $redis->expire('foo', 2)); } /** * @medium * @group connected * @group slow */ public function testCanExpireKeys(): void { $redis = $this->getClient(); $this->assertEquals('OK', $redis->set('foo', 'bar')); $this->assertSame(1, $redis->expire('foo', 1)); $this->assertSame(1, $redis->ttl('foo')); $this->sleep(2.0); $this->assertSame(0, $redis->exists('foo')); } /** * @medium * @group connected * @dataProvider keysProvider * @group slow * @param array $firstKeyArguments * @param array $secondKeyArguments * @param array $positivePathArguments * @param array $negativePathArguments * @return void * @requiresRedisVersion >= 7.0.0 */ public function testSetNewExpirationTimeWithExpireOptions( array $firstKeyArguments, array $secondKeyArguments, array $positivePathArguments, array $negativePathArguments ): void { $redis = $this->getClient(); $redis->set(...$firstKeyArguments); $redis->set(...$secondKeyArguments); $this->assertSame(1, $redis->expire(...$positivePathArguments)); $this->assertSame(0, $redis->expire(...$negativePathArguments)); } /** * @group connected */ public function testDeletesKeysOnNegativeTTL(): void { $redis = $this->getClient(); $this->assertEquals('OK', $redis->set('foo', 'bar')); $this->assertSame(1, $redis->expire('foo', -10)); $this->assertSame(0, $redis->exists('foo')); } public function keysProvider(): array { return [ 'only if key has no expiry' => [ ['noExpiry', 'value'], ['withExpiry', 'value', 'EX', 10], ['noExpiry', 2, 'NX'], ['withExpiry', 2, 'NX'], ], 'only if key has expiry' => [ ['noExpiry', 'value'], ['withExpiry', 'value', 'EX', 10], ['withExpiry', 2, 'XX'], ['noExpiry', 2, 'XX'], ], 'only if new expiry is greater then current one' => [ ['newExpiryLower', 'value', 'EXAT', time() + 1000], ['newExpiryGreater', 'value', 'EXAT', time() + 10], ['newExpiryGreater', 20, 'GT'], ['newExpiryLower', 20, 'GT'], ], 'only if new expiry is lower then current one' => [ ['newExpiryLower', 'value', 'EXAT', time() + 1000], ['newExpiryGreater', 'value', 'EXAT', time() + 10], ['newExpiryLower', 20, 'LT'], ['newExpiryGreater', 20, 'LT'], ], ]; } }