Files
predis/tests/Predis/Commands/ServerInfoTest.php
T
Daniele Alessandri 371ac91777 [tests] Rewrite the whole test suite to allow more granular testing.
Fix also a few bugs found while rewriting the test suite.

In order to be able to run integration tests, the test suite requires
a version of Redis >= 2.4.0.

The units have been splitted into several different groups using
PHPUnit @group annotation to allow developers to enable, disable
and combine certain types of tests. The available groups are:

  - disconnected: can run without a Redis server online
  - connected: active connection to a Redis server is required
  - commands: test dedicated to a specific Redis command
  - slow: performs operations that can slow down execution;

A list of the available groups can be obtained by running

  phpunit --list-groups

Groups of tests can be disabled or enabled via the XML configuration
file or the standard command-line test runner. Please note that due
to a bug in PHPUnit, older versions ignore the --group option when
the group is excluded in the XML configuration file. Please refer to
http://github.com/sebastianbergmann/phpunit/issues/320 for details

Integration tests in the @connected group check if the command being
tested is defined in the selected server profile (see the value of
the TEST_SERVER_VERSION constant in phpunit.xml). If the command is
not defined in the target server profile, the integration test is
automatically marked as skipped.

We also provide an helper script in the bin directory that can be
used to automatically generate a file with the scheleton of a test
case for a Redis command by specifying the name of the class in the
Predis\Commands namespace. For example, to generate a test case for
SET (represented by the Predis\Commands\StringSet class):

  ./bin/generate-command-test.php --class=StringSet

The realm of a command is automatically inferred from the name of the
class, but it can be set using the --realm option.
2011-12-10 15:26:00 +01:00

290 lines
7.4 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\Commands;
use \PHPUnit_Framework_TestCase as StandardTestCase;
/**
* @group commands
* @group realm-server
*/
class ServerInfoTest extends CommandTestCase
{
/**
* {@inheritdoc}
*/
protected function getExpectedCommand()
{
return 'Predis\Commands\ServerInfo';
}
/**
* {@inheritdoc}
*/
protected function getExpectedId()
{
return 'INFO';
}
/**
* @group disconnected
*/
public function testFilterArguments()
{
$command = $this->getCommand();
$command->setArguments(array());
$this->assertSame(array(), $command->getArguments());
}
/**
* @group disconnected
*/
public function testParseResponse()
{
$raw =<<<BUFFER
redis_version:2.4.4
redis_git_sha1:bc62bc5e
redis_git_dirty:0
arch_bits:32
multiplexing_api:epoll
process_id:15640
uptime_in_seconds:792
uptime_in_days:0
lru_clock:197890
used_cpu_sys:0.08
used_cpu_user:0.10
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
connected_clients:1
connected_slaves:0
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
used_memory:556156
used_memory_human:543.12K
used_memory_rss:1396736
used_memory_peak:547688
used_memory_peak_human:534.85K
mem_fragmentation_ratio:2.51
mem_allocator:jemalloc-2.2.1
loading:0
aof_enabled:0
changes_since_last_save:0
bgsave_in_progress:0
last_save_time:1323183872
bgrewriteaof_in_progress:0
total_connections_received:2
total_commands_processed:1
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
vm_enabled:0
role:master
db0:keys=2,expires=0
db5:keys=1,expires=0
BUFFER;
$expected = array(
'redis_version' => '2.4.4',
'redis_git_sha1' => 'bc62bc5e',
'redis_git_dirty' => '0',
'arch_bits' => '32',
'multiplexing_api' => 'epoll',
'process_id' => '15640',
'uptime_in_seconds' => '792',
'uptime_in_days' => '0',
'lru_clock' => '197890',
'used_cpu_sys' => '0.08',
'used_cpu_user' => '0.10',
'used_cpu_sys_children' => '0.00',
'used_cpu_user_children' => '0.00',
'connected_clients' => '1',
'connected_slaves' => '0',
'client_longest_output_list' => '0',
'client_biggest_input_buf' => '0',
'blocked_clients' => '0',
'used_memory' => '556156',
'used_memory_human' => '543.12K',
'used_memory_rss' => '1396736',
'used_memory_peak' => '547688',
'used_memory_peak_human' => '534.85K',
'mem_fragmentation_ratio' => '2.51',
'mem_allocator' => 'jemalloc-2.2.1',
'loading' => '0',
'aof_enabled' => '0',
'changes_since_last_save' => '0',
'bgsave_in_progress' => '0',
'last_save_time' => '1323183872',
'bgrewriteaof_in_progress' => '0',
'total_connections_received' => '2',
'total_commands_processed' => '1',
'expired_keys' => '0',
'evicted_keys' => '0',
'keyspace_hits' => '0',
'keyspace_misses' => '0',
'pubsub_channels' => '0',
'pubsub_patterns' => '0',
'latest_fork_usec' => '0',
'vm_enabled' => '0',
'role' => 'master',
'db0' => array('keys' => '2', 'expires' => '0'),
'db5' => array('keys' => '1', 'expires' => '0'),
);
$this->assertSame($expected, $this->getCommand()->parseResponse($raw));
}
/**
* @group disconnected
*/
public function testCanParseResponsesFromRedis30()
{
$raw =<<<BUFFER
# Server
redis_version:2.9.0
redis_git_sha1:237194b7
redis_git_dirty:0
arch_bits:32
multiplexing_api:epoll
process_id:16620
tcp_port:6379
uptime_in_seconds:444
uptime_in_days:0
lru_clock:198040
# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
used_memory:628076
used_memory_human:613.36K
used_memory_rss:1568768
used_memory_peak:570056
used_memory_peak_human:556.70K
used_memory_lua:14336
mem_fragmentation_ratio:2.50
mem_allocator:jemalloc-2.2.1
# Persistence
loading:0
aof_enabled:0
changes_since_last_save:0
bgsave_in_progress:0
last_save_time:1323185719
bgrewriteaof_in_progress:0
# Stats
total_connections_received:4
total_commands_processed:3
rejected_connections:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
# Replication
role:master
connected_slaves:0
# CPU
used_cpu_sys:0.06
used_cpu_user:0.06
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
# Cluster
cluster_enabled:0
# Keyspace
db0:keys=2,expires=0
db5:keys=1,expires=0
BUFFER;
$expected = array(
'redis_version' => '2.9.0',
'redis_git_sha1' => '237194b7',
'redis_git_dirty' => '0',
'arch_bits' => '32',
'multiplexing_api' => 'epoll',
'process_id' => '16620',
'tcp_port' => '6379',
'uptime_in_seconds' => '444',
'uptime_in_days' => '0',
'lru_clock' => '198040',
'connected_clients' => '1',
'client_longest_output_list' => '0',
'client_biggest_input_buf' => '0',
'blocked_clients' => '0',
'used_memory' => '628076',
'used_memory_human' => '613.36K',
'used_memory_rss' => '1568768',
'used_memory_peak' => '570056',
'used_memory_peak_human' => '556.70K',
'used_memory_lua' => '14336',
'mem_fragmentation_ratio' => '2.50',
'mem_allocator' => 'jemalloc-2.2.1',
'loading' => '0',
'aof_enabled' => '0',
'changes_since_last_save' => '0',
'bgsave_in_progress' => '0',
'last_save_time' => '1323185719',
'bgrewriteaof_in_progress' => '0',
'total_connections_received' => '4',
'total_commands_processed' => '3',
'rejected_connections' => '0',
'expired_keys' => '0',
'evicted_keys' => '0',
'keyspace_hits' => '0',
'keyspace_misses' => '0',
'pubsub_channels' => '0',
'pubsub_patterns' => '0',
'latest_fork_usec' => '0',
'role' => 'master',
'connected_slaves' => '0',
'used_cpu_sys' => '0.06',
'used_cpu_user' => '0.06',
'used_cpu_sys_children' => '0.00',
'used_cpu_user_children' => '0.00',
'cluster_enabled' => '0',
'db0' => array('keys' => '2', 'expires' => '0'),
'db5' => array('keys' => '1','expires' => '0'),
);
$this->assertSame($expected, $this->getCommand()->parseResponse($raw));
}
/**
* @group connected
*/
public function testReturnsAnArrayOfInfo()
{
$redis = $this->getClient();
$command = $this->getCommand();
$this->assertInternalType('array', $info = $redis->executeCommand($command));
$this->assertArrayHasKey('redis_version', $info);
}
}