#!/bin/sh
set -e

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

insertpackage 'unstable' 'cool-foo' 'amd64,i386' '1.0' 'Depends: foo'
insertpackage 'unstable' 'cool-foo-x64' 'amd64' '1.0' 'Depends: foo:amd64'
insertpackage 'unstable' 'cool-foo-x32' 'amd64' '1.0' 'Depends: foo:i386'
insertpackage 'unstable' 'foo' 'amd64,i386,armel' '1.0' 'Multi-Arch: foreign'

insertpackage 'unstable' 'cool-bar' 'amd64,i386' '1.0' 'Depends: bar-provider'
insertpackage 'unstable' 'cool-bar-x64' 'amd64' '1.0' 'Depends: bar-provider:amd64'
insertpackage 'unstable' 'cool-bar-x32' 'amd64' '1.0' 'Depends: bar-provider:i386'
insertpackage 'unstable' 'bar' 'amd64,i386,armel' '1.0' 'Provides: bar-provider
Multi-Arch: foreign'

setupaptarchive

testequal 'Reading package lists...
Building dependency tree...
The following extra packages will be installed:
  foo
The following NEW packages will be installed:
  cool-foo:i386 foo
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst foo (1.0 unstable [amd64])
Inst cool-foo:i386 (1.0 unstable [i386])
Conf foo (1.0 unstable [amd64])
Conf cool-foo:i386 (1.0 unstable [i386])' aptget install cool-foo:i386 -s

testequal 'Reading package lists...
Building dependency tree...
The following NEW packages will be installed:
  cool-foo foo:i386
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst foo:i386 (1.0 unstable [i386])
Inst cool-foo (1.0 unstable [amd64])
Conf foo:i386 (1.0 unstable [i386])
Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:i386 -s

testequal 'Reading package lists...
Building dependency tree...
The following NEW packages will be installed:
  cool-foo foo:armel
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst foo:armel (1.0 unstable [armel])
Inst cool-foo (1.0 unstable [amd64])
Conf foo:armel (1.0 unstable [armel])
Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:armel -s

testequal 'Reading package lists...
Building dependency tree...
The following extra packages will be installed:
  bar
The following NEW packages will be installed:
  bar cool-bar:i386
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst bar (1.0 unstable [amd64])
Inst cool-bar:i386 (1.0 unstable [i386])
Conf bar (1.0 unstable [amd64])
Conf cool-bar:i386 (1.0 unstable [i386])' aptget install cool-bar:i386 -s

testequal 'Reading package lists...
Building dependency tree...
The following NEW packages will be installed:
  bar:i386 cool-bar
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst bar:i386 (1.0 unstable [i386])
Inst cool-bar (1.0 unstable [amd64])
Conf bar:i386 (1.0 unstable [i386])
Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:i386 -s

testequal 'Reading package lists...
Building dependency tree...
The following NEW packages will be installed:
  bar:armel cool-bar
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst bar:armel (1.0 unstable [armel])
Inst cool-bar (1.0 unstable [amd64])
Conf bar:armel (1.0 unstable [armel])
Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:armel -s

testequal "Reading package lists...
Building dependency tree...
Note, selecting 'bar:i386' instead of 'bar-provider:i386'
The following NEW packages will be installed:
  bar:i386 cool-bar
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst bar:i386 (1.0 unstable [i386])
Inst cool-bar (1.0 unstable [amd64])
Conf bar:i386 (1.0 unstable [i386])
Conf cool-bar (1.0 unstable [amd64])" aptget install cool-bar bar-provider:i386 -s -q=0

satisfiable_in_singlearch() {
	testequal 'Reading package lists...
Building dependency tree...
The following extra packages will be installed:
  foo
The following NEW packages will be installed:
  cool-foo foo
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst foo (1.0 unstable [amd64])
Inst cool-foo (1.0 unstable [amd64])
Conf foo (1.0 unstable [amd64])
Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 -s

	testequal 'Reading package lists...
Building dependency tree...
The following NEW packages will be installed:
  cool-foo foo
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst foo (1.0 unstable [amd64])
Inst cool-foo (1.0 unstable [amd64])
Conf foo (1.0 unstable [amd64])
Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:amd64 -s

	testequal 'Reading package lists...
Building dependency tree...
The following extra packages will be installed:
  bar
The following NEW packages will be installed:
  bar cool-bar
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst bar (1.0 unstable [amd64])
Inst cool-bar (1.0 unstable [amd64])
Conf bar (1.0 unstable [amd64])
Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 -s

	testequal 'Reading package lists...
Building dependency tree...
The following NEW packages will be installed:
  bar cool-bar
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst bar (1.0 unstable [amd64])
Inst cool-bar (1.0 unstable [amd64])
Conf bar (1.0 unstable [amd64])
Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:amd64 -s

	testequal "Reading package lists...
Building dependency tree...
Note, selecting 'bar' instead of 'bar-provider'
The following NEW packages will be installed:
  bar cool-bar
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst bar (1.0 unstable [amd64])
Inst cool-bar (1.0 unstable [amd64])
Conf bar (1.0 unstable [amd64])
Conf cool-bar (1.0 unstable [amd64])" aptget install cool-bar bar-provider -s -q=0

	testequal 'Reading package lists...
Building dependency tree...
The following extra packages will be installed:
  foo
The following NEW packages will be installed:
  cool-foo-x64 foo
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst foo (1.0 unstable [amd64])
Inst cool-foo-x64 (1.0 unstable [amd64])
Conf foo (1.0 unstable [amd64])
Conf cool-foo-x64 (1.0 unstable [amd64])' aptget install cool-foo-x64 -s
}

#FIXME: do not work in single-arch as i386 isn't known at cache generation time
	testequal 'Reading package lists...
Building dependency tree...
The following extra packages will be installed:
  foo
The following NEW packages will be installed:
  cool-foo-x32 foo
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst foo (1.0 unstable [amd64])
Inst cool-foo-x32 (1.0 unstable [amd64])
Conf foo (1.0 unstable [amd64])
Conf cool-foo-x32 (1.0 unstable [amd64])' aptget install cool-foo-x32 -s

	testequal 'Reading package lists...
Building dependency tree...
The following extra packages will be installed:
  bar
The following NEW packages will be installed:
  bar cool-bar-x32
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst bar (1.0 unstable [amd64])
Inst cool-bar-x32 (1.0 unstable [amd64])
Conf bar (1.0 unstable [amd64])
Conf cool-bar-x32 (1.0 unstable [amd64])' aptget install cool-bar-x32 -s -q=0

	testequal 'Reading package lists...
Building dependency tree...
The following extra packages will be installed:
  bar
The following NEW packages will be installed:
  bar cool-bar-x64
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst bar (1.0 unstable [amd64])
Inst cool-bar-x64 (1.0 unstable [amd64])
Conf bar (1.0 unstable [amd64])
Conf cool-bar-x64 (1.0 unstable [amd64])' aptget install cool-bar-x64 -s -q=0


satisfiable_in_singlearch

msgmsg 'switch to single architecture'
configarchitecture 'amd64'

satisfiable_in_singlearch