diff options
| -rw-r--r-- | src/gen_server2.erl | 57 | ||||
| -rw-r--r-- | src/rabbit.erl | 9 | ||||
| -rw-r--r-- | src/rabbit_amqqueue.erl | 2 | ||||
| -rw-r--r-- | src/rabbit_amqqueue_process.erl | 10 | ||||
| -rw-r--r-- | src/rabbit_framing_channel.erl | 10 | ||||
| -rw-r--r-- | src/rabbit_log.erl | 2 | ||||
| -rw-r--r-- | src/rabbit_mnesia.erl | 2 | ||||
| -rw-r--r-- | src/rabbit_networking.erl | 22 | ||||
| -rw-r--r-- | src/rabbit_reader.erl | 16 | ||||
| -rw-r--r-- | src/rabbit_tests.erl | 228 | ||||
| -rw-r--r-- | src/rabbit_writer.erl | 3 | ||||
| -rw-r--r-- | src/supervisor2.erl | 11 | ||||
| -rw-r--r-- | src/test_sup.erl | 12 |
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) -> |
