summaryrefslogtreecommitdiff
path: root/test/replication_test.erl
diff options
context:
space:
mode:
Diffstat (limited to 'test/replication_test.erl')
-rw-r--r--test/replication_test.erl89
1 files changed, 89 insertions, 0 deletions
diff --git a/test/replication_test.erl b/test/replication_test.erl
new file mode 100644
index 00000000..095e1b44
--- /dev/null
+++ b/test/replication_test.erl
@@ -0,0 +1,89 @@
+%%% -*- erlang-indent-level:2 -*-
+-module(replication_test).
+-author('brad@cloudant.com').
+
+-include("../include/config.hrl").
+-include("../include/test.hrl").
+
+-include_lib("eunit/include/eunit.hrl").
+
+-define(NODEA, {a, ["d", "1", "4"]}).
+-define(NODEB, {b, ["e", "3", "1"]}).
+-define(NODEC, {c, ["f", "1", "2"]}).
+-define(NODED, {d, ["e", "1", "2"]}).
+-define(NODEE, {e, ["e", "2", "2"]}).
+-define(NODES, [?NODEA, ?NODEB, ?NODEC, ?NODED, ?NODEE]).
+
+%% TODO: give this some effigy love, mock configuration up all of these
+%% different ways.
+
+metadata_level_1_test() ->
+ configuration:start_link(#config{n=3,r=1,w=1,q=6,
+ directory=?TMP_DIR,
+ meta=[{datacenter,roundrobin},
+ {rack, roundrobin},
+ {slot, roundrobin}
+ ]}),
+ Partners = replication:partners(?NODEA,
+ [?NODEA, ?NODEB, ?NODEC],
+ configuration:get_config()),
+ ?assertEqual([?NODEB, ?NODEC], Partners),
+ configuration:stop().
+
+
+metadata_level_2_test() ->
+ configuration:start_link(#config{n=3,r=1,w=1,q=6,
+ directory=?TMP_DIR,
+ meta=[{datacenter,roundrobin},
+ {rack, roundrobin},
+ {slot, roundrobin}
+ ]}),
+ Partners = replication:partners(?NODEA,
+ ?NODES,
+ configuration:get_config()),
+ ?assertEqual([?NODED,?NODEE], Partners),
+ configuration:stop().
+
+
+no_metadata_test() ->
+ configuration:start_link(#config{n=2,r=1,w=1,q=6,
+ directory=?TMP_DIR,
+ meta=[]}),
+ Partners = replication:partners(a,
+ [a,b,c,d],
+ configuration:get_config()),
+ ?assertEqual([b], Partners),
+ configuration:stop().
+
+
+wrap_test() ->
+ configuration:start_link(#config{n=3,r=1,w=1,q=6,
+ directory=?TMP_DIR,
+ meta=[]}),
+ Wrap1Partners = replication:partners(c,
+ [a,b,c,d],
+ configuration:get_config()),
+ ?assertEqual([a,d], Wrap1Partners),
+ Wrap2Partners = replication:partners(d,
+ [a,b,c,d],
+ configuration:get_config()),
+ ?assertEqual([a,b], Wrap2Partners),
+ configuration:stop().
+
+
+self_test() ->
+ configuration:start_link(#config{n=3,r=1,w=1,q=6,
+ directory=?TMP_DIR,
+ meta=[]}),
+ Partners = replication:partners(a, [a],
+ configuration:get_config()),
+ ?assertEqual([], Partners),
+ configuration:stop().
+
+
+remove_self_test() ->
+ configuration:start_link(
+ #config{n=4,r=1,w=1,q=6, directory=?TMP_DIR, meta=[]}),
+ Partners = replication:partners(a, [a,b], configuration:get_config()),
+ ?assertEqual([b], Partners),
+ configuration:stop().