Skip to content

Commit 0690ab9

Browse files
committed
correcting KVClient::acquire and release methods
1 parent 3ec6a2f commit 0690ab9

File tree

3 files changed

+56
-2
lines changed

3 files changed

+56
-2
lines changed

src/Consul.php

+3
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ class Consul {
4848
const HealthCritical = 'critical';
4949
const HealthMaint = 'maintenance';
5050

51+
const SessionBehaviorRelease = 'release';
52+
const SessionBehaviorDelete = 'delete';
53+
5154
/** @var \DCarbone\PHPConsulAPI\ACL\ACLClient */
5255
public $ACL;
5356
/** @var \DCarbone\PHPConsulAPI\Agent\AgentClient */

src/KV/KVClient.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ public function cas(KVPair $p, WriteOptions $options = null) {
243243
* )
244244
*/
245245
public function acquire(KVPair $p, WriteOptions $options = null) {
246-
$r = new Request('PUT', sprintf('v1/kv/%s', $p->Key), $this->config);
246+
$r = new Request('PUT', sprintf('v1/kv/%s', $p->Key), $this->config, $p->Value);
247247
$r->setWriteOptions($options);
248248
$r->Params->set('acquire', $p->Session);
249249
if (0 !== $p->Flags) {
@@ -288,7 +288,7 @@ public function deleteCAS(KVPair $p, WriteOptions $options = null) {
288288
* )
289289
*/
290290
public function release(KVPair $p, WriteOptions $options = null) {
291-
$r = new Request('PUT', sprintf('v1/kv/%s', $p->Key), $this->config);
291+
$r = new Request('PUT', sprintf('v1/kv/%s', $p->Key), $this->config, $p->Value);
292292
$r->setWriteOptions($options);
293293
$r->Params->set('release', $p->Session);
294294
if (0 !== $p->Flags) {

tests/Usage/KV/KVClientLockTest.php

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?php namespace DCarbone\PHPConsulAPITests\Usage\KV;
2+
3+
use DCarbone\PHPConsulAPI\Config;
4+
use DCarbone\PHPConsulAPI\Consul;
5+
use DCarbone\PHPConsulAPI\KV\KVClient;
6+
use DCarbone\PHPConsulAPI\KV\KVPair;
7+
use DCarbone\PHPConsulAPI\Session\SessionClient;
8+
use DCarbone\PHPConsulAPI\Session\SessionEntry;
9+
use DCarbone\PHPConsulAPI\WriteMeta;
10+
use DCarbone\PHPConsulAPITests\ConsulManager;
11+
use PHPUnit\Framework\TestCase;
12+
13+
/**
14+
* Class KVClientLockTest
15+
* @package DCarbone\PHPConsulAPITests\Usage\KV
16+
*/
17+
class KVClientLockTest extends TestCase {
18+
19+
protected function setUp() {
20+
ConsulManager::startSingle();
21+
}
22+
23+
protected function tearDown() {
24+
ConsulManager::stopSingle();
25+
}
26+
27+
public function testAcquireAndRelease() {
28+
static $name = 'lockme';
29+
static $key = 'lockable';
30+
31+
$conf = new Config();
32+
$kvClient = new KVClient($conf);
33+
$sessionClient = new SessionClient($conf);
34+
35+
list($id, $_, $err) = $sessionClient->CreateNoChecks(new SessionEntry(['Name' => $name,
36+
'TTL' => '10s',
37+
'Behavior' => Consul::SessionBehaviorDelete]));
38+
$this->assertNull($err, sprintf('Error creating session: %s', $err));
39+
40+
$kv = new KVPair(['Key' => $key, 'Value' => 'whatever', 'Session' => $id]);
41+
list($wm, $err) = $kvClient->Acquire($kv);
42+
$this->assertNull($err, sprintf('Error acquiring lock: %s', $err));
43+
$this->assertInstanceOf(WriteMeta::class, $wm);
44+
45+
list($kv, $_, $err) = $kvClient->Get($key);
46+
$this->assertNull($err, sprintf('Error retrieving key: %s', $err));
47+
$this->assertInstanceOf(KVPair::class, $kv);
48+
$this->assertEquals($id, $kv->Session);
49+
$this->assertEquals('whatever', $kv->Value);
50+
}
51+
}

0 commit comments

Comments
 (0)