You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by da...@apache.org on 2009/06/25 06:52:17 UTC
svn commit: r788253 - /couchdb/trunk/test/etap/100-ref-counter.t
Author: davisp
Date: Thu Jun 25 04:52:17 2009
New Revision: 788253
URL: http://svn.apache.org/viewvc?rev=788253&view=rev
Log:
Adding tests for couch_ref_counter.erl
Thanks Bob Dionne
Added:
couchdb/trunk/test/etap/100-ref-counter.t (with props)
Added: couchdb/trunk/test/etap/100-ref-counter.t
URL: http://svn.apache.org/viewvc/couchdb/trunk/test/etap/100-ref-counter.t?rev=788253&view=auto
==============================================================================
--- couchdb/trunk/test/etap/100-ref-counter.t (added)
+++ couchdb/trunk/test/etap/100-ref-counter.t Thu Jun 25 04:52:17 2009
@@ -0,0 +1,93 @@
+#!/usr/bin/env escript
+%% -*- erlang -*-
+
+main(_) ->
+ code:add_pathz("src/couchdb"),
+ etap:plan(8),
+ case (catch test()) of
+ ok ->
+ etap:end_tests();
+ Other ->
+ etap:diag(io_lib:format("Test died abnormally: ~p", [Other])),
+ etap:bail(Other)
+ end,
+ ok.
+
+loop() ->
+ receive
+ {ping, From} ->
+ From ! pong
+ end.
+
+wait() ->
+ receive
+ _ ->
+ ok
+ after
+ 1000 ->
+ throw(timeout_error)
+ end.
+
+test() ->
+ {ok, RefCtr} = couch_ref_counter:start([]),
+
+ etap:is(
+ couch_ref_counter:count(RefCtr),
+ 1,
+ "A ref_counter is initialized with the calling process as a referer."
+ ),
+
+ ChildPid1 = spawn(fun() -> loop() end),
+
+ % This is largely implicit in that nothing else breaks
+ % as ok is just returned from gen_server:cast()
+ etap:is(
+ couch_ref_counter:drop(RefCtr, ChildPid1),
+ ok,
+ "Dropping an unknown Pid is ignored."
+ ),
+
+ couch_ref_counter:add(RefCtr, ChildPid1),
+ etap:is(
+ couch_ref_counter:count(RefCtr),
+ 2,
+ "Adding a Pid to the ref_counter increases it's count."
+ ),
+
+ couch_ref_counter:add(RefCtr, ChildPid1),
+ etap:is(
+ couch_ref_counter:count(RefCtr),
+ 2,
+ "Readding the same Pid maintains the count but increments it's refs."
+ ),
+
+ couch_ref_counter:drop(RefCtr, ChildPid1),
+ etap:is(
+ couch_ref_counter:count(RefCtr),
+ 2,
+ "Droping the doubly added Pid only removes a ref, not a referer."
+ ),
+
+ couch_ref_counter:drop(RefCtr, ChildPid1),
+ etap:is(
+ couch_ref_counter:count(RefCtr),
+ 1,
+ "Dropping the second ref drops the referer."
+ ),
+
+ couch_ref_counter:add(RefCtr, ChildPid1),
+ etap:is(
+ couch_ref_counter:count(RefCtr),
+ 2,
+ "Sanity checking that the Pid was re-added."
+ ),
+
+ ChildPid1 ! {ping, self()},
+ wait(),
+ etap:is(
+ couch_ref_counter:count(RefCtr),
+ 1,
+ "The referer count was decremented automatically on process exit."
+ ),
+
+ ok.
Propchange: couchdb/trunk/test/etap/100-ref-counter.t
------------------------------------------------------------------------------
svn:executable = *