From c54e3c6bd871a03c634808b1abae6ebc6d375c0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Wojtasik?= Date: Fri, 29 Apr 2022 12:12:06 +0200 Subject: [PATCH] Add tests for domain password management in mongoose_domain_admin Minor changes: - rename "domain_admin" table to "domain_admins", - fix password update operation. --- big_tests/tests/service_domain_db_SUITE.erl | 58 +++++++++++++++++++++ priv/mssql2012.sql | 2 +- priv/mysql.sql | 2 +- priv/pg.sql | 2 +- src/domain/mongoose_domain_sql.erl | 23 ++++---- 5 files changed, 74 insertions(+), 13 deletions(-) diff --git a/big_tests/tests/service_domain_db_SUITE.erl b/big_tests/tests/service_domain_db_SUITE.erl index 9ded7d72ce1..5d23dbc1b90 100644 --- a/big_tests/tests/service_domain_db_SUITE.erl +++ b/big_tests/tests/service_domain_db_SUITE.erl @@ -70,6 +70,12 @@ db_cases() -> [ db_cannot_enable_domain_with_unknown_host_type, db_cannot_disable_domain_with_unknown_host_type, db_domains_with_unknown_host_type_are_ignored_by_core, + db_can_insert_update_delete_dynamic_domain_password, + db_can_insert_update_delete_static_domain_password, + db_cannot_set_password_for_unknown_domain, + db_can_check_domain_password, + db_cannot_check_password_for_unknown_domain, + db_deleting_domain_deletes_domain_admin, sql_select_from, sql_find_gaps_between, db_records_are_restored_on_mim_restart, @@ -451,6 +457,46 @@ db_domains_with_unknown_host_type_are_ignored_by_core(_) -> {ok, <<"type1">>} = get_host_type(mim(), <<"example.org">>), %% Counter-case {error, not_found} = get_host_type(mim(), <<"example.com">>). +db_can_insert_update_delete_dynamic_domain_password(_) -> + Domain = <<"password-example.com">>, + ok = insert_domain(mim(), Domain, <<"type1">>), + sync(), + ok = set_domain_password(mim(), Domain, <<"rocky1">>), + ok = check_domain_password(mim(), Domain, <<"rocky1">>), + ok = set_domain_password(mim(), Domain, <<"rocky2">>), + ok = check_domain_password(mim(), Domain, <<"rocky2">>), + ok = delete_domain_password(mim(), Domain), + {error, not_found} = select_domain_admin(mim(), Domain). + +db_can_insert_update_delete_static_domain_password(_) -> + StaticDomain = <<"example.cfg">>, + ok = set_domain_password(mim(), StaticDomain, <<"rocky1">>), + ok = check_domain_password(mim(), StaticDomain, <<"rocky1">>), + ok = set_domain_password(mim(), StaticDomain, <<"rocky2">>), + ok = check_domain_password(mim(), StaticDomain, <<"rocky2">>), + ok = delete_domain_password(mim(), StaticDomain), + {error, not_found} = select_domain_admin(mim(), StaticDomain). + +db_cannot_set_password_for_unknown_domain(_) -> + {error, not_found} = set_domain_password(mim(), <<"unknown_domain">>, <<>>). + +db_can_check_domain_password(_) -> + StaticDomain = <<"example.cfg">>, + ok = set_domain_password(mim(), StaticDomain, <<"myrock">>), + ok = check_domain_password(mim(), StaticDomain, <<"myrock">>), + {error, wrong_password} = check_domain_password(mim(), StaticDomain, <<"wrongrock">>). + +db_cannot_check_password_for_unknown_domain(_) -> + {error, not_found} = check_domain_password(mim(), <<"unknown_domain">>, <<>>). + +db_deleting_domain_deletes_domain_admin(_) -> + Domain = <<"password-del-example.db">>, + ok = insert_domain(mim(), Domain, <<"type1">>), + sync(), + ok = set_domain_password(mim(), Domain, <<"deleteme">>), + ok = delete_domain(mim(), Domain, <<"type1">>), + {error, not_found} = select_domain_admin(mim(), Domain). + sql_select_from(_) -> ok = insert_domain(mim(), <<"example.db">>, <<"type1">>), [{_, <<"example.db">>, <<"type1">>}] = @@ -1065,6 +1111,18 @@ delete_domain(Node, Domain, HostType) -> select_domain(Node, Domain) -> rpc(Node, mongoose_domain_sql, select_domain, [Domain]). +check_domain_password(Node, Domain, Password) -> + rpc(Node, mongoose_domain_api, check_domain_password, [Domain, Password]). + +set_domain_password(Node, Domain, Password) -> + rpc(Node, mongoose_domain_api, set_domain_password, [Domain, Password]). + +delete_domain_password(Node, Domain) -> + rpc(Node, mongoose_domain_api, delete_domain_password, [Domain]). + +select_domain_admin(Node, Domain) -> + rpc(Node, mongoose_domain_sql, select_domain_admin, [Domain]). + insert_full_event(Node, EventId, Domain) -> rpc(Node, mongoose_domain_sql, insert_full_event, [EventId, Domain]). diff --git a/priv/mssql2012.sql b/priv/mssql2012.sql index 6ff811e3295..447748a1ed2 100644 --- a/priv/mssql2012.sql +++ b/priv/mssql2012.sql @@ -730,7 +730,7 @@ CREATE TABLE offline_markers ( CREATE INDEX i_offline_markers ON offline_markers(jid); -CREATE TABLE domain_admin( +CREATE TABLE domain_admins( domain VARCHAR(250) NOT NULL PRIMARY KEY, password VARCHAR(250) NOT NULL ); diff --git a/priv/mysql.sql b/priv/mysql.sql index 8cdc2939d89..052858f980f 100644 --- a/priv/mysql.sql +++ b/priv/mysql.sql @@ -521,7 +521,7 @@ CREATE TABLE offline_markers ( CREATE INDEX i_offline_markers ON offline_markers(jid); -CREATE TABLE domain_admin( +CREATE TABLE domain_admins( domain VARCHAR(250) NOT NULL, password VARCHAR(250) NOT NULL, PRIMARY KEY(domain) diff --git a/priv/pg.sql b/priv/pg.sql index 5a11cbdc563..f10892d17f8 100644 --- a/priv/pg.sql +++ b/priv/pg.sql @@ -478,7 +478,7 @@ CREATE TABLE offline_markers ( CREATE INDEX i_offline_markers ON offline_markers(jid); -CREATE TABLE domain_admin( +CREATE TABLE domain_admins( domain VARCHAR(250) NOT NULL, password VARCHAR(250) NOT NULL, PRIMARY KEY(domain) diff --git a/src/domain/mongoose_domain_sql.erl b/src/domain/mongoose_domain_sql.erl index b4594d95370..631fff72525 100644 --- a/src/domain/mongoose_domain_sql.erl +++ b/src/domain/mongoose_domain_sql.erl @@ -85,21 +85,23 @@ start(#{db_pool := Pool}) -> " WHERE domain_events.id >= ? AND domain_events.id <= ? " " ORDER BY domain_events.id ">>), %% Admins - prepare(domain_insert_admin, domain_admin, [domain, password], - <<"INSERT INTO domain_admin (domain, password) VALUES (?, ?)">>), - prepare(domain_update_admin, domain_admin, [password, domain], - <<"UPDATE domain_admin" + prepare(domain_insert_admin, domain_admins, [domain, password], + <<"INSERT INTO domain_admins (domain, password) VALUES (?, ?)">>), + prepare(domain_update_admin, domain_admins, [password, domain], + <<"UPDATE domain_admins" " SET password = ? " " WHERE domain = ?">>), - prepare(domain_delete_admin, domain_admin, [domain], - <<"DELETE FROM domain_admin WHERE domain = ?">>), - prepare(domain_select_admin, domain_admin, [domain], + prepare(domain_delete_admin, domain_admins, [domain], + <<"DELETE FROM domain_admins WHERE domain = ?">>), + prepare(domain_select_admin, domain_admins, [domain], <<"SELECT domain, password" - " FROM domain_admin WHERE domain = ?">>), + " FROM domain_admins WHERE domain = ?">>), ok. prepare_test_queries(Pool) -> True = sql_true(Pool), + prepare(domain_erase_admins, domain_admins, [], + <<"DELETE FROM domain_admins">>), prepare(domain_erase_settings, domain_settings, [], <<"DELETE FROM domain_settings">>), prepare(domain_erase_events, domain_events, [], @@ -200,7 +202,7 @@ insert_domain_admin(Pool, Domain, Password) -> execute_successfully(Pool, domain_insert_admin, [Domain, Password]). update_domain_admin(Pool, Domain, Password) -> - execute_successfully(Pool, domain_update_admin, [Domain, Password]). + execute_successfully(Pool, domain_update_admin, [Password, Domain]). delete_domain_admin(Pool, Domain) -> execute_successfully(Pool, domain_delete_admin, [Domain]). @@ -287,7 +289,8 @@ insert_full_event_mssql(EventId, Domain) -> erase_database(Pool) -> execute_successfully(Pool, domain_erase_events, []), - execute_successfully(Pool, domain_erase_settings, []). + execute_successfully(Pool, domain_erase_settings, []), + execute_successfully(Pool, domain_erase_admins, []). insert_domain_settings_without_event(Domain, HostType) -> Pool = get_db_pool(),