getCommand(); $command->setArguments($actualArguments); $this->assertSameValues($expectedArguments, $command->getArguments()); } /** * @group disconnected */ public function testParseResponse(): void { $this->assertSame(1, $this->getCommand()->parseResponse(1)); } /** * @group connected * @group relay-resp3 * @return void * @requiresRedisTimeSeriesVersion >= 1.0.0 */ public function testDecrByDecreasesValueAndTimestampOfExistingSample(): void { $redis = $this->getClient(); $arguments = (new CreateArguments()) ->retentionMsecs(60000) ->duplicatePolicy(CommonArguments::POLICY_MAX) ->labels('sensor_id', 2, 'area_id', 32); $this->assertEquals( 'OK', $redis->tscreate('temperature:2:32', $arguments) ); $addArguments = (new AddArguments()) ->retentionMsecs(31536000000); $this->assertEquals( 123123123123, $redis->tsadd('temperature:2:32', 123123123123, 27, $addArguments) ); $this->assertEquals( 123123123124, $redis->tsdecrby('temperature:2:32', 1, (new DecrByArguments())->timestamp(123123123124)) ); } /** * @group connected * @return void * @requiresRedisTimeSeriesVersion >= 1.0.0 */ public function testDecrByCreateNewSampleIfNotExists(): void { $redis = $this->getClient(); $arguments = (new CreateArguments()) ->retentionMsecs(60000) ->duplicatePolicy(CommonArguments::POLICY_MAX) ->labels('sensor_id', 2, 'area_id', 32); $this->assertEquals( 'OK', $redis->tscreate('temperature:2:32', $arguments) ); $this->assertEquals( 123123123123, $redis->tsdecrby('temperature:2:32', 27, (new DecrByArguments())->timestamp(123123123123)) ); } /** * @group connected * @group relay-resp3 * @return void * @requiresRedisTimeSeriesVersion >= 1.0.0 */ public function testThrowsExceptionOnOlderTimestampGiven(): void { $redis = $this->getClient(); $arguments = (new CreateArguments()) ->retentionMsecs(60000) ->duplicatePolicy(CommonArguments::POLICY_MAX) ->labels('sensor_id', 2, 'area_id', 32); $this->assertEquals( 'OK', $redis->tscreate('temperature:2:32', $arguments) ); $addArguments = (new AddArguments()) ->retentionMsecs(31536000000); $this->assertEquals( 123123123123, $redis->tsadd('temperature:2:32', 123123123123, 27, $addArguments) ); $this->expectException(ServerException::class); $redis->tsdecrby('temperature:2:32', 27, (new DecrByArguments())->timestamp(123123123122)); } public function argumentsProvider(): array { return [ 'with default arguments' => [ ['key', 1.0], ['key', 1.0], ], 'with TIMESTAMP modifier' => [ ['key', 1.0, (new DecrByArguments())->timestamp(10)], ['key', 1.0, 'TIMESTAMP', 10], ], 'with RETENTION modifier' => [ ['key', 1.0, (new DecrByArguments())->retentionMsecs(100)], ['key', 1.0, 'RETENTION', 100], ], 'with UNCOMPRESSED modifier' => [ ['key', 1.0, (new DecrByArguments())->uncompressed()], ['key', 1.0, 'UNCOMPRESSED'], ], 'with CHUNK_SIZE modifier' => [ ['key', 1.0, (new DecrByArguments())->chunkSize(100)], ['key', 1.0, 'CHUNK_SIZE', 100], ], 'with LABELS modifier' => [ ['key', 1.0, (new DecrByArguments())->labels('label1', 1, 'label2', 2)], ['key', 1.0, 'LABELS', 'label1', 1, 'label2', 2], ], 'with all modifiers' => [ ['key', 1.0, (new DecrByArguments())->timestamp(10)->retentionMsecs(100)->uncompressed()->chunkSize(100)->labels('label1', 1, 'label2', 2)], ['key', 1.0, 'TIMESTAMP', 10, 'RETENTION', 100, 'UNCOMPRESSED', 'CHUNK_SIZE', 100, 'LABELS', 'label1', 1, 'label2', 2], ], ]; } }