1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
<?php
namespace Elastica\Test\Connection\Strategy;
use Elastica\Connection;
use Elastica\Connection\Strategy\RoundRobin;
use Elastica\Exception\ConnectionException;
use Elastica\Response;
use Elastica\Test\Base;
/**
* Description of RoundRobinTest.
*
* @author chabior
*/
class RoundRobinTest extends Base
{
/**
* @var int Number of seconds to wait before timeout is called. Is set low for tests to have fast tests.
*/
protected $_timeout = 1;
/**
* @group functional
*/
public function testConnection()
{
$config = array('connectionStrategy' => 'RoundRobin');
$client = $this->_getClient($config);
$response = $client->request('/_aliases');
/* @var $response Response */
$this->_checkResponse($response);
$this->_checkStrategy($client);
}
/**
* @group unit
*/
public function testOldStrategySetted()
{
$config = array('roundRobin' => true);
$client = $this->_getClient($config);
$this->_checkStrategy($client);
}
/**
* @group functional
* @expectedException \Elastica\Exception\ConnectionException
*/
public function testFailConnection()
{
$config = array('connectionStrategy' => 'RoundRobin', 'host' => '255.255.255.0', 'timeout' => $this->_timeout);
$client = $this->_getClient($config);
$this->_checkStrategy($client);
$client->request('/_aliases');
}
/**
* @group functional
*/
public function testWithOneFailConnection()
{
$connections = array(
new Connection(array('host' => '255.255.255.0', 'timeout' => $this->_timeout)),
new Connection(array('host' => $this->_getHost(), 'timeout' => $this->_timeout)),
);
$count = 0;
$callback = function ($connection, $exception, $client) use (&$count) {
++$count;
};
$client = $this->_getClient(array('connectionStrategy' => 'RoundRobin'), $callback);
$client->setConnections($connections);
$response = $client->request('/_aliases');
/* @var $response Response */
$this->_checkResponse($response);
$this->_checkStrategy($client);
$this->assertLessThan(count($connections), $count);
}
/**
* @group functional
*/
public function testWithNoValidConnection()
{
$connections = array(
new Connection(array('host' => '255.255.255.0', 'timeout' => $this->_timeout)),
new Connection(array('host' => '45.45.45.45', 'port' => '80', 'timeout' => $this->_timeout)),
new Connection(array('host' => '10.123.213.123', 'timeout' => $this->_timeout)),
);
$count = 0;
$client = $this->_getClient(array('roundRobin' => true), function () use (&$count) {
++$count;
});
$client->setConnections($connections);
try {
$client->request('/_aliases');
$this->fail('Should throw exception as no connection valid');
} catch (ConnectionException $e) {
$this->assertEquals(count($connections), $count);
$this->_checkStrategy($client);
}
}
protected function _checkStrategy($client)
{
$strategy = $client->getConnectionStrategy();
$this->assertInstanceOf('Elastica\Connection\Strategy\RoundRobin', $strategy);
}
protected function _checkResponse($response)
{
$this->assertTrue($response->isOk());
}
}
|