#!/bin/sh
#
# msmtp-scripts test framework
#
#    Copyright (C) 2019 Daniel F. Dickinson <cshored@thecshore.com>
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
#

set -e

if [ ! -x /bin/sh ]; then
	echo "CRITICAL: /bin/sh is required for msmtp-scripts"
	exit 1
fi

rm -rf ./tmp
mkdir -p ./tmp/msmtp.queue || exit 2
mkdir -p ./tmp/msmtp.lock || exit 2

cp ./tests/config/msmtpq-ng.rc ./tmp/msmtpq-ng.rc
cp ./tests/config/msmtpq-ng-real.rc ./tmp/msmtpq-ng-real.rc
cp ./tests/config/msmtpq-ng-lock-fail.rc ./tmp/msmtpq-ng-lock-fail.rc
cp ./tests/config/msmtpq-ng-missing-ng.rc ./tmp/msmtpq-ng-missing-ng.rc
cp ./tests/config/msmtpq-ng-queueonly.rc ./tmp/msmtpq-ng-queueonly.rc
cp ./tests/config/msmtpq-ng-queueonly-syslog.rc ./tmp/msmtpq-ng-queueonly-syslog.rc
cp ./tests/config/msmtpq-ng-no-log.rc ./tmp/msmtpq-ng-no-log.rc
cp ./tests/config/msmtpq-ng-no-msmtp.rc ./tmp/msmtpq-ng-no-msmtp.rc
cp ./tests/config/msmtpq-ng-new-qdir.rc ./tmp/msmtpq-ng-new-qdir.rc
cp ./tests/config/msmtpq-ng-ping-con.rc ./tmp/msmtpq-ng-ping-con.rc
cp ./tests/config/msmtpq-ng-nc-con.rc ./tmp/msmtpq-ng-nc-con.rc
cp ./tests/config/msmtpq-ng-no-con.rc ./tmp/msmtpq-ng-no-con.rc
cp ./tests/config/msmtpq-ng-nc-fail.rc ./tmp/msmtpq-ng-nc-fail.rc
cp ./tests/config/msmtpq-ng-new-lockdir.rc ./tmp/msmtpq-ng-new-lockdir.rc
cp ./tests/config/msmtpq-ng-flock.rc ./tmp/msmtpq-ng-flock.rc
cp ./tests/config/msmtpq-ng-missing-lock.rc ./tmp/msmtpq-ng-missing-lock.rc
cp ./tests/config/msmtpq-fail.rc ./tmp/msmtpq-fail.rc
cp ./tests/config/msmtpq-fail-code.rc ./tmp/msmtpq-fail-code.rc
cp ./tests/config/msmtpq-fail-code-smtpd.rc ./tmp/msmtpq-fail-code-smtpd.rc
cp ./tests/config/msmtpq-no-recip.rc ./tmp/msmtpq-no-recip.rc
cp ./tests/config/msmtpq-no-recip-ignore.rc ./tmp/msmtpq-no-recip-ignore.rc
cp ./tests/config/msmtpq-multiqueue.rc ./tmp/msmtpq-multiqueue.rc
cp ./tests/config/msmtpq-ng-msmtprc ./tmp/.msmtprc
cp ./tests/config/test-send-to-localhost ./tmp/dot_msmtprc
chmod go-rwx ./tmp/dot_msmtprc
chmod go-rwx ./tmp/.msmtprc

if ! getent passwd | grep -q '^msmtp:'; then
	sudo useradd -U msmtp || true
fi

if ! getent group | grep -q '^msmtp:'; then
	sudo groupadd msmtp
fi

if ! groups $USER | grep -q msmtp; then
	sudo usermod -a -G msmtp $USER
fi

if ! groups root | grep -q msmtp; then
	sudo usermod -a -G msmtp root
fi

if ! groups msmtp | grep -q msmtp; then
	sudo usermod -a -G msmtp msmtp
fi

sudo rm -rf /var/spool/msmtp
sudo rm -rf /var/lock/msmtp
sudo mkdir -p /var/lock/msmtp
sudo chgrp msmtp /var/lock/msmtp
sudo chmod 1777 /var/lock/msmtp
sudo mkdir -p /var/spool/msmtp
sudo chgrp msmtp /var/spool/msmtp
sudo chmod 1777 /var/spool/msmtp
sudo /bin/cp ./tests/config/msmtpq-ng-mta-test.rc /etc/msmtpq-ng-mta.rc
sudo mkdir -p /tmp/msmtp-test
sudo chown msmtp:msmtp /tmp/msmtp-test
sudo cp ./tests/scripts/fake-flock /usr/local/bin/fake-flock
sudo cp ./tests/scripts/flock /opt/flock
sudo cp ./tests/scripts/lock-fail /usr/local/bin/lock-fail
sudo /bin/cp src/usr/bin/msmtpq-ng /usr/bin/
sudo /bin/cp src/usr/bin/msmtpq-ng-queue /usr/bin/
sudo /bin/cp src/usr/sbin/msmtpq-ng-mta /usr/sbin/
sudo /bin/cp src/usr/sbin/msmtpq-ng-queue-mta /usr/sbin/
sudo ln -sf /usr/sbin/msmtpq-ng-mta /usr/sbin/sendmail
sudo ln -sf /usr/sbin/msmtpq-ng-queue-mta /usr/sbin/postsuper
sudo ln -sf /usr/sbin/msmtpq-ng-queue-mta /usr/bin/mailq
sudo ln -sf /usr/sbin/msmtpq-ng-queue-mta /usr/sbin/postqueue
sudo rm -rf /tmp/kcov-sendmail
sudo mkdir -p /tmp/kcov-sendmail
sudo chown msmtp:msmtp /tmp/kcov-sendmail
sudo cp ./tests/config/test-sendmail-bs-msmtprc /etc/msmtprc
sudo cp ./tests/config/sendmail-bs-kcov-wrapper /usr/local/sbin/sendmail-bs-kcov-wrapper
sudo /bin/cp ./tests/config/sendmail-bs-kcov-wrapper.service /etc/systemd/system/sendmail-bs-kcov-wrapper.service
sudo systemctl daemon-reload
sudo systemctl restart sendmail-bs-kcov-wrapper

echo "PASS: Prepared test environment"
