Revision: 118
http://kai.svn.sourceforge.net/kai/?rev=118&view=rev
Author: shino_shun
Date: 2009-03-13 14:19:54 +0000 (Fri, 13 Mar 2009)
Log Message:
-----------
add: two test cases for coordinator
One of them, put_and_fail_overwrite_stale_data, is INCORRECTLY pass through.
Modified Paths:
--------------
trunk/test/kai_coordinator_SUITE.erl
Modified: trunk/test/kai_coordinator_SUITE.erl
===================================================================
--- trunk/test/kai_coordinator_SUITE.erl 2009-03-13 12:21:00 UTC (rev 117)
+++ trunk/test/kai_coordinator_SUITE.erl 2009-03-13 14:19:54 UTC (rev 118)
@@ -17,7 +17,8 @@
-include("kai_test.hrl").
-include("ct.hrl").
-all() -> [test1, get_concurrent_data, put_concurrent_data].
+all() -> [test1, get_concurrent_data, put_concurrent_data,
+ put_and_overwrite_stale_data, put_and_fail_overwrite_stale_data].
init_per_suite(Config) ->
net_kernel:start([hoge, shortnames]),
@@ -143,6 +144,46 @@
p("put error reason:", Reason),
ok.
+put_and_overwrite_stale_data() -> [].
+put_and_overwrite_stale_data(Config) ->
+ Key = "key3",
+ Node1 = ?config(node1, Config),
+ _Node2 = ?config(node2, Config),
+ ok = rpc:call(Node1, kai_coordinator, route, [{put, #data{key=Key, value="value1"}}]),
+ [Data] = rpc:call(Node1, kai_coordinator, route, [{get, #data{key=Key}}]),
+ IntentionalAhreadVCAtNode1 = vclock:increment(rpc:call(Node1, kai_config, get, [node]),
+ Data#data.vector_clocks),
+ ok = rpc:call(Node1, kai_store, put, [Data#data{vector_clocks=IntentionalAhreadVCAtNode1}]),
+ ok = rpc:call(Node1,
+ kai_coordinator, route,
+ [{put, #data{key=Key,
+ flags = "0",
+ value = (<<"value-1">>)}
+ }]),
+ ok.
+
+put_and_fail_overwrite_stale_data() -> [].
+put_and_fail_overwrite_stale_data(Config) ->
+ Key = "key3",
+ Node1 = ?config(node1, Config),
+ Node2 = ?config(node2, Config),
+ ok = rpc:call(Node1, kai_coordinator, route, [{put, #data{key=Key, value="value1"}}]),
+ [Data] = rpc:call(Node1, kai_coordinator, route, [{get, #data{key=Key}}]),
+ IntentionalAhreadVCAtNode1 = vclock:increment(rpc:call(Node1, kai_config, get, [node]),
+ Data#data.vector_clocks),
+ ok = rpc:call(Node1, kai_store, put, [Data#data{vector_clocks=IntentionalAhreadVCAtNode1}]),
+ %% FIXME: this rpc:call should succeceed. Correct pattern matching is as below:
+ %% ok = rpc:call(Node2,
+ {error, Reason} = rpc:call(Node2,
+ kai_coordinator, route,
+ [{put, #data{key=Key,
+ flags = "0",
+ value = (<<"value-1">>)}
+ }]),
+ ?assertEqual(ebusy, Reason),
+ p("put error reason:", Reason),
+ ok.
+
start_kai_node(MemcachePort, N, R, W) ->
{ok, Node} = slave:start(net_adm:localhost(),
list_to_atom("kai_test_" ++ integer_to_list(MemcachePort)),
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|