Skip to content

Commit

Permalink
Fixing CR issues
Browse files Browse the repository at this point in the history
  • Loading branch information
Janusz Jakubiec authored and Janusz Jakubiec committed Aug 22, 2022
1 parent 89f60bf commit 0874407
Show file tree
Hide file tree
Showing 6 changed files with 88 additions and 113 deletions.
104 changes: 32 additions & 72 deletions big_tests/tests/graphql_mnesia_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ admin_mnesia_tests() ->
change_nodename_no_file_error_test,
change_nodename_bad_file_error_test,
get_info_test,
get_all_info_test,
install_fallback_error_test,
set_master_test].

Expand Down Expand Up @@ -90,7 +91,7 @@ dump_mnesia_table_test(Config) ->
check_created_file(create_full_filename(Filename), <<"{mnesia_table_test,1,<<\"TEST\">>}">>).

dump_mnesia_table_file_error_test(Config) ->
Res = dump_mnesia_table(<<"">>, <<"vcard">>, Config),
Res = dump_mnesia_table(<<>>, <<"vcard">>, Config),
?assertEqual(<<"file_error">>, get_err_code(Res)).

dump_mnesia_table_no_table_error_test(Config) ->
Expand All @@ -108,32 +109,32 @@ dump_mnesia_test(Config) ->
check_created_file(create_full_filename(Filename), <<"{mnesia_table_test,1,<<\"TEST\">>}">>).

dump_mnesia_file_error_test(Config) ->
Res = dump_mnesia(<<"">>, Config),
Res = dump_mnesia(<<>>, Config),
?assertEqual(<<"file_error">>, get_err_code(Res)).

backup_and_restore_test(Config) ->
Filename = <<"backup_restore_mnesia_test">>,
create_vcard_table(),
write_to_vcard(),
?assert(is_record_in_a_vcard_table()),
?assert(is_record_in_vcard_table()),
Res = backup_mnesia(Filename, Config),
ParsedRes = get_ok_value([data, mnesia, backup], Res),
?assertEqual(<<"Mnesia was successfully backuped">>, ParsedRes),
?assertEqual(<<"Mnesia backup was successfully created">>, ParsedRes),
delete_record_from_table(),
?assertEqual(false, is_record_in_a_vcard_table()),
?assertEqual(false, is_record_in_vcard_table()),
Res2 = restore_mnesia(Filename, Config),
ParsedRes2 = get_ok_value([data, mnesia, restore], Res2),
?assertEqual(<<"Mnesia was successfully restored">>, ParsedRes2),
?assert(is_record_in_a_vcard_table()),
?assert(is_record_in_vcard_table()),
delete_record_from_table(),
delete_file(create_full_filename(Filename)).

backup_wrong_filename_test(Config) ->
Res = backup_mnesia(<<"">>, Config),
Res = backup_mnesia(<<>>, Config),
?assertEqual(<<"wrong_filename">>, get_err_code(Res)).

restore_no_file_test(Config) ->
Res = restore_mnesia(<<"">>, Config),
Res = restore_mnesia(<<>>, Config),
?assertEqual(<<"file_not_found">>, get_err_code(Res)).

restore_wrong_file_format_test(Config) ->
Expand All @@ -153,7 +154,7 @@ load_mnesia_test(Config) ->
?assertEqual(<<"Mnesia successfully dumped">>, ParsedRes),
delete_mnesia_table(),
check_if_response_contains(load_mnesia(Filename, Config), <<"Mnesia was successfully loaded">>),
?assert(is_record_in_a_table()),
?assert(is_record_in_table()),
delete_mnesia_table().

load_mnesia_bad_file_test(Config) ->
Expand All @@ -175,14 +176,15 @@ change_nodename_test(Config) ->
Filename2 = <<"change_nodename2_mnesia_test">>,
create_vcard_table(),
write_to_vcard(),
?assert(is_record_in_a_vcard_table()),
?assert(is_record_in_vcard_table()),
Res = backup_mnesia(Filename1, Config),
ParsedRes = get_ok_value([data, mnesia, backup], Res),
?assertEqual(<<"Mnesia was successfully backuped">>, ParsedRes),
?assertEqual(<<"Mnesia backup was successfully created">>, ParsedRes),
ChangeFrom = <<"mongooseim@localhost">>,
ChangeTo = <<"change_nodename_test@localhost">>,
Value = change_nodename(ChangeFrom, ChangeTo, Filename1, Filename2, Config),
check_if_response_contains(Value, <<"Name of the node was successfully changed">>).
check_if_response_contains(Value,
<<"Name of the node in the backup was successfully changed">>).

change_nodename_no_file_error_test(Config) ->
Filename1 = <<"non_existing">>,
Expand All @@ -202,7 +204,7 @@ change_nodename_bad_file_error_test(Config) ->
?assertEqual(<<"bad_file_format">>, get_err_code(Value)).

get_info_test(Config) ->
Res = get_info(mnesia_info_keys(), Config),
Res = get_info(maps:keys(mnesia_info_check()) ++ [<<"AAA">>], Config),
?assertEqual(<<"bad_key_error">>, get_err_code(Res)),
ParsedRes = get_err_value([data, mnesia, info], Res),
Map = mnesia_info_check(),
Expand All @@ -214,6 +216,15 @@ get_info_test(Config) ->
ok
end, ParsedRes).

get_all_info_test(Config) ->
Res = get_info([], Config),
ParsedRes = get_ok_value([data, mnesia, info], Res),
Map = mnesia_info_check(),
lists:foreach(fun (#{<<"result">> := Element, <<"key">> := Key}) ->
Fun = maps:get(Key, Map),
?assertEqual({true, Element, Key, Fun}, {?MODULE:Fun(Element), Element, Key, Fun})
end, ParsedRes).

install_fallback_error_test(Config) ->
Res = install_fallback(<<"AAAA">>, Config),
?assertEqual(<<"cannot_fallback">>, get_err_code(Res)).
Expand Down Expand Up @@ -270,12 +281,12 @@ create_vcard_table() ->
write_to_vcard() ->
rpc_call(mnesia, dirty_write, [vcard, #vcard{us = 1, vcard = <<"TEST">>}]).

is_record_in_a_table() ->
is_record_in_table() ->
Expected = [#mnesia_table_test{key = 1, name = <<"TEST">>}],
Record = rpc_call(mnesia, dirty_read, [mnesia_table_test, 1]),
Expected == Record.

is_record_in_a_vcard_table() ->
is_record_in_vcard_table() ->
Expected = [#vcard{us = 1, vcard = <<"TEST">>}],
Record = rpc_call(mnesia, dirty_read, [vcard, 1]),
Expected == Record.
Expand All @@ -290,9 +301,9 @@ create_full_filename(Filename) ->
delete_mnesia_table() ->
{atomic, ok} = rpc_call(mnesia, delete_table, [mnesia_table_test]).

check_created_file(FullPath, ExpectedInsides) ->
check_created_file(FullPath, ExpectedContent) ->
{ok, FileInsides} = file:read_file(FullPath),
?assertMatch({_,_}, binary:match(FileInsides, ExpectedInsides)),
?assertMatch({_,_}, binary:match(FileInsides, ExpectedContent)),
delete_file(FullPath).

create_file(FullPath) ->
Expand Down Expand Up @@ -370,54 +381,6 @@ domain_admin_change_nodename(ChangeFrom, ChangeTo, Source, Target, Config) ->
domain_admin_set_master(Node, Config) ->
execute_domain_admin_command(<<"mnesia">>, <<"setMaster">>, Node, Config).

mnesia_info_keys() ->
[<<"all">>,
<<"AAAA">>,
<<"access_module">>,
<<"auto_repair">>,
<<"backend_types">>,
<<"backup_module">>,
<<"checkpoints">>,
<<"db_nodes">>,
<<"debug">>,
<<"directory">>,
<<"dump_log_load_regulation">>,
<<"dump_log_time_threshold">>,
<<"dump_log_update_in_place">>,
<<"dump_log_write_threshold">>,
<<"event_module">>,
<<"extra_db_nodes">>,
<<"fallback_activated">>,
<<"held_locks">>,
<<"ignore_fallback_at_startup">>,
<<"fallback_error_function">>,
<<"is_running">>,
<<"local_tables">>,
<<"lock_queue">>,
<<"log_version">>,
<<"master_node_tables">>,
<<"max_wait_for_decision">>,
<<"protocol_version">>,
<<"running_db_nodes">>,
<<"schema_location">>,
<<"schema_version">>,
<<"subscribers">>,
<<"tables">>,
<<"transaction_commits">>,
<<"transaction_failures">>,
<<"transaction_log_writes">>,
<<"transaction_restarts">>,
<<"transactions">>,
<<"use_dir">>,
<<"core_dir">>,
<<"no_table_loaders">>,
<<"dc_dump_limit">>,
<<"send_compressed">>,
<<"max_transfer_size">>,
<<"version">>,
<<"db_nodes">>,
<<"running_db_nodes">>].

mnesia_info_check() ->
#{<<"access_module">> => check_binary,
<<"auto_repair">> => check_binary,
Expand Down Expand Up @@ -464,15 +427,12 @@ mnesia_info_check() ->
<<"db_nodes">> => check_list,
<<"running_db_nodes">> => check_list}.

check_list([]) -> true;
check_list([Head | Tail]) when is_binary(Head) -> check_list(Tail);
check_list(_) -> false.
check_list(L) ->
lists:all(fun(Item) -> is_binary(Item) end, L).

check_binary(Value) when is_binary(Value) -> true;
check_binary(_) -> false.
check_binary(Value) -> is_binary(Value).

check_integer(Value) when is_integer(Value) -> true;
check_integer(_) -> false.
check_integer(Value) -> is_integer(Value).

get_mim_cwd() ->
{ok, Cwd} = rpc(mim(), file, get_cwd, []),
Expand Down
4 changes: 2 additions & 2 deletions priv/graphql/schemas/admin/admin_schema.gql
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ type AdminQuery{
stat: StatsAdminQuery
"Personal data management according to GDPR"
gdpr: GdprAdminQuery
"Mnesia management"
"Mnesia internal database management"
mnesia: MnesiaAdminQuery
}

Expand Down Expand Up @@ -73,6 +73,6 @@ type AdminMutation @protected{
offline: OfflineAdminMutation
"OAUTH token management"
token: TokenAdminMutation
"Mnesia management"
"Mnesia internal database management"
mnesia: MnesiaAdminMutation
}
20 changes: 19 additions & 1 deletion priv/graphql/schemas/admin/mnesia.gql
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,45 @@
Allow admin to manage mnesia database
"""

"""
Allow admin to acquire information about mnesia database"
"""
type MnesiaAdminQuery @protected{
"Allow to acquire information about mnesia database"
info(keys: [String!]!): [MnesiaInfo]
@protected(type: GLOBAL)
}

"""
Allow admin to backup, dump, load, restore and modify mnesia database"
"""
type MnesiaAdminMutation @protected{
"Set mnesia's master node"
setMaster(node: String!): String
@protected(type: GLOBAL)
"""
Change nodename from 'fromString' to 'toString' in 'source'
backup file and create new 'target' backup file
"""
changeNodename(fromString: String!, toString: String!,
source: String!, target: String!): String
source: String!, target: String!): String
@protected(type: GLOBAL)
"Save mnesia backup to file 'path'"
backup(path: String!): String
@protected(type: GLOBAL)
"Restore mnesia backup from file 'path'"
restore(path: String!): String
@protected(type: GLOBAL)
"Dump mnesia to file 'path"
dump(path: String!): String
@protected(type: GLOBAL)
"Dump mnesia table 'table' to file 'path"
dumpTable(path: String!, table: String!): String
@protected(type: GLOBAL)
"Load mnesia from file 'path' that was previously dumped"
load(path: String!): String
@protected(type: GLOBAL)
"Install mnesia fallback"
installFallback(path: String!): String
@protected(type: GLOBAL)
}
Expand Down
6 changes: 3 additions & 3 deletions src/graphql/admin/mongoose_graphql_mnesia_admin_mutation.erl
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,20 @@
-include("jlib.hrl").

execute(_Ctx, mnesia, <<"setMaster">>, #{<<"node">> := Node}) ->
case mnesia_api:set_master(Node) of
case mnesia_api:set_master(binary_to_list(Node)) of
{ok, _} -> {ok, "Master node set"};
{error, Reason} -> make_error({error, Reason}, #{node => Node})
end;
execute(_Ctx, mnesia, <<"backup">>, #{<<"path">> := Path}) ->
case mnesia_api:backup_mnesia(binary_to_list(Path)) of
{ok, _} -> {ok, "Mnesia was successfully backuped"};
{ok, _} -> {ok, "Mnesia backup was successfully created"};
{error, Error} -> make_error(Error, #{path => Path})
end;
execute(_Ctx, mnesia, <<"changeNodename">>, #{<<"fromString">> := FromString,
<<"toString">> := ToString, <<"source">> := Source, <<"target">> := Target}) ->
case mnesia_api:mnesia_change_nodename(binary_to_list(FromString), binary_to_list(ToString),
binary_to_list(Source), binary_to_list(Target)) of
{ok, _} -> {ok, "Name of the node was successfully changed"};
{ok, _} -> {ok, "Name of the node in the backup was successfully changed"};
{error, Error} -> make_error(Error, #{fromString => FromString, toString => ToString,
source => Source, target => Target})
end;
Expand Down
10 changes: 4 additions & 6 deletions src/graphql/admin/mongoose_graphql_mnesia_admin_query.erl
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@

execute(_Ctx, mnesia, <<"info">>, #{<<"keys">> := Keys}) ->
ResultList = mnesia_api:mnesia_info(Keys),
{ok, lists:foldl(fun
({ok, _} = Result, Acc) ->
Acc ++ [Result];
({Error, Map}, Acc) ->
Acc ++ [make_error(Error, Map)]
end, [], ResultList)}.
{ok, lists:map(fun process_result/1, ResultList)}.

process_result({ok, _} = Result) -> Result;
process_result({Error, Map}) -> make_error(Error, Map).
Loading

0 comments on commit 0874407

Please sign in to comment.