Skip to content

Commit 98fed8d

Browse files
committed
Added test for #90
1 parent c10de36 commit 98fed8d

File tree

1 file changed

+93
-0
lines changed

1 file changed

+93
-0
lines changed

tests/gh_90.phpt

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
--TEST--
2+
Test for GH #90
3+
--SKIPIF--
4+
<?php if (!extension_loaded("memcached")) print "skip"; ?>
5+
--FILE--
6+
<?php
7+
//Setup MemcacheD
8+
{
9+
$memcached = new Memcached();
10+
$memcached->setOptions(array(memcached::OPT_BINARY_PROTOCOL => true));
11+
$memcached->addServers(array(array('127.0.0.1', 11211, 100)));
12+
}
13+
14+
// Create a key for use as a lock. If this key already exists, wait till it doesn't exist.
15+
{
16+
$key = 'LockKey';
17+
$lockToken = mt_rand(0, pow(2, 32)); //Random value betwen 0 and 2^32 for ownership verification
18+
19+
while (true)
20+
{
21+
$casToken = null;
22+
$data = $memcached->get($key, $casToken);
23+
if ($memcached->getResultCode() == Memcached::RES_NOTFOUND)
24+
{
25+
if ($memcached->add($key, $lockToken, 5))
26+
{
27+
break;
28+
}
29+
}
30+
elseif ($data === false)
31+
{
32+
if ($memcached->cas($casToken, $key, $lockToken, 5))
33+
{
34+
break;
35+
}
36+
}
37+
38+
//Sleep 10 milliseconds
39+
usleep(10 * 1000);
40+
}
41+
}
42+
43+
//Do something here that requires exclusive access to this key
44+
45+
//Effectively delete our key lock.
46+
{
47+
$casToken = null;
48+
if ($lockToken == $memcached->get($key, $casToken))
49+
{
50+
$memcached->cas($casToken, $key, false, 1);
51+
}
52+
}
53+
54+
//Create 10 keys and then increment them. The first value returned will be wrong.
55+
{
56+
$keyList = array();
57+
for ($i = 0; $i < 10; $i++)
58+
{
59+
$keyList[] = $i . '_' . uniqid ('count_value_');
60+
}
61+
62+
$valueList = array();
63+
foreach ($keyList as $key)
64+
{
65+
$valueList[$key] = $memcached->increment($key, 1, 1);
66+
}
67+
68+
var_dump ($valueList);
69+
}
70+
71+
--EXPECTF--
72+
array(10) {
73+
["0_%s"]=>
74+
int(1)
75+
["1_%s"]=>
76+
int(1)
77+
["2_%s"]=>
78+
int(1)
79+
["3_%s"]=>
80+
int(1)
81+
["4_%s"]=>
82+
int(1)
83+
["5_%s"]=>
84+
int(1)
85+
["6_%s"]=>
86+
int(1)
87+
["7_%s"]=>
88+
int(1)
89+
["8_%s"]=>
90+
int(1)
91+
["9_%s"]=>
92+
int(1)
93+
}

0 commit comments

Comments
 (0)