diff --git a/roles/database_server/tests/test_default.py b/roles/database_server/tests/test_default.py new file mode 100644 index 0000000000000000000000000000000000000000..65d3ad3533f317c9e10751a693e110526ab1e2a4 --- /dev/null +++ b/roles/database_server/tests/test_default.py @@ -0,0 +1,109 @@ +import testinfra.utils.ansible_runner + +testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( + '.molecule/ansible_inventory').get_hosts('all') + + +def test_installed_packages(Package): + """ + Tests if the correct packages have been installed. + """ + + assert Package('mariadb-client').is_installed + assert Package('mariadb-server').is_installed + assert Package('python-mysqldb').is_installed + + +def test_service(Service): + """ + Tests if the database server service is enabled on boot and running. + """ + + service = Service('mysql') + + assert service.is_enabled + assert service.is_running + + +def test_root_password(Command): + """ + Tests if the root password has been set correctly. + """ + + login = Command("mysql -uroot -proot_password -BNe 'show databases'") + + assert login.rc == 0 + assert "information_schema" in login.stdout + assert "mysql" in login.stdout + assert "performance_schema" in login.stdout + + +def test_root_my_cnf(File, Sudo): + """ + Tests if the root my.cnf configuration has been set-up with correct + user/password and permissions. + """ + + with Sudo(): + + my_cnf = File('/root/.my.cnf') + + assert my_cnf.is_file + assert my_cnf.user == 'root' + assert my_cnf.group == 'root' + assert my_cnf.mode == 0o400 + assert "user=root" in my_cnf.content + assert "password=root_password" in my_cnf.content + + +def test_root_my_cnf_login(Command, Sudo): + """ + Tets if the database server root login works using just the my.cnf + configuration file. + """ + + with Sudo(): + + login = Command("mysql -BNe 'show databases'") + + assert "information_schema" in login.stdout + assert "mysql" in login.stdout + assert "performance_schema" in login.stdout + + +def test_utf8_configuration_file(File): + """ + Tests if UTF-8 database server configuration file has been deployed + correctly. + """ + + config = File('/etc/mysql/conf.d/utf8.cnf') + + assert config.is_file + assert config.user == 'root' + assert config.group == 'root' + assert config.mode == 0o644 + + +def test_utf8_configuration(Command): + """ + Tests if UTF-8 configuration has been applied correctly to server. + """ + + assert Command("mysql -uroot -proot_password -BNe 'drop database if exists test'").rc == 0 + assert Command("mysql -uroot -proot_password -BNe 'create database test'").rc == 0 + + check_server = Command("mysql -uroot -proot_password test -BNe 'select @@character_set_server; select @@collation_server'") + + assert check_server.rc == 0 + assert check_server.stdout == "utf8\nutf8_general_ci" + + check_database = Command("mysql -uroot -proot_password test -BNe 'select @@character_set_database; select @@collation_database'") + + assert check_database.rc == 0 + assert check_database.stdout == "utf8\nutf8_general_ci" + + check_database = Command("mysql -uroot -proot_password -BNe 'select @@character_set_connection; select @@collation_connection'") + + assert check_database.rc == 0 + assert check_database.stdout == "utf8\nutf8_general_ci"