#!/bin/sh
set -e

TESTDIR="$(readlink -f "$(dirname "$0")")"
. "$TESTDIR/framework"
setupenvironment
configarchitecture 'amd64' 'i386'

insertinstalledpackage 'pkg-native' 'amd64' '1' 'Multi-Arch: foreign
Essential: yes'
insertinstalledpackage 'pkg-foreign' 'i386' '1' 'Multi-Arch: foreign
Essential: yes'
insertinstalledpackage 'pkg-none-native' 'amd64' '1' 'Essential: yes'
insertinstalledpackage 'pkg-none-foreign' 'i386' '1' 'Essential: yes'

insertpackage 'unstable' 'pkg-native' 'amd64,i386' '2' 'Multi-Arch: foreign
Essential: yes'
insertpackage 'unstable' 'pkg-foreign' 'amd64,i386' '2' 'Multi-Arch: foreign
Depends: pkg-depends-new
Essential: yes'
insertpackage 'unstable' 'pkg-none-native' 'amd64,i386' '2' 'Essential: yes'
insertpackage 'unstable' 'pkg-none-foreign' 'amd64,i386' '2' 'Essential: yes
Depends: pkg-depends-new'

insertpackage 'unstable' 'pkg-none-new' 'amd64,i386' '2' 'Essential: yes'
insertpackage 'unstable' 'pkg-depends-new' 'amd64,i386' '2' 'Essential: yes'

setupaptarchive

testsuccessequal 'Reading package lists...
Building dependency tree...
The following packages will be REMOVED:
  pkg-native*
WARNING: The following essential packages will be removed.
This should NOT be done unless you know exactly what you are doing!
  pkg-native
0 upgraded, 0 newly installed, 1 to remove and 3 not upgraded.
Purg pkg-native [1]' aptget purge pkg-native -s

testsuccessequal 'Reading package lists...
Building dependency tree...
The following packages will be REMOVED:
  pkg-foreign:i386*
WARNING: The following essential packages will be removed.
This should NOT be done unless you know exactly what you are doing!
  pkg-foreign:i386
0 upgraded, 0 newly installed, 1 to remove and 3 not upgraded.
Purg pkg-foreign:i386 [1]' aptget purge pkg-foreign:i386 -s

testsuccessequal 'Reading package lists...
Building dependency tree...
The following packages will be REMOVED:
  pkg-none-native*
WARNING: The following essential packages will be removed.
This should NOT be done unless you know exactly what you are doing!
  pkg-none-native
0 upgraded, 0 newly installed, 1 to remove and 3 not upgraded.
Purg pkg-none-native [1]' aptget purge pkg-none-native -s

testsuccessequal 'Reading package lists...
Building dependency tree...
The following packages will be REMOVED:
  pkg-none-foreign:i386*
WARNING: The following essential packages will be removed.
This should NOT be done unless you know exactly what you are doing!
  pkg-none-foreign:i386
0 upgraded, 0 newly installed, 1 to remove and 3 not upgraded.
Purg pkg-none-foreign:i386 [1]' aptget purge pkg-none-foreign:i386 -s

testsuccessequal 'Reading package lists...
Building dependency tree...
Calculating upgrade...
The following NEW packages will be installed:
  pkg-depends-new:i386 pkg-none-new
The following packages will be upgraded:
  pkg-foreign:i386 pkg-native pkg-none-foreign:i386 pkg-none-native
4 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst pkg-depends-new:i386 (2 unstable [i386])
Conf pkg-depends-new:i386 (2 unstable [i386])
Inst pkg-foreign:i386 [1] (2 unstable [i386])
Conf pkg-foreign:i386 (2 unstable [i386])
Inst pkg-native [1] (2 unstable [amd64])
Conf pkg-native (2 unstable [amd64])
Inst pkg-none-foreign:i386 [1] (2 unstable [i386])
Conf pkg-none-foreign:i386 (2 unstable [i386])
Inst pkg-none-native [1] (2 unstable [amd64])
Conf pkg-none-native (2 unstable [amd64])
Inst pkg-none-new (2 unstable [amd64])
Conf pkg-none-new (2 unstable [amd64])' aptget dist-upgrade -s

insertinstalledpackage 'foo' 'amd64' '1' 'Depends: libfoo
Essential: yes'
insertinstalledpackage 'libfoo' 'amd64' '1'
testequal 'Reading package lists...
Building dependency tree...
The following packages will be REMOVED:
  foo* libfoo*
WARNING: The following essential packages will be removed.
This should NOT be done unless you know exactly what you are doing!
  foo libfoo (due to foo)
0 upgraded, 0 newly installed, 2 to remove and 4 not upgraded.
Purg foo [1]
Purg libfoo [1]' aptget purge foo libfoo -s

testequal 'Reading package lists...
Building dependency tree...
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 foo : Depends: libfoo but it is not going to be installed
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.' aptget purge libfoo -s --solver internal

testfailureequal 'Reading package lists...
Building dependency tree...
Solving dependencies...
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 foo : Depends: libfoo but it is not going to be installed
E: Unable to satisfy dependencies. Reached two conflicting decisions:
   1. libfoo:amd64 is selected for removal
   2. libfoo:amd64 is selected for install because:
      1. foo:amd64 is selected for install
      2. foo:amd64 Depends libfoo' aptget purge libfoo -s --solver 3.0
