use base "installedtest"; use strict; use testapi; use lockapi; use mmapi; use tapnet; use utils; sub run { my $self = shift; # use compose repo, disable u-t, etc. repo_setup(); # deploy postgres directly ourselves. first, install packages... assert_script_run 'dnf -y install postgresql-server postgresql-contrib', 300; # configure the firewall assert_script_run "firewall-cmd --permanent --add-service postgresql"; assert_script_run "systemctl restart firewalld.service"; # init the db if (script_run "/usr/bin/postgresql-setup --initdb") { # see if this is RHBZ #1872511... script_run "rm -rf /var/lib/pgsql/data/*"; script_run "dnf -y install glibc-langpack-en", 180; assert_script_run "/usr/bin/postgresql-setup --initdb"; record_soft_failure "postgresql-setup initially failed due to missing langpack - RHBZ #1872511"; } # enable and start the systemd service assert_script_run "systemctl enable postgresql.service"; assert_script_run "systemctl start postgresql.service"; # create the owner assert_script_run 'su postgres -c "/usr/bin/createuser openqa"'; # create the database assert_script_run 'su postgres -c "/usr/bin/createdb openqa -O openqa"'; # set the password. oh, god, the quotes. THE QUOTES. trying to # get four layers of nested quotes properly escaped through # perl, bash and postgres is futile, so we write the command # to a file and call psql on the file assert_script_run 'echo "ALTER ROLE openqa WITH PASSWORD \'correcthorse\'" > /tmp/cmd'; assert_script_run 'su postgres -c "psql openqa -f /tmp/cmd"'; # adjust postgresql.conf to allow network connections; sloppy # version of how rolekit did it assert_script_run 'sed -i -e "s,.*listen_addresses *=.*,listen_addresses=\'*\',g" /var/lib/pgsql/data/postgresql.conf'; # check that worked... upload_logs "/var/lib/pgsql/data/postgresql.conf"; # adjust pg_hba.conf to use md5 authentication; sloppy version # of how rolekit did it assert_script_run 'sed -i -e "s,^host,#host,g" /var/lib/pgsql/data/pg_hba.conf'; assert_script_run 'echo "host all all all md5" >> /var/lib/pgsql/data/pg_hba.conf'; # check that worked... upload_logs "/var/lib/pgsql/data/pg_hba.conf"; # restart the service assert_script_run "systemctl restart postgresql.service"; # check we can connect to the database and create a table assert_script_run 'su postgres -c "psql openqa -c \'CREATE TABLE test (testcol int);\'"'; # check we can add a row to the table assert_script_run 'su postgres -c "psql openqa -c \'INSERT INTO test VALUES (5);\'"'; # check we can query the table validate_script_output 'su postgres -c "psql openqa -c \'SELECT * FROM test;\'"', sub { $_ =~ m/^ *testcol.*5.*1 row/s }; # check we can modify the row assert_script_run 'su postgres -c "psql openqa -c \'UPDATE test SET testcol = 50 WHERE testcol = 5;\'"'; validate_script_output 'su postgres -c "psql openqa -c \'SELECT * FROM test;\'"', sub { $_ =~ m/^ *testcol.*50.*1 row/s }; # we're all ready for other jobs to run! mutex_create('db_ready'); wait_for_children; # once child jobs are done, decommission the server a bit assert_script_run 'su postgres -c "/usr/bin/dropdb -w --if-exists openqa"'; assert_script_run 'su postgres -c "/usr/bin/dropuser -w --if-exists openqa"'; # stop the server assert_script_run 'systemctl stop postgresql.service'; # check server is stopped assert_script_run '! systemctl is-active postgresql.service'; # FIXME check server is decommissioned...how? } sub test_flags { return {fatal => 1}; } 1; # vim: set sw=4 et: