#!/bin/sh
set -e

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

buildsimplenativepackage 'peace-dpkg' 'all' '1.0' 'stable'

buildsimplenativepackage 'libc6' 'i386' '1.0' 'stable'
buildsimplenativepackage 'libc6' 'amd64' '1.0' 'stable'
buildsimplenativepackage 'libc6' 'all' '2.0' 'testing'

buildsimplenativepackage 'foobar' 'i386' '1.0' 'stable' 'Depends: libc6'
buildsimplenativepackage 'foobar' 'amd64' '1.0' 'stable' 'Depends: libc6'

setupaptarchive

aptget install peace-dpkg:i386 -y -qq 2>&1 > /dev/null
testdpkginstalled peace-dpkg

aptget install libc6:i386 -t stable -y -qq 2>&1 > /dev/null
testdpkginstalled libc6
testequal 'Reading package lists...
Building dependency tree...
Reading state information...
The following packages will be REMOVED:
  libc6
The following NEW packages will be installed:
  libc6:amd64
0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
Remv libc6 [1.0]
Inst libc6:amd64 (1.0 stable [amd64])
Conf libc6:amd64 (1.0 stable [amd64])' aptget install libc6:amd64 -s -t stable

testequal 'Reading package lists...
Building dependency tree...
Reading state information...
The following NEW packages will be installed:
  foobar
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Inst foobar (1.0 stable [i386])
Conf foobar (1.0 stable [i386])' aptget install foobar -st stable

testequal 'Reading package lists...
Building dependency tree...
Reading state information...
The following extra packages will be installed:
  libc6:amd64
The following packages will be REMOVED:
  libc6
The following NEW packages will be installed:
  foobar:amd64 libc6:amd64
0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
Remv libc6 [1.0]
Inst libc6:amd64 (1.0 stable [amd64])
Inst foobar:amd64 (1.0 stable [amd64])
Conf libc6:amd64 (1.0 stable [amd64])
Conf foobar:amd64 (1.0 stable [amd64])' aptget install foobar:amd64 -st stable

testequal 'Reading package lists...
Building dependency tree...
Reading state information...
The following NEW packages will be installed:
  foobar
The following packages will be upgraded:
  libc6
1 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Inst libc6 [1.0] (2.0 testing [all])
Inst foobar (1.0 stable [i386])
Conf libc6 (2.0 testing [all])
Conf foobar (1.0 stable [i386])' aptget install foobar/stable libc6 -st testing

testequal 'Reading package lists...
Building dependency tree...
Reading state information...
The following packages will be upgraded:
  libc6
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Inst libc6 [1.0] (2.0 testing [all])
Conf libc6 (2.0 testing [all])' aptget upgrade -t testing -s
aptget upgrade -y -qq 2>&1 > /dev/null
testdpkginstalled libc6

testequal 'Reading package lists...
Building dependency tree...
Reading state information...
The following NEW packages will be installed:
  foobar
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Inst foobar (1.0 stable [i386])
Conf foobar (1.0 stable [i386])' aptget install foobar/stable -st testing

testequal 'Reading package lists...
Building dependency tree...
Reading state information...
The following extra packages will be installed:
  libc6:amd64
The following packages will be REMOVED:
  libc6
The following NEW packages will be installed:
  foobar:amd64 libc6:amd64
0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
Remv libc6 [2.0]
Inst libc6:amd64 (1.0 stable [amd64])
Inst foobar:amd64 (1.0 stable [amd64])
Conf libc6:amd64 (1.0 stable [amd64])
Conf foobar:amd64 (1.0 stable [amd64])' aptget install foobar:amd64/stable -st testing


testequal "Reading package lists...
Building dependency tree...
Reading state information...
Selected version '1.0' (stable [i386]) for 'libc6'
The following packages will be DOWNGRADED:
  libc6
0 upgraded, 0 newly installed, 1 downgraded, 0 to remove and 0 not upgraded.
Inst libc6 [2.0] (1.0 stable [i386])
Conf libc6 (1.0 stable [i386])" aptget install libc6/stable -s -q=0


buildsimplenativepackage 'libc6-same' 'i386' '1.0' 'stable' 'Multi-Arch: same'
buildsimplenativepackage 'libc6-same' 'amd64' '1.0' 'stable' 'Multi-Arch: same'
buildsimplenativepackage 'libc6-same' 'all' '2.0' 'testing'

buildsimplenativepackage 'foobar-same' 'i386' '1.0' 'stable' 'Depends: libc6-same'
buildsimplenativepackage 'foobar-same' 'amd64' '1.0' 'stable' 'Depends: libc6-same'

setupaptarchive

aptget install libc6-same:i386 -t stable -y -qq 2>&1 > /dev/null
testdpkginstalled libc6-same

testequal 'Reading package lists...
Building dependency tree...
Reading state information...
The following NEW packages will be installed:
  foobar-same
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Inst foobar-same (1.0 stable [i386])
Conf foobar-same (1.0 stable [i386])' aptget install foobar-same -st stable

testequal 'Reading package lists...
Building dependency tree...
Reading state information...
The following extra packages will be installed:
  libc6-same:amd64
The following NEW packages will be installed:
  foobar-same:amd64 libc6-same:amd64
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst libc6-same:amd64 (1.0 stable [amd64])
Inst foobar-same:amd64 (1.0 stable [amd64])
Conf libc6-same:amd64 (1.0 stable [amd64])
Conf foobar-same:amd64 (1.0 stable [amd64])' aptget install foobar-same:amd64 -st stable

testequal 'Reading package lists...
Building dependency tree...
Reading state information...
The following NEW packages will be installed:
  libc6-same:amd64
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Inst libc6-same:amd64 (1.0 stable [amd64])
Conf libc6-same:amd64 (1.0 stable [amd64])' aptget install libc6-same:amd64 -s -t stable

# FIXME: We should test installing libc6-same:amd64 here, but dpkg doesn't allow it currently

testequal 'Reading package lists...
Building dependency tree...
Reading state information...
The following packages will be upgraded:
  libc6-same
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Inst libc6-same [1.0] (2.0 testing [all])
Conf libc6-same (2.0 testing [all])' aptget upgrade -t testing -s
aptget upgrade -y -qq 2>&1 > /dev/null
testdpkginstalled libc6-same

testequal "Reading package lists...
Building dependency tree...
Reading state information...
Selected version '1.0' (stable [i386]) for 'libc6-same'
The following packages will be DOWNGRADED:
  libc6-same
0 upgraded, 0 newly installed, 1 downgraded, 0 to remove and 0 not upgraded.
Inst libc6-same [2.0] (1.0 stable [i386])
Conf libc6-same (1.0 stable [i386])" aptget install libc6-same/stable -s -q=0

testequal 'Reading package lists...
Building dependency tree...
Reading state information...
The following NEW packages will be installed:
  foobar-same
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Inst foobar-same (1.0 stable [i386])
Conf foobar-same (1.0 stable [i386])' aptget install foobar-same/stable -st testing

testequal 'Reading package lists...
Building dependency tree...
Reading state information...
The following extra packages will be installed:
  libc6-same:amd64
The following packages will be REMOVED:
  libc6-same
The following NEW packages will be installed:
  foobar-same:amd64 libc6-same:amd64
0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
Remv libc6-same [2.0]
Inst libc6-same:amd64 (1.0 stable [amd64])
Inst foobar-same:amd64 (1.0 stable [amd64])
Conf libc6-same:amd64 (1.0 stable [amd64])
Conf foobar-same:amd64 (1.0 stable [amd64])' aptget install foobar-same:amd64/stable -st testing