123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- <?php
- require_once dirname(__FILE__).'/../Client.php';
- require_once dirname(__FILE__).'/../Cluster.php';
- require_once dirname(__FILE__).'/../Sentinel.php';
- require_once dirname(__FILE__).'/CredisTestCommon.php';
- class CredisSentinelTest extends CredisTestCommon
- {
- /** @var Credis_Sentinel */
- protected $sentinel;
- protected $sentinelConfig;
- protected function setUp()
- {
- parent::setUp();
- if($this->sentinelConfig === NULL) {
- $configFile = dirname(__FILE__).'/sentinel_config.json';
- if( ! file_exists($configFile) || ! ($config = file_get_contents($configFile))) {
- $this->markTestSkipped('Could not load '.$configFile);
- return;
- }
- $this->sentinelConfig = json_decode($config);
- }
- $sentinelClient = new Credis_Client($this->sentinelConfig->host, $this->sentinelConfig->port);
- $this->sentinel = new Credis_Sentinel($sentinelClient);
- if($this->useStandalone) {
- $this->sentinel->forceStandalone();
- }
- $this->waitForSlaveReplication();
- }
- protected function tearDown()
- {
- if($this->sentinel) {
- $this->sentinel = NULL;
- }
- }
- public function testMasterClient()
- {
- $master = $this->sentinel->getMasterClient($this->sentinelConfig->clustername);
- $this->assertInstanceOf('Credis_Client',$master);
- $this->assertEquals($this->redisConfig[0]['port'],$master->getPort());
- $this->setExpectedExceptionShim('CredisException','Master not found');
- $this->sentinel->getMasterClient('non-existing-cluster');
- }
- public function testMasters()
- {
- $masters = $this->sentinel->masters();
- $this->assertInternalType('array',$masters);
- $this->assertCount(2,$masters);
- $this->assertArrayHasKey(0,$masters);
- $this->assertArrayHasKey(1,$masters);
- $this->assertArrayHasKey(1,$masters[0]);
- $this->assertArrayHasKey(1,$masters[1]);
- $this->assertArrayHasKey(5,$masters[1]);
- if($masters[0][1] == 'masterdown'){
- $this->assertEquals($this->sentinelConfig->clustername,$masters[1][1]);
- $this->assertEquals($this->redisConfig[0]['port'],$masters[1][5]);
- } else {
- $this->assertEquals('masterdown',$masters[1][1]);
- $this->assertEquals($this->sentinelConfig->clustername,$masters[0][1]);
- $this->assertEquals($this->redisConfig[0]['port'],$masters[0][5]);
- }
- }
- public function testMaster()
- {
- $master = $this->sentinel->master($this->sentinelConfig->clustername);
- $this->assertInternalType('array',$master);
- $this->assertArrayHasKey(1,$master);
- $this->assertArrayHasKey(5,$master);
- $this->assertEquals($this->sentinelConfig->clustername,$master[1]);
- $this->assertEquals($this->redisConfig[0]['port'],$master[5]);
- $this->setExpectedExceptionShim('CredisException','No such master with that name');
- $this->sentinel->master('non-existing-cluster');
- }
- public function testSlaveClient()
- {
- $slaves = $this->sentinel->getSlaveClients($this->sentinelConfig->clustername);
- $this->assertInternalType('array',$slaves);
- $this->assertCount(1,$slaves);
- foreach($slaves as $slave){
- $this->assertInstanceOf('Credis_Client',$slave);
- }
- $this->setExpectedExceptionShim('CredisException','No such master with that name');
- $this->sentinel->getSlaveClients('non-existing-cluster');
- }
- public function testSlaves()
- {
- $slaves = $this->sentinel->slaves($this->sentinelConfig->clustername);
- $this->assertInternalType('array',$slaves);
- $this->assertCount(1,$slaves);
- $this->assertArrayHasKey(0,$slaves);
- $this->assertArrayHasKey(5,$slaves[0]);
- $this->assertEquals(6385,$slaves[0][5]);
- $slaves = $this->sentinel->slaves('masterdown');
- $this->assertInternalType('array',$slaves);
- $this->assertCount(0,$slaves);
- $this->setExpectedExceptionShim('CredisException','No such master with that name');
- $this->sentinel->slaves('non-existing-cluster');
- }
- public function testNonExistingClusterNameWhenCreatingSlaves()
- {
- $this->setExpectedExceptionShim('CredisException','No such master with that name');
- $this->sentinel->createSlaveClients('non-existing-cluster');
- }
- public function testCreateCluster()
- {
- $cluster = $this->sentinel->createCluster($this->sentinelConfig->clustername);
- $this->assertInstanceOf('Credis_Cluster',$cluster);
- $this->assertCount(2,$cluster->clients());
- $cluster = $this->sentinel->createCluster($this->sentinelConfig->clustername,0,1,false);
- $this->assertInstanceOf('Credis_Cluster',$cluster);
- $this->assertCount(2,$cluster->clients());
- $this->setExpectedExceptionShim('CredisException','The master is down');
- $this->sentinel->createCluster($this->sentinelConfig->downclustername);
- }
- public function testGetCluster()
- {
- $cluster = $this->sentinel->getCluster($this->sentinelConfig->clustername);
- $this->assertInstanceOf('Credis_Cluster',$cluster);
- $this->assertCount(2,$cluster->clients());
- }
- public function testGetClusterOnDbNumber2()
- {
- $cluster = $this->sentinel->getCluster($this->sentinelConfig->clustername,2);
- $this->assertInstanceOf('Credis_Cluster',$cluster);
- $this->assertCount(2,$cluster->clients());
- $clients = $cluster->clients();
- $this->assertEquals(2,$clients[0]->getSelectedDb());
- $this->assertEquals(2,$clients[1]->getSelectedDb());
- }
- public function testGetMasterAddressByName()
- {
- $address = $this->sentinel->getMasterAddressByName($this->sentinelConfig->clustername);
- $this->assertInternalType('array',$address);
- $this->assertCount(2,$address);
- $this->assertArrayHasKey(0,$address);
- $this->assertArrayHasKey(1,$address);
- $this->assertEquals($this->redisConfig[0]['host'],$address[0]);
- $this->assertEquals($this->redisConfig[0]['port'],$address[1]);
- }
- public function testPing()
- {
- $pong = $this->sentinel->ping();
- $this->assertEquals("PONG",$pong);
- }
- public function testGetHostAndPort()
- {
- $host = 'localhost';
- $port = '123456';
- $client = $this->createMockShim('\Credis_Client');
- $sentinel = new Credis_Sentinel($client);
- $client->expects($this->once())->method('getHost')->willReturn($host);
- $client->expects($this->once())->method('getPort')->willReturn($port);
- $this->assertEquals($host, $sentinel->getHost());
- $this->assertEquals($port, $sentinel->getPort());
- }
- public function testNonExistingMethod()
- {
- $this->setExpectedExceptionShim('CredisException','Unknown sentinel subcommand \'bla\'');
- $this->sentinel->bla();
- }
- }
|