Skip to content

Commit 3b24ec4

Browse files
committed
Stop making a request when connecting
1 parent 59a2104 commit 3b24ec4

File tree

4 files changed

+39
-50
lines changed

4 files changed

+39
-50
lines changed

src/PHPCouchDB/Server.php

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -45,39 +45,38 @@ public function __construct(array $options)
4545
);
4646
}
4747

48-
// try to connect as well
49-
try {
50-
$client->get('/');
51-
$this->client = $client;
52-
} catch (\GuzzleHttp\Exception\ConnectException $e) {
53-
throw new Exception\ServerException(
54-
"Could not connect to database. Error: " . $e->getMessage(),
55-
0,
56-
$e
57-
);
58-
}
48+
$this->client = $client;
5949
}
6050

6151
/**
6252
* Ask the CouchDB server what version it is running
6353
*
6454
* @return string Version, e.g. "2.0.1"
65-
* @throws \PHPCouchDB\Exception\ServerException if there's a problem with parsing arguments or creating the client
55+
* @throws \PHPCouchDB\Exception\ServerException if there's a problem with
56+
* connecting to the server or parsing arguments
6657
*/
6758
public function getVersion() : string
6859
{
69-
$response = $this->client->request("GET", "/");
70-
if ($response->getStatusCode() == 200) {
71-
// try to decode JSON
72-
if ($json_data = json_decode($response->getBody(), true)) {
73-
if ($json_data['version']) {
74-
return $json_data['version'];
60+
try {
61+
$response = $this->client->request("GET", "/");
62+
if ($response->getStatusCode() == 200) {
63+
// try to decode JSON
64+
if ($json_data = json_decode($response->getBody(), true)) {
65+
if ($json_data['version']) {
66+
return $json_data['version'];
67+
} else {
68+
return "unknown";
69+
}
7570
} else {
76-
return "unknown";
71+
throw new Exception\ServerException('JSON response not received or not understood');
7772
}
78-
} else {
79-
throw new Exception\ServerException('JSON response not received or not understood');
8073
}
74+
} catch (\GuzzleHttp\Exception\ConnectException $e) {
75+
throw new Exception\ServerException(
76+
"Could not connect to database. Error: " . $e->getMessage(),
77+
0,
78+
$e
79+
);
8180
}
8281
}
8382

tests/PHPCouchDB/DatabaseTest.php

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,6 @@
1212
class DatabaseTest extends \PHPUnit\Framework\TestCase
1313
{
1414
public function setUp() {
15-
// create the first request to check we can connect, can be added to
16-
// the mocks for any test that wants it
17-
$couchdb1 = '{"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache Software Foundation"}}';
18-
$this->db_response = new Response(200, [], $couchdb1);
19-
2015
// offer a use_response for when selecting this database
2116
$egdb1 = '{"db_name":"egdb","update_seq":"0-g1AAAABXeJzLYWBgYMpgTmEQTM4vTc5ISXLIyU9OzMnILy7JAUklMiTV____PyuRAY-iPBYgydAApP5D1GYBAJmvHGw","sizes":{"file":8488,"external":0,"active":0},"purge_seq":0,"other":{"data_size":0},"doc_del_count":0,"doc_count":0,"disk_size":8488,"disk_format_version":6,"data_size":0,"compact_running":false,"instance_start_time":"0"}';
2217
$this->use_response = new Response(200, [], $egdb1);
@@ -29,7 +24,7 @@ public function testGetAllDocs() {
2924
]}';
3025
$docs_response = new Response(200, [], $docs);
3126

32-
$mock = new MockHandler([ $this->db_response, $this->use_response, $docs_response ]);
27+
$mock = new MockHandler([ $this->use_response, $docs_response ]);
3328

3429
$handler = HandlerStack::create($mock);
3530
$client = new Client(['handler' => $handler]);
@@ -49,7 +44,7 @@ public function testGetAllDocsWithNoDocs() {
4944
]}';
5045
$docs_response = new Response(200, [], $docs);
5146

52-
$mock = new MockHandler([ $this->db_response, $this->use_response, $docs_response ]);
47+
$mock = new MockHandler([ $this->use_response, $docs_response ]);
5348

5449
$handler = HandlerStack::create($mock);
5550
$client = new Client(['handler' => $handler]);
@@ -69,7 +64,7 @@ public function testCreateWithID() {
6964
$fetch = '{"_id":"abcde12345","_rev":"1-928ec193918889e122e7ad45cfd88e47","noise":"howl"}';
7065
$fetch_response = new Response(200, [], $fetch);
7166

72-
$mock = new MockHandler([ $this->db_response, $this->use_response, $create_response, $fetch_response ]);
67+
$mock = new MockHandler([ $this->use_response, $create_response, $fetch_response ]);
7368
$handler = HandlerStack::create($mock);
7469
$client = new Client(['handler' => $handler]);
7570

@@ -89,7 +84,7 @@ public function testCreateWithoutID() {
8984
$fetch = '{"_id":"95613816b3a7490727388ebb47002c0f","_rev":"1-928ec193918889e122e7ad45cfd88e47","noise":"howl"}';
9085
$fetch_response = new Response(200, [], $fetch);
9186

92-
$mock = new MockHandler([ $this->db_response, $this->use_response, $create_response, $fetch_response ]);
87+
$mock = new MockHandler([ $this->use_response, $create_response, $fetch_response ]);
9388
$handler = HandlerStack::create($mock);
9489
$client = new Client(['handler' => $handler]);
9590

@@ -109,7 +104,7 @@ public function testGetDocById() {
109104
$fetch = '{"_id":"95613816b3a7490727388ebb47002c0f","_rev":"1-928ec193918889e122e7ad45cfd88e47","noise":"howl"}';
110105
$fetch_response = new Response(200, [], $fetch);
111106

112-
$mock = new MockHandler([ $this->db_response, $this->use_response, $create_response, $fetch_response, $fetch_response ]);
107+
$mock = new MockHandler([ $this->use_response, $create_response, $fetch_response, $fetch_response ]);
113108
$handler = HandlerStack::create($mock);
114109
$client = new Client(['handler' => $handler]);
115110

@@ -125,7 +120,7 @@ public function testGetDocById() {
125120
}
126121

127122
public function testGetName() {
128-
$mock = new MockHandler([ $this->db_response, $this->use_response ]);
123+
$mock = new MockHandler([ $this->use_response ]);
129124

130125
$handler = HandlerStack::create($mock);
131126
$client = new Client(['handler' => $handler]);
@@ -138,7 +133,7 @@ public function testGetName() {
138133
}
139134

140135
public function testGetClient() {
141-
$mock = new MockHandler([ $this->db_response, $this->use_response ]);
136+
$mock = new MockHandler([ $this->use_response ]);
142137

143138
$handler = HandlerStack::create($mock);
144139
$client = new Client(['handler' => $handler]);

tests/PHPCouchDB/DocumentTest.php

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,6 @@
1212
class DocumentTest extends \PHPUnit\Framework\TestCase
1313
{
1414
public function setUp() {
15-
// create the first request to check we can connect, can be added to
16-
// the mocks for any test that wants it
17-
$couchdb1 = '{"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache Software Foundation"}}';
18-
$this->db_response = new Response(200, [], $couchdb1);
19-
2015
// offer a use_response for when selecting this database
2116
$egdb1 = '{"db_name":"egdb","update_seq":"0-g1AAAABXeJzLYWBgYMpgTmEQTM4vTc5ISXLIyU9OzMnILy7JAUklMiTV____PyuRAY-iPBYgydAApP5D1GYBAJmvHGw","sizes":{"file":8488,"external":0,"active":0},"purge_seq":0,"other":{"data_size":0},"doc_del_count":0,"doc_count":0,"disk_size":8488,"disk_format_version":6,"data_size":0,"compact_running":false,"instance_start_time":"0"}';
2217
$this->use_response = new Response(200, [], $egdb1);
@@ -34,7 +29,7 @@ public function testUpdate() {
3429
$fetch2 = '{"_id":"abcde12345","_rev":"1-928ec193918889e122e7ad45cfd88e47","noise":"howl"}';
3530
$fetch_response2 = new Response(200, [], $fetch2);
3631

37-
$mock = new MockHandler([ $this->db_response, $this->use_response, $this->create_response, $this->fetch_response, $update_response, $fetch_response2 ]);
32+
$mock = new MockHandler([ $this->use_response, $this->create_response, $this->fetch_response, $update_response, $fetch_response2 ]);
3833
$handler = HandlerStack::create($mock);
3934
$client = new Client(['handler' => $handler]);
4035

@@ -59,7 +54,7 @@ public function testUpdateConflict() {
5954
$update = '{"error":"conflict","reason":"Document update conflict."}';;
6055
$update_response = new Response(409, [], $update);
6156

62-
$mock = new MockHandler([ $this->db_response, $this->use_response, $this->create_response, $this->fetch_response, $update_response ]);
57+
$mock = new MockHandler([ $this->use_response, $this->create_response, $this->fetch_response, $update_response ]);
6358
$handler = HandlerStack::create($mock);
6459
$client = new Client(['handler' => $handler]);
6560

@@ -79,7 +74,7 @@ public function testDelete() {
7974
$fetch3 = '{"error":"not_found","reason":"deleted"}';
8075
$fetch_response3 = new Response(404, [], $fetch3);
8176

82-
$mock = new MockHandler([ $this->db_response, $this->use_response, $this->create_response, $this->fetch_response, $delete_response, $fetch_response3 ]);
77+
$mock = new MockHandler([ $this->use_response, $this->create_response, $this->fetch_response, $delete_response, $fetch_response3 ]);
8378
$handler = HandlerStack::create($mock);
8479
$client = new Client(['handler' => $handler]);
8580

@@ -104,7 +99,7 @@ public function testDeleteConflict() {
10499
$delete = '{"error":"conflict","reason":"Document update conflict."}';
105100
$delete_response = new Response(409, [], $delete);
106101

107-
$mock = new MockHandler([ $this->db_response, $this->use_response, $this->create_response, $this->fetch_response, $delete_response ]);
102+
$mock = new MockHandler([ $this->use_response, $this->create_response, $this->fetch_response, $delete_response ]);
108103
$handler = HandlerStack::create($mock);
109104
$client = new Client(['handler' => $handler]);
110105

tests/PHPCouchDB/ServerTest.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public function setUp() {
1919
}
2020

2121
public function testCreateWithClient() {
22-
$mock = new MockHandler([ $this->db_response ]);
22+
$mock = new MockHandler([ ]);
2323

2424
$handler = HandlerStack::create($mock);
2525
$client = new Client(['handler' => $handler]);
@@ -32,7 +32,7 @@ public function testCreateWithClient() {
3232
}
3333

3434
public function testGetVersion() {
35-
$mock = new MockHandler([ $this->db_response, $this->db_response ]);
35+
$mock = new MockHandler([ $this->db_response ]);
3636

3737
$handler = HandlerStack::create($mock);
3838
$client = new Client(['handler' => $handler]);
@@ -47,7 +47,7 @@ public function testGetAllDbs() {
4747
$dbs = ["test", "items"];
4848
$response1 = new Response(200, [], json_encode($dbs));
4949

50-
$mock = new MockHandler([ $this->db_response, $response1 ]);
50+
$mock = new MockHandler([ $response1 ]);
5151
$handler = HandlerStack::create($mock);
5252
$client = new Client(['handler' => $handler]);
5353

@@ -60,7 +60,7 @@ public function testUseADbThatDoesExist() {
6060
$egdb1 = '{"db_name":"egdb","update_seq":"0-g1AAAABXeJzLYWBgYMpgTmEQTM4vTc5ISXLIyU9OzMnILy7JAUklMiTV____PyuRAY-iPBYgydAApP5D1GYBAJmvHGw","sizes":{"file":8488,"external":0,"active":0},"purge_seq":0,"other":{"data_size":0},"doc_del_count":0,"doc_count":0,"disk_size":8488,"disk_format_version":6,"data_size":0,"compact_running":false,"instance_start_time":"0"}';
6161
$response1 = new Response(200, [], $egdb1);
6262

63-
$mock = new MockHandler([ $this->db_response, $response1 ]);
63+
$mock = new MockHandler([ $response1 ]);
6464
$handler = HandlerStack::create($mock);
6565
$client = new Client(['handler' => $handler]);
6666

@@ -73,7 +73,7 @@ public function testUseADbWithCreateThatDoesExist() {
7373
$egdb1 = '{"db_name":"egdb","update_seq":"0-g1AAAABXeJzLYWBgYMpgTmEQTM4vTc5ISXLIyU9OzMnILy7JAUklMiTV____PyuRAY-iPBYgydAApP5D1GYBAJmvHGw","sizes":{"file":8488,"external":0,"active":0},"purge_seq":0,"other":{"data_size":0},"doc_del_count":0,"doc_count":0,"disk_size":8488,"disk_format_version":6,"data_size":0,"compact_running":false,"instance_start_time":"0"}';
7474
$response1 = new Response(200, [], $egdb1);
7575

76-
$mock = new MockHandler([ $this->db_response, $response1 ]);
76+
$mock = new MockHandler([ $response1 ]);
7777
$handler = HandlerStack::create($mock);
7878
$client = new Client(['handler' => $handler]);
7979

@@ -89,7 +89,7 @@ public function testUseADbThatDoesNotExist() {
8989
$egdb1 = '{"error":"not_found","reason":"Database does not exist."}';
9090
$response1 = new Response(404, [], $egdb1);
9191

92-
$mock = new MockHandler([ $this->db_response, $response1 ]);
92+
$mock = new MockHandler([ $response1 ]);
9393
$handler = HandlerStack::create($mock);
9494
$client = new Client(['handler' => $handler]);
9595

@@ -105,7 +105,7 @@ public function testUseADbWithCreateThatDoesNotExist() {
105105
$egdb2 = '{"ok":true}';
106106
$response2 = new Response(201, [], $egdb2);
107107

108-
$mock = new MockHandler([ $this->db_response, $response1, $response2 ]);
108+
$mock = new MockHandler([ $response1, $response2 ]);
109109
$handler = HandlerStack::create($mock);
110110
$client = new Client(['handler' => $handler]);
111111

@@ -115,7 +115,7 @@ public function testUseADbWithCreateThatDoesNotExist() {
115115
}
116116

117117
public function testGetClient() {
118-
$mock = new MockHandler([ $this->db_response ]);
118+
$mock = new MockHandler([ ]);
119119

120120
$handler = HandlerStack::create($mock);
121121
$client = new Client(['handler' => $handler]);

0 commit comments

Comments
 (0)