summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gen_server2.erl57
-rw-r--r--src/rabbit.erl9
-rw-r--r--src/rabbit_amqqueue.erl2
-rw-r--r--src/rabbit_amqqueue_process.erl10
-rw-r--r--src/rabbit_framing_channel.erl10
-rw-r--r--src/rabbit_log.erl2
-rw-r--r--src/rabbit_mnesia.erl2
-rw-r--r--src/rabbit_networking.erl22
-rw-r--r--src/rabbit_reader.erl16
-rw-r--r--src/rabbit_tests.erl228
-rw-r--r--src/rabbit_writer.erl3
-rw-r--r--src/supervisor2.erl11
-rw-r--r--src/test_sup.erl12
13 files changed, 383 insertions, 1 deletions
diff --git a/src/gen_server2.erl b/src/gen_server2.erl
index 6e02b23ecb..ea1e42b21f 100644
--- a/src/gen_server2.erl
+++ b/src/gen_server2.erl
@@ -187,7 +187,7 @@
prioritise_cast, prioritise_info}).
%%%=========================================================================
-%%% Specs. These exist only to shut up dialyzer's warnings
+%%% Specs.
%%%=========================================================================
-ifdef(use_specs).
@@ -200,6 +200,61 @@
-spec(pre_hibernate/1 :: (gs2_state()) -> no_return()).
-spec(system_terminate/4 :: (_, _, _, gs2_state()) -> no_return()).
+-spec(abcast/2 :: (atom(),_) -> 'abcast').
+-spec(abcast/3 :: ([atom()],atom(),_) -> 'abcast').
+-spec(call/2 :: (_,_) -> any()).
+-spec(call/3 :: (_,_,_) -> any()).
+-spec(cast/2 :: (atom() | pid() | {atom(),_},_) -> 'ok').
+-spec(enter_loop/3 :: (atom(),maybe_improper_list(),_) -> any()).
+-spec(enter_loop/4 :: (atom(),maybe_improper_list(),_,_) -> any()).
+-spec(enter_loop/5 :: (atom(),
+ maybe_improper_list(),
+ _,
+ pid() | {'global',_} | {'local',atom()},
+ _) ->
+ any()).
+-spec(enter_loop/6 :: (atom(),
+ maybe_improper_list(),
+ _,
+ pid() | {'global',_} | {'local',atom()},
+ _,
+ 'undefined' | {'backoff',_,_,_}) ->
+ any()).
+-spec(format_status/2 :: (_,[any(),...]) -> nonempty_maybe_improper_list()).
+-spec(init_it/6 :: (pid(),_,_,atom(),_,maybe_improper_list()) -> any()).
+-spec(multi_call/2 :: (atom(),_) -> any()).
+-spec(multi_call/3 :: (maybe_improper_list(),atom(),_) -> any()).
+-spec(multi_call/4 :: (_,_,_,'infinity' | non_neg_integer()) -> any()).
+-spec(print_event/3 :: (atom() | pid(),_,_) -> 'ok').
+-spec(reply/2 :: ({_,_},_) -> any()).
+-spec(start/3 :: (atom() | tuple(),
+ _,
+ [{'debug',
+ ['debug' | 'log' | 'statistics' | 'trace' | {_,_}]} |
+ {'spawn_opt',['link' | {_,_}]} |
+ {'timeout','infinity' | non_neg_integer()}]) ->
+ 'ignore' | {'error',_} | {'ok',pid()}).
+-spec(start/4 :: ({'global',_} | {'local',atom()},
+ atom() | tuple(),
+ _,
+ [{'debug',
+ ['debug' | 'log' | 'statistics' | 'trace' | {_,_}]} |
+ {'spawn_opt', ['link' | {_,_}]} |
+ {'timeout','infinity' | non_neg_integer()}]) ->
+ 'ignore' | {'error',_} | {'ok',pid()}).
+-spec(system_code_change/4 :: (#gs2_state{},_,_,_) -> any()).
+-spec(system_continue/3 :: (_,_,#gs2_state{}) -> any()).
+-spec(wake_hib/1 :: (#gs2_state{timeout_state::'undefined' |
+ {{non_neg_integer(),
+ non_neg_integer(),
+ non_neg_integer()},
+ {'backoff',
+ integer(),
+ number(),
+ number(),
+ {_,_,_}}}}) ->
+ any()).
+
-endif.
%%%=========================================================================
diff --git a/src/rabbit.erl b/src/rabbit.erl
index a619ef362d..ec3c00f784 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -200,6 +200,15 @@
{running_nodes, [node()]}]).
-spec(log_location/1 :: ('sasl' | 'kernel') -> log_location()).
+-spec(maybe_insert_default_data/0 :: () -> 'ok').
+-spec(start/2 :: ('normal',[]) ->
+ {'error',
+ {'erlang_version_too_old',
+ {'found',[any()]},
+ {'required',[any(),...]}}} |
+ {'ok',pid()}).
+-spec(stop/1 :: (_) -> 'ok').
+
-endif.
%%----------------------------------------------------------------------------
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl
index 70d8f2dda7..d74bc32973 100644
--- a/src/rabbit_amqqueue.erl
+++ b/src/rabbit_amqqueue.erl
@@ -167,6 +167,8 @@
-spec(on_node_down/1 :: (node()) -> 'ok').
-spec(pseudo_queue/2 :: (name(), pid()) -> rabbit_types:amqqueue()).
+-spec(drop_expired/1 :: (atom() | pid() | {atom(),_}) -> 'ok').
+
-endif.
%%----------------------------------------------------------------------------
diff --git a/src/rabbit_amqqueue_process.erl b/src/rabbit_amqqueue_process.erl
index 25859c22f9..abe73cb5f6 100644
--- a/src/rabbit_amqqueue_process.erl
+++ b/src/rabbit_amqqueue_process.erl
@@ -82,6 +82,16 @@
txn,
unsent_message_count}).
+%%----------------------------------------------------------------------------
+
+-ifdef(use_specs).
+
+-spec(info_keys/0 :: () -> [atom(),...]).
+
+-endif.
+
+%%----------------------------------------------------------------------------
+
-define(STATISTICS_KEYS,
[pid,
exclusive_consumer_pid,
diff --git a/src/rabbit_framing_channel.erl b/src/rabbit_framing_channel.erl
index cb53185f6b..66b5aa4a4f 100644
--- a/src/rabbit_framing_channel.erl
+++ b/src/rabbit_framing_channel.erl
@@ -37,6 +37,16 @@
%% internal
-export([mainloop/3]).
+%%----------------------------------------------------------------------------
+
+-ifdef(use_specs).
+
+-spec(mainloop/3 :: (_,_,_) -> any()).
+-spec(process/2 :: (atom() | pid() | port() | {atom(),atom()},_) -> 'ok').
+-spec(shutdown/1 :: (atom() | pid() | port() | {atom(),atom()}) -> 'ok').
+
+-endif.
+
%%--------------------------------------------------------------------
start_link(Parent, ChannelPid, Protocol) ->
diff --git a/src/rabbit_log.erl b/src/rabbit_log.erl
index 863f77e7eb..9e761da7fa 100644
--- a/src/rabbit_log.erl
+++ b/src/rabbit_log.erl
@@ -60,6 +60,8 @@
-spec(error/1 :: (string()) -> 'ok').
-spec(error/2 :: (string(), [any()]) -> 'ok').
+-spec(message/4 :: (_,_,_,_) -> 'ok').
+
-endif.
%%----------------------------------------------------------------------------
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index a62e7a6f47..b8bfb98cab 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -67,6 +67,8 @@
-spec(create_tables/0 :: () -> 'ok').
-spec(copy_db/1 :: (file:filename()) -> rabbit_types:ok_or_error(any())).
+-spec(table_names/0 :: () -> [atom()]).
+
-endif.
%%----------------------------------------------------------------------------
diff --git a/src/rabbit_networking.erl b/src/rabbit_networking.erl
index 1c542ffe7b..fa85fdff2f 100644
--- a/src/rabbit_networking.erl
+++ b/src/rabbit_networking.erl
@@ -87,6 +87,28 @@
-spec(check_tcp_listener_address/3 ::
(atom(), hostname(), ip_port()) -> {inet:ip_address(), atom()}).
+-spec(boot/0 :: () -> 'ok').
+-spec(start_client/1 ::
+ (port() | #ssl_socket{ssl::{'sslsocket',_,_}}) ->
+ atom() | pid() | port() | {atom(),atom()}).
+-spec(start_ssl_client/2 ::
+ (_,port() | #ssl_socket{ssl::{'sslsocket',_,_}}) ->
+ atom() | pid() | port() | {atom(),atom()}).
+-spec(tcp_listener_started/3 ::
+ (_,
+ string() |
+ {byte(),byte(),byte(),byte()} |
+ {char(),char(),char(),char(),char(),char(),char(),char()},
+ _) ->
+ 'ok').
+-spec(tcp_listener_stopped/3 ::
+ (_,
+ string() |
+ {byte(),byte(),byte(),byte()} |
+ {char(),char(),char(),char(),char(),char(),char(),char()},
+ _) ->
+ 'ok').
+
-endif.
%%----------------------------------------------------------------------------
diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl
index 4dd150a26f..c6c462e715 100644
--- a/src/rabbit_reader.erl
+++ b/src/rabbit_reader.erl
@@ -178,6 +178,22 @@
rabbit_types:ok_or_error2(
rabbit_net:socket(), any()))) -> no_return()).
+-spec(analyze_frame/3 ::
+ (_,_,_) ->
+ 'error' |
+ 'heartbeat' |
+ {'content_body',_} |
+ {'method',_,binary()} |
+ {'content_header',
+ char(),
+ char(),
+ non_neg_integer(),
+ binary()}).
+-spec(mainloop/2 :: (_,#v1{}) -> any()).
+-spec(system_code_change/4 :: (_,_,_,_) -> {'ok',_}).
+-spec(system_continue/3 :: (_,_,#v1{}) -> any()).
+-spec(system_terminate/4 :: (_,_,_,_) -> none()).
+
-endif.
%%--------------------------------------------------------------------------
diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl
index 8b58b822a4..bd9d23d083 100644
--- a/src/rabbit_tests.erl
+++ b/src/rabbit_tests.erl
@@ -44,6 +44,234 @@
-define(PERSISTENT_MSG_STORE, msg_store_persistent).
-define(TRANSIENT_MSG_STORE, msg_store_transient).
+%%----------------------------------------------------------------------------
+
+-ifdef(use_specs).
+
+-spec(add_log_handlers/1 :: ([any()]) -> 'ok').
+-spec(all_tests/0 :: () -> 'passed').
+-spec(assert_prop/3 :: ([any()],_,_) -> any()).
+-spec(assert_props/2 :: (_,[any()]) -> [any()]).
+-spec(await_response/1 :: (non_neg_integer()) -> 'ok').
+-spec(bpqueue_mff/4 ::
+ (fun((_,_,_,_) -> any()),_,{_,_},_) -> {[{_,[any()]}],_}).
+-spec(bpqueue_mffl/3 :: (_,{_,_},_) -> {[{_,[any()]}],_}).
+-spec(bpqueue_mffr/3 :: (_,{_,_},_) -> {[{_,[any()]}],_}).
+-spec(bpqueue_test/5 ::
+ (fun((_,_,_) -> any()),
+ fun((_) -> any()),
+ fun((_) -> any()),
+ fun((_,_,_) -> any()),
+ fun((_,_,_,_) -> any())) ->
+ {_,_}).
+-spec(check_get_options/3 :: ({_,[any()]},[any()],_) -> 'ok').
+-spec(check_pg_local/3 :: ('ok',[any()],[any()]) -> ['true',...]).
+-spec(check_variable_queue_status/2 ::
+ (_,[any()]) ->
+ {'vqstate',
+ queue(),
+ {_,_},
+ _,
+ {_,_},
+ queue(),
+ _,
+ dict(),
+ _,
+ _,
+ {'sync',_,_,_,[any()]},
+ _,
+ _,
+ _,
+ _,
+ _,
+ _,
+ _,
+ _,
+ _,
+ _,
+ _,
+ {'rates',_,_,_,_,_}}).
+-spec(clean_logs/2 :: ([atom() | [atom() | [any()] | char()]],_) -> 'ok').
+-spec(control_action/2 :: (_,_) -> any()).
+-spec(control_action/3 :: (_,_,_) -> any()).
+-spec(control_action/4 :: (_,_,_,_) -> any()).
+-spec(default_options/0 ::
+ () ->
+ [{[45 | 112 | 113,...],
+ [47 | 97 | 101 | 102 | 108 | 115,...]},
+ ...]).
+-spec(delete_file/1 ::
+ (atom() | [atom() | [any()] | char()]) -> 'ok' | {'error',atom()}).
+-spec(delete_log_handlers/1 :: ([atom()]) -> 'ok').
+-spec(empty_files/1 :: ([atom() | [any()]]) -> [boolean() | {'error',atom()}]).
+-spec(empty_test_queue/0 :: () -> 'ok').
+-spec(expand_options/2 :: ([any()],_) -> any()).
+-spec(foreach_with_msg_store_client/4 :: (_,_,_,[any()]) -> 'ok').
+-spec(guid_bin/1 :: (_) -> binary()).
+-spec(info_action/3 :: (_,[any()],_) -> 'ok').
+-spec(init_test_queue/0 ::
+ () -> {'undefined' | number(),{'qistate',_,_,_,_,_}}).
+-spec(make_files_non_writable/1 :: ([atom() | [any()]]) -> 'ok').
+-spec(make_responder/1 :: (_) -> fun(() -> any())).
+-spec(make_responder/2 :: (_,_) -> fun(() -> any())).
+-spec(maybe_run_cluster_dependent_tests/0 :: () -> 'passed').
+-spec(msg_store_contains/3 :: (_,[any()],_) -> any()).
+-spec(msg_store_read/2 :: ([any()],_) -> any()).
+-spec(msg_store_remove/2 :: (_,_) -> 'ok').
+-spec(msg_store_remove/3 :: (_,_,_) -> 'ok').
+-spec(msg_store_sync/2 ::
+ (_,
+ {'client_msstate',atom() | pid() | {atom(),_},_,_,_,_,_,_,_,_,_,_}) ->
+ 'ok').
+-spec(msg_store_write/2 :: ([any()],_) -> 'ok').
+-spec(must_exit/1 :: (_) -> 'ok').
+-spec(non_empty_files/1 ::
+ ([atom() | [any()]]) -> [boolean() | {'error',atom()}]).
+-spec(priority_queue_in_all/2 :: (_,[any()]) -> any()).
+-spec(priority_queue_out_all/1 ::
+ ({'pqueue',nonempty_maybe_improper_list()} |
+ {'queue',maybe_improper_list(),maybe_improper_list()}) ->
+ [any()]).
+-spec(publish_fetch_and_ack/3 :: (non_neg_integer(),_,_) -> any()).
+-spec(queue_index_publish/3 ::
+ ([any()],boolean(),_) -> {_,maybe_improper_list()}).
+-spec(queue_name/1 :: (binary()) -> #resource{name::binary()}).
+-spec(restart_msg_store_empty/0 :: () -> 'ok').
+-spec(restart_test_queue/1 ::
+ ({'qistate',_,{dict(),[any()]},_,_,_}) ->
+ {'undefined' | number(),
+ {'qistate',_,_,_,_,_}}).
+-spec(run_cluster_dependent_tests/1 :: (atom()) -> 'passed').
+-spec(sequence_with_content/1 :: ([any()]) -> any()).
+-spec(set_permissions/2 :: (atom() | [any()],_) -> 'ok' | {'error',atom()}).
+-spec(spawn_responders/3 :: (_,_,integer()) -> [pid()]).
+-spec(test_app_management/0 :: () -> 'passed').
+-spec(test_backing_queue/0 :: () -> 'passed').
+-spec(test_bpqueue/0 :: () -> 'passed').
+-spec(test_cluster_management/0 :: () -> 'passed').
+-spec(test_cluster_management2/1 :: (atom()) -> 'passed').
+-spec(test_content_framing/0 :: () -> 'passed').
+-spec(test_content_framing/2 :: (number(),binary() | tuple()) -> 'passed').
+-spec(test_content_prop_roundtrip/2 :: ([tuple()],binary()) -> binary()).
+-spec(test_content_properties/0 :: () -> 'passed').
+-spec(test_content_transcoding/0 :: () -> 'passed').
+-spec(test_delegates_async/1 :: (atom()) -> 'passed').
+-spec(test_delegates_sync/1 :: (atom()) -> 'passed').
+-spec(test_dropwhile/1 ::
+ (_) -> {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_}).
+-spec(test_field_values/0 :: () -> 'passed').
+-spec(test_file_handle_cache/0 :: () -> 'passed').
+-spec(test_log_management/0 :: () -> 'passed').
+-spec(test_log_management_during_startup/0 :: () -> 'passed').
+-spec(test_logs_working/2 :: (atom() | [any()],atom() | [any()]) -> 'ok').
+-spec(test_msg_store/0 :: () -> 'passed').
+-spec(test_option_parser/0 :: () -> 'passed').
+-spec(test_parsing/0 :: () -> 'passed').
+-spec(test_pg_local/0 :: () -> 'passed').
+-spec(test_priority_queue/0 :: () -> 'passed').
+-spec(test_priority_queue/1 :: ({'pqueue',[any(),...]} | {'queue',[any()],[any()]}) -> {'false',boolean(),number(),[{number(),_}],[any()]} | {'true',boolean(),number(),[{number(),_}],[any()]}).
+-spec(test_queue/0 :: () -> #resource{name::binary()}).
+-spec(test_queue_index/0 :: () -> 'passed').
+-spec(test_queue_index_props/0 :: () -> 'passed').
+-spec(test_queue_recover/0 :: () -> 'passed').
+-spec(test_server_status/0 :: () -> 'passed').
+-spec(test_simple_n_element_queue/1 :: (integer()) -> 'passed').
+-spec(test_spawn/1 :: (_) -> {pid(),pid()}).
+-spec(test_statistics/0 :: () -> 'passed').
+-spec(test_statistics_event_receiver/1 ::
+ (atom() | pid() | port() | {atom(),atom()}) -> no_return()).
+-spec(test_statistics_receive_event/2 ::
+ (atom() | pid() | {atom(),_},fun((_) -> any())) -> any()).
+-spec(test_statistics_receive_event1/2 :: (_,fun((_) -> any())) -> any()).
+-spec(test_statistics_receiver/1 :: (_) -> 'ok').
+-spec(test_supervisor_delayed_restart/0 :: () -> 'passed').
+-spec(test_topic_match/2 ::
+ (maybe_improper_list(
+ binary() |
+ maybe_improper_list(any(),binary() | []) |
+ byte(),
+ binary() | []),
+ maybe_improper_list(
+ binary() |
+ maybe_improper_list(any(),binary() | []) |
+ byte(),
+ binary() | [])) ->
+ 'passed' |
+ {'topic_match_failure',
+ maybe_improper_list(
+ binary() |
+ maybe_improper_list(
+ any(),
+ binary() | []) |
+ byte(),
+ binary() |
+ []),
+ maybe_improper_list(
+ binary() |
+ maybe_improper_list(any(),binary() | []) |
+ byte(),
+ binary() | [])}).
+-spec(test_topic_match/3 ::
+ (maybe_improper_list(
+ binary() |
+ maybe_improper_list(
+ any(),
+ binary() | []) |
+ byte(),
+ binary() | []),
+ maybe_improper_list(
+ binary() |
+ maybe_improper_list(any(),binary() | []) |
+ byte(),
+ binary() | []),
+ _) ->
+ 'passed' |
+ {'topic_match_failure',
+ maybe_improper_list(
+ binary() |
+ maybe_improper_list(any(),binary() | []) |
+ byte(),
+ binary() | []),
+ maybe_improper_list(
+ binary() |
+ maybe_improper_list(any(),binary() | []) |
+ byte(),
+ binary() | [])}).
+-spec(test_topic_matching/0 :: () -> 'passed').
+-spec(test_unfold/0 :: () -> 'passed').
+-spec(test_user_management/0 :: () -> 'passed').
+-spec(test_variable_queue/0 :: () -> 'passed').
+-spec(test_variable_queue_all_the_bits_not_covered_elsewhere1/1 ::
+ (_) -> any()).
+-spec(test_variable_queue_all_the_bits_not_covered_elsewhere2/1 ::
+ ({'vqstate',_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
+ {'rates',_,_,number(),number(),_}}) ->
+ {_,_,_,
+ _,_,_,
+ _,_,_,
+ _,_,_,
+ _,_,_,
+ _,_,_,
+ _,_,_,
+ _,_}).
+-spec(test_variable_queue_dynamic_duration_change/1 ::
+ (_) -> {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_}).
+-spec(test_variable_queue_partial_segments_delta_thing/1 ::
+ (_) -> {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_}).
+-spec(variable_queue_fetch/5 ::
+ (integer(),_,_,_,_) -> {_,maybe_improper_list()}).
+-spec(variable_queue_publish/3 :: (_,integer(),_) -> any()).
+-spec(variable_queue_wait_for_shuffling_end/1 :: (_) -> any()).
+-spec(verify_read_with_published/4 :: (_,_,_,_) -> 'ko' | 'ok').
+-spec(with_empty_test_queue/1 ::
+ (fun((_) -> any())) -> {'qistate',_,'undefined','undefined',_,_}).
+-spec(with_fresh_variable_queue/1 :: (fun((_) -> any())) -> 'passed').
+-spec(with_msg_store_client/3 :: (_,_,fun((_) -> any())) -> 'ok').
+
+-endif.
+
+%%----------------------------------------------------------------------------
+
test_content_prop_roundtrip(Datum, Binary) ->
Types = [element(1, E) || E <- Datum],
Values = [element(2, E) || E <- Datum],
diff --git a/src/rabbit_writer.erl b/src/rabbit_writer.erl
index 0159609d9a..c1fb9a38b3 100644
--- a/src/rabbit_writer.erl
+++ b/src/rabbit_writer.erl
@@ -84,6 +84,9 @@
non_neg_integer(), rabbit_types:protocol())
-> 'ok').
+-spec(mainloop/2 :: (_,_) -> 'done').
+-spec(mainloop1/2 :: (_,_) -> any()).
+
-endif.
%%----------------------------------------------------------------------------
diff --git a/src/supervisor2.erl b/src/supervisor2.erl
index 46bab31ddc..12d4453024 100644
--- a/src/supervisor2.erl
+++ b/src/supervisor2.erl
@@ -100,6 +100,17 @@
-define(is_terminate_simple(State),
State#state.strategy =:= simple_one_for_one_terminate).
+%%----------------------------------------------------------------------------
+
+-ifdef(use_specs).
+
+-spec(delayed_restart/2 :: (atom() | pid() | {atom(),_},_) -> 'ok').
+-spec(find_child/2 :: (_,_) -> [any()]).
+
+-endif.
+
+%%----------------------------------------------------------------------------
+
behaviour_info(callbacks) ->
[{init,1}];
behaviour_info(_Other) ->
diff --git a/src/test_sup.erl b/src/test_sup.erl
index f41793bc89..4e25d16e29 100644
--- a/src/test_sup.erl
+++ b/src/test_sup.erl
@@ -36,6 +36,18 @@
-export([test_supervisor_delayed_restart/0,
init/1, start_child/0]).
+%%----------------------------------------------------------------------------
+
+-ifdef(use_specs).
+
+-spec(test_supervisor_delayed_restart/0 :: () -> 'passed').
+
+-endif.
+
+%%----------------------------------------------------------------------------
+%% Public API
+%%----------------------------------------------------------------------------
+
test_supervisor_delayed_restart() ->
passed = with_sup(simple_one_for_one_terminate,
fun (SupPid) ->