You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2017/05/10 16:16:16 UTC

[couchdb] 02/02: Test changes_listener dies on mem3_shards shutdown

This is an automated email from the ASF dual-hosted git repository.

vatamane pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 3691c2edbc6603963b1b5ad1bf97dfb69886c4a6
Author: Jay Doane <ja...@gmail.com>
AuthorDate: Sun May 7 22:56:38 2017 -0700

    Test changes_listener dies on mem3_shards shutdown
    
    This adds a test to ensure that the changes_listener process exits when
    the mem3_shards process is shut down.
    
    COUCHDB-3398
---
 src/mem3/src/mem3_shards.erl | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/src/mem3/src/mem3_shards.erl b/src/mem3/src/mem3_shards.erl
index a419e45..8d9cfb9 100644
--- a/src/mem3/src/mem3_shards.erl
+++ b/src/mem3/src/mem3_shards.erl
@@ -732,4 +732,45 @@ wait_writer_result(WRef) ->
 spawn_link_mock_writer(Db, Shards, Timeout) ->
     erlang:spawn_link(fun() -> shard_writer(Db, Shards, Timeout) end).
 
+
+
+mem3_shards_changes_test_() -> {
+    "Test mem3_shards changes listener", {
+        foreach,
+        fun setup_changes/0, fun teardown_changes/1,
+        [
+            fun should_kill_changes_listener_on_shutdown/1
+        ]
+    }
+}.
+
+
+setup_changes() ->
+    ok = meck:expect(mem3_util, ensure_exists, ['_'],
+        {ok, #db{name = <<"dbs">>, update_seq = 0}}),
+    ok = meck:expect(couch_db, close, ['_'], ok),
+    ok = application:start(config),
+    {ok, Pid} = ?MODULE:start_link(),
+    true = erlang:unlink(Pid),
+    Pid.
+
+
+teardown_changes(Pid) ->
+    true = exit(Pid, shutdown),
+    ok = application:stop(config),
+    meck:unload().
+
+
+should_kill_changes_listener_on_shutdown(Pid) ->
+    ?_test(begin
+        ?assert(is_process_alive(Pid)),
+        {ok, ChangesPid} = get_changes_pid(),
+        ?assert(is_process_alive(ChangesPid)),
+        true = test_util:stop_sync_throw(
+            ChangesPid, fun() -> exit(Pid, shutdown) end, wait_timeout),
+        ?assertNot(is_process_alive(ChangesPid)),
+        ok
+    end).
+
+
 -endif.

-- 
To stop receiving notification emails like this one, please contact
"commits@couchdb.apache.org" <co...@couchdb.apache.org>.