#!/bin/sh
# Make sure to call this script from the root of the dbconfig-common tree

set -e

FRONTENDS="noninteractive-defaults noninteractive readline"
export DEBCONF_DEBUG=developer
export dbc_debug=true

preseed(){
    # Maybe a bug in debconf (but not bug 779920) or in dbconfig-common
    /usr/share/debconf/fix_db.pl 2> /dev/null

    if [ $PRESEED = true ] ; then
        echo
        echo CI: preseeding $PACKAGE
        echo $PACKAGE ${PACKAGE}/dbconfig-install boolean true          | debconf-set-selections
        # In pbuilder env, installation fails, so don't try during upgrade
        echo $PACKAGE ${PACKAGE}/dbconfig-upgrade boolean true          | debconf-set-selections
        if [ "$PACKAGE" = db-test-pgsql-migration ] && \
               [ "$(dpkg-query -W -f'${db:Status-Status}' $PACKAGE 2>/dev/null)" = installed ] ; then
            # After migration, the host is bogus and thus not reachable
            echo $PACKAGE ${PACKAGE}/dbconfig-remove boolean false      | debconf-set-selections
        else
            # SQLite stores the db on file, which can always be removed
            # With MySQL/PostgreSQL in a pbuilder env, installation fails, so
            # you should inverse the next line
            echo $PACKAGE ${PACKAGE}/dbconfig-remove boolean true       | debconf-set-selections
        fi
        # Next line isn't honored of course
        # echo $PACKAGE ${PACKAGE}/install-error select ignore            | debconf-set-selections
        echo $PACKAGE ${PACKAGE}/mysql/app-pass password blabla         | debconf-set-selections
        echo $PACKAGE ${PACKAGE}/pgsql/app-pass password blabla         | debconf-set-selections
        if [ "$PACKAGE" = db-test-multidbtype ] ; then
            echo $PACKAGE ${PACKAGE}/database-type string mysql         | debconf-set-selections
        fi
        echo $PACKAGE ${PACKAGE}/remote/host string localhost           | debconf-set-selections

        echo
        echo CI: debconf state:
        debconf-show $PACKAGE
    fi
}

install_and_purge(){
    CONF=/etc/dbconfig-common/${PACKAGE}.conf
    echo
    echo CI: install_and_purge ${PACKAGE}
    if [ ! -f ${PACKAGE}_2.0_all.deb ] ; then
        ./buildpackages.sh
    fi
    preseed
    echo CI: dpkg -i ${PACKAGE} \# 2.0
    dpkg -i ${PACKAGE}_2.0_all.deb
    if [ -f $CONF ] ; then
        echo
        echo Content of dbc configuration file for $PACKAGE:
        egrep "^dbc_" $CONF || true
    fi
    echo
    # Preseeding purge does not work during install because dbc will think
    # it is a reinstallation
    echo $PACKAGE ${PACKAGE}/purge boolean true                     | debconf-set-selections
    preseed
    echo CI: apt-get purge ${PACKAGE}
    apt-get purge -y ${PACKAGE}

    if [ -f $CONF ] ; then
        echo
        echo dbc configuration file for $PACKAGE still exists, which is wrong
        exit 1
    fi
}

cd examples

for FRONTEND in $FRONTENDS ; do
    if [ "${FRONTEND#*-}" = defaults ] ; then
        PRESEED=false
        FRONTEND=${FRONTEND%-*}
    else
        PRESEED=true
    fi
    export DEBIAN_FRONTEND=$FRONTEND

    echo
    echo
    echo "Now running installation with DEBIAN_FRONTEND=$FRONTEND and preseeding=$PRESEED"
    echo

    PACKAGE=db-test-multidbtype
    install_and_purge

    PACKAGE=db-test-mysql-frontend
    install_and_purge

    PACKAGE=db-test-mysql-perl
    install_and_purge

    PACKAGE=db-test-mysql
    install_and_purge

    preseed
    echo CI: dpkg -i ${PACKAGE} \# 2.0
    dpkg -i ${PACKAGE}_2.0_all.deb
    preseed
    echo CI: dpkg -i ${PACKAGE} \# 2.1
    dpkg -i ${PACKAGE}_2.1_all.deb
    echo $PACKAGE ${PACKAGE}/purge boolean true                     | debconf-set-selections
    preseed
    echo CI: apt-get purge ${PACKAGE}
    apt-get purge -y ${PACKAGE}

    preseed
    echo CI: dpkg -i ${PACKAGE} \# 2.1
    dpkg -i ${PACKAGE}_2.1_all.deb
    echo $PACKAGE ${PACKAGE}/purge boolean true                     | debconf-set-selections
    preseed
    echo CI: apt-get purge ${PACKAGE}
    apt-get purge -y ${PACKAGE}

    PACKAGE=db-test-pgsql-migration
    preseed
    echo CI: dpkg -i ${PACKAGE} \# 1.9
    dpkg -i ${PACKAGE}_1.9_all.deb
    preseed
    echo CI: apt-get purge ${PACKAGE}
    apt-get purge -y ${PACKAGE}
    preseed
    echo CI: dpkg -i ${PACKAGE} \# 1.9
    dpkg -i ${PACKAGE}_1.9_all.deb
    preseed
    echo CI: dpkg -i ${PACKAGE} \# 2.0
    dpkg -i ${PACKAGE}_2.0_all.deb
    echo $PACKAGE ${PACKAGE}/purge boolean true                     | debconf-set-selections
    preseed
    echo CI: apt-get purge ${PACKAGE}
    apt-get purge -y ${PACKAGE}
    install_and_purge

    PACKAGE=db-test-pgsql
    install_and_purge

    PACKAGE=db-test-sqlite
    install_and_purge

    PACKAGE=db-test-sqlite3
    install_and_purge
done
