#!/usr/share/ucs-test/runner python3
## desc: Check the preinst script
## tags: [docker]
## exposure: dangerous
## packages:
##   - docker.io

import subprocess
from dockertest import Appcenter, get_app_name, get_app_version, tiny_app, UCSTest_DockerApp_VerifyFailed, UCSTest_DockerApp_InstallationFailed


def create_app(fail_in_preinst):
		app_name = get_app_name()
		app_version = get_app_version()

		app = tiny_app(app_name, app_version)
		try:
			app.add_script(preinst='''#!/bin/bash
set -x -e
echo "Test preinst script"
if [ "%(exit_code)d" = "0" ]; then
	ucr set appcenter/apps/%(app_name)s/docker/params="-e FOO=bar -e repository_app_center_server=my.server"
fi
exit %(exit_code)d
''' % {'exit_code': (1 if fail_in_preinst else 0), 'app_name': app_name})

			app.add_to_local_appcenter()

			appcenter.update()

			try:
				app.install()
				app.verify(joined=False)
			except (UCSTest_DockerApp_VerifyFailed, UCSTest_DockerApp_InstallationFailed):
				if not fail_in_preinst:
					raise
			else:
				if fail_in_preinst:
					raise ValueError('Should not have been installed!')
				else:
					output = subprocess.check_output('univention-app shell %s env' % app_name, shell=True, text=True)
					if 'FOO=bar' not in output or 'repository_app_center_server=my.server' not in output:
						raise ValueError('Setting docker/params does not work')

		finally:
			app.uninstall()
			app.remove()


if __name__ == '__main__':
	with Appcenter() as appcenter:
		create_app(fail_in_preinst=False)
		create_app(fail_in_preinst=True)
