]> git.saurik.com Git - apt.git/commitdiff
various small additional tests and testcases
authorDavid Kalnischkies <david@kalnischkies.de>
Sun, 9 Nov 2014 20:38:53 +0000 (21:38 +0100)
committerDavid Kalnischkies <david@kalnischkies.de>
Tue, 18 Nov 2014 01:41:20 +0000 (02:41 +0100)
Usually they don't provide a lot in terms of what they test, but they
help in covering many lines from strictly anecdotal commands (stats,
moo) and error messages, so that stuff which really needs to be tested,
but isn't is better visible in coverage reports.

Git-Dch: Ignore

12 files changed:
cmdline/apt-cache.cc
test/integration/framework
test/integration/test-00-commands-have-help
test/integration/test-apt-cache [new file with mode: 0755]
test/integration/test-apt-cli-search
test/integration/test-apt-cli-show
test/integration/test-apt-cli-update
test/integration/test-apt-config [new file with mode: 0755]
test/integration/test-apt-helper
test/integration/test-apt-mark
test/integration/test-apt-update-stale
test/integration/test-external-dependency-solver-protocol

index 342ad18580c803ec0febed7fafe6311666042ce6..a5024c5812924738ddd0ab598854cccd41c9264c 100644 (file)
@@ -116,7 +116,7 @@ static bool ShowUnMet(pkgCache::VerIterator const &V, bool const Important)
                  continue;
 
            // Skip conflicts and replaces
-           if (End.IsNegative() == true)
+           if (End.IsNegative() == true || End->Type == pkgCache::Dep::Replaces)
               continue;
 
            // Verify the or group
@@ -133,7 +133,7 @@ static bool ShowUnMet(pkgCache::VerIterator const &V, bool const Important)
                  break;
               }
               delete [] VList;
-              
+
               if (Start == End)
                  break;
               ++Start;
index d28085ee4c851b42aba62c095f6360bb0eaa0243..c9f62c141507f2bb71bbc9f9ad91ca943dac5177 100644 (file)
@@ -300,7 +300,7 @@ getarchitecture() {
 }
 
 getarchitectures() {
-       echo "$(aptconfig dump | grep APT::Architecture | cut -d'"' -f 2 | sed '/^$/ d' | sort | uniq | tr '\n' ' ')"
+       aptconfig dump --no-empty --format '%v%n' APT::Architecture APT::Architectures | sort -u | tr '\n' ' '
 }
 
 getarchitecturesfromcommalist() {
index ebf8b8cfaa83c4d319c9a0057fd78ac108303c65..bbd1475eb830285e60a450b2f458af42a7bfa924 100755 (executable)
@@ -50,3 +50,14 @@ done
 for CMD in 'apt-dump-solver'  'apt-internal-solver'; do
        checkoptions "$(echo "$CMD" | tr -d '-')"
 done
+
+# in times of need, we all look for super cow to save the day
+testsuccess aptget moo
+testsuccess aptget moo -q=2
+testsuccess aptget moo moo
+testsuccess aptget moo moo -q=2
+testsuccess aptget moo moo --color
+testsuccess aptget moo moo moo
+testsuccess aptget moo moo moo -q=2
+testsuccess aptget moo moo moo moo
+testsuccess aptget moo moo moo moo -q=2
diff --git a/test/integration/test-apt-cache b/test/integration/test-apt-cache
new file mode 100755 (executable)
index 0000000..f47c0e0
--- /dev/null
@@ -0,0 +1,124 @@
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+DESCR='Some description
+ That has multiple lines'
+insertpackage 'unstable' 'fancy' 'all' '1'
+insertpackage 'unstable,installed' 'foo' 'all' '1' 'Depends: bar
+Conflicts: foobar
+Recommends: cool (>= 2) | cooler (<< 5)' "$DESCR"
+insertpackage 'unstable' 'bar' 'all' '1' 'Depends: bar
+Breaks: foo (<< 1)
+Replaces: foo (<< 1)' "$DESCR"
+
+setupaptarchive
+
+# dpkg is installed by our framework
+testdpkginstalled 'dpkg'
+testempty aptcache unmet dpkg
+
+# FIXME: Find some usecase for unmet as it seems kinda useless/broken
+#testsuccess aptcache unmet
+#testsuccess aptcache unmet foo
+
+# not too useful to test, but makes coverage green…
+testsuccess aptcache stats
+cp rootdir/tmp/testsuccess.output stats.output
+testsuccess test -s stats.output
+testsuccess aptcache xvcg foo
+cp rootdir/tmp/testsuccess.output xvcg.output
+testsuccess test -s xvcg.output
+testsuccess aptcache dotty foo
+cp rootdir/tmp/testsuccess.output dotty.output
+testsuccess test -s dotty.output
+# for this, even the sourcecode says it is useless (expect debugging)
+testsuccess aptcache dump
+cp rootdir/tmp/testsuccess.output dump.output
+testsuccess test -s dump.output
+
+testequal 'dpkg
+bar
+fancy
+foo' aptcache pkgnames
+testequal 'bar' aptcache pkgnames bar
+testequal 'fancy
+foo' aptcache pkgnames f
+
+testequal "       foo |          1 | file:$(readlink -f .)/aptarchive/ unstable/main amd64 Packages" aptcache madison foo
+
+### depends
+
+testequal 'foo
+  Depends: bar
+ |Recommends: <cool>
+  Recommends: <cooler>
+  Conflicts: <foobar>
+  Conflicts: <foobar:i386>' aptcache depends foo
+testequal 'foo
+  Depends: bar
+  Recommends: <cool>
+  Conflicts: <foobar>
+  Conflicts: <foobar:i386>' aptcache depends foo -o APT::Cache::ShowOnlyFirstOr=1
+testequal 'foo
+  Depends: bar
+ |Recommends: <cool> (>= 2)
+  Recommends: <cooler> (<< 5)
+  Conflicts: <foobar>
+  Conflicts: <foobar:i386>' aptcache depends foo -o APT::Cache::ShowVersion=1
+testequal 'foo
+  Depends: bar
+  Conflicts: <foobar>
+  Conflicts: <foobar:i386>' aptcache depends foo --no-recommends
+testequal 'foo
+  Depends: bar' aptcache depends foo --important
+testequal 'foo
+  Conflicts: <foobar>
+  Conflicts: <foobar:i386>' aptcache depends foo --important --no-depends --conflicts
+testequal 'foo
+  Depends: bar
+ |Recommends: <cool>
+  Recommends: <cooler>
+  Conflicts: <foobar>
+  Conflicts: <foobar:i386>
+bar
+  Depends: bar
+  Breaks: foo
+  Breaks: <foo:i386>
+  Replaces: foo
+  Replaces: <foo:i386>
+<cool>
+<cooler>
+<foobar>
+<foobar:i386>
+<foo:i386>' aptcache depends foo --recurse
+testequal 'foo
+  Depends: bar
+bar
+  Depends: bar
+  Replaces: foo
+  Replaces: <foo:i386>
+<foo:i386>' aptcache depends foo --recurse --important --replaces
+
+## rdpends
+
+testequal 'foo
+Reverse Depends:
+  bar
+  bar' aptcache rdepends foo
+testequal 'foo
+Reverse Depends:
+  Replaces: bar
+  Breaks: bar' aptcache rdepends foo -o APT::Cache::ShowDependencyType=1
+testequal 'foo
+Reverse Depends:
+  Replaces: bar (<< 1)
+  Breaks: bar (<< 1)' aptcache rdepends foo -o APT::Cache::ShowDependencyType=1 -o APT::Cache::ShowVersion=1
+testequal 'foo
+Reverse Depends:
+  Breaks: bar (<< 1)' aptcache rdepends foo -o APT::Cache::ShowDependencyType=1 -o APT::Cache::ShowVersion=1 --important --breaks
index 8f009d57cc5be9d988b7b8a82a77bc7485ece399..1a28ba4da5f8dba3e0a66e2e2bdc4cc6173a2252 100755 (executable)
@@ -25,6 +25,9 @@ setupaptarchive
 
 APTARCHIVE=$(readlink -f ./aptarchive)
 
+testequal 'E: You must give at least one search pattern' aptcache search
+testequal 'E: You must give at least one search pattern' apt search
+
 # with OP progress 
 testequal "Sorting...
 Full Text Search...
index 4c8e134d6557896313bb676e5bb7593970d95912..930e591e091514a8568a3a4c26f9a10d31360c23 100755 (executable)
@@ -36,3 +36,14 @@ APT-Sources: file:$APTARCHIVE/ unstable/main i386 Packages
 Description: Some description 
  That has multiple lines
 " apt show foo
+
+# this is the default, but disabled by the testcases
+testsuccess apt show foo -o Apt::Cmd::Disable-Script-Warning=0
+cp rootdir/tmp/testsuccess.output aptshow.output
+testsuccess grep '^WARNING: ' aptshow.output
+
+if [ "$(id -u)" != '0' ]; then
+       testsuccess apt install foo -s -o APT::Get::Show-User-Simulation-Note=1
+       cp rootdir/tmp/testsuccess.output aptshow.output
+       testsuccess grep '^NOTE: ' aptshow.output
+fi
index 987bb9adb3d7f92ff4b8eb6d56fd0a706388e854..83cc94b93b7de39201ee16ea0932fa218186ed65 100755 (executable)
@@ -8,10 +8,17 @@ setupenvironment
 configarchitecture "i386"
 
 insertpackage 'unstable' 'foo' 'all' '2.0'
+cp rootdir/var/lib/dpkg/status dpkg.status
 insertinstalledpackage 'foo' 'all' '1.0'
 
 setupaptarchive --no-update
 
 APTARCHIVE=$(readlink -f ./aptarchive)
 
+testequal 'E: The update command takes no arguments' apt update -q arguments
+
 testequal "1 package can be upgraded. Run 'apt list --upgradable' to see it." apt update -q
+
+cp dpkg.status rootdir/var/lib/dpkg/status
+insertinstalledpackage 'foo' 'all' '2.0'
+testequal 'All packages are up to date.' apt update -q
diff --git a/test/integration/test-apt-config b/test/integration/test-apt-config
new file mode 100755 (executable)
index 0000000..2f2ff9d
--- /dev/null
@@ -0,0 +1,36 @@
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+
+setupenvironment
+configarchitecture 'amd64'
+
+testsuccess aptconfig dump
+testequal 'APT::Architecture "amd64";' aptconfig dump APT::Architecture
+testempty aptconfig dump config::which::does::not::exist
+
+testequal 'APT::Architectures "";
+APT::Architectures:: "amd64";' aptconfig dump APT::Architectures
+testequal 'APT::Architectures:: "amd64";' aptconfig dump --no-empty APT::Architectures
+testequal 'amd64' aptconfig dump --no-empty --format='%v%n' APT::Architectures
+
+testempty aptconfig shell
+testequal 'E: Arguments not in pairs' aptconfig shell APT::Architecture
+testempty aptconfig shell APT::Architecture ARCH # incorrect order
+testequal "ARCH='amd64'" aptconfig shell ARCH APT::Architecture
+
+ROOTDIR="$(readlink -f rootdir)"
+testequal "CONFIG='apt.conf'" aptconfig shell CONFIG Dir::Etc::main
+testequal "CONFIG='${ROOTDIR}/etc/apt/apt.conf'" aptconfig shell CONFIG Dir::Etc::main/f
+testequal "CONFIG='etc/apt/'" aptconfig shell CONFIG Dir::Etc
+testequal "CONFIG='${ROOTDIR}/etc/apt/'" aptconfig shell CONFIG Dir::Etc/ # old style
+testequal "CONFIG='${ROOTDIR}/etc/apt/'" aptconfig shell CONFIG Dir::Etc/d
+
+testempty aptconfig dump --no-empty --format='%v%n' APT::Build-Profiles
+export DEB_BUILD_PROFILES='nodoc stage1'
+testequal 'nodoc
+stage1' aptconfig dump --no-empty --format='%v%n' APT::Build-Profiles
+unset DEB_BUILD_PROFILES
+testempty aptconfig dump --no-empty --format='%v%n' APT::Build-Profiles
index 06e497ff707fedebb21fbdd843218d4df6ea708c..3c1d393a6ae07105540a3dcceb3ead266facf221 100755 (executable)
@@ -53,7 +53,7 @@ echo "http://some-proxy"
 EOF
     chmod 755 apt-proxy-detect
     echo "Acquire::http::Proxy-Auto-Detect \"$(pwd)/apt-proxy-detect\";" > rootdir/etc/apt/apt.conf.d/02proxy-detect
-    
+
     testequal "Using proxy 'http://some-proxy' for URL 'http://www.example.com/'" apthelper auto-detect-proxy http://www.example.com
 
 
@@ -64,13 +64,15 @@ echo "https://https-proxy"
 EOF
     chmod 755 apt-proxy-detect
     echo "Acquire::https::Proxy-Auto-Detect \"$(pwd)/apt-proxy-detect\";" > rootdir/etc/apt/apt.conf.d/02proxy-detect
-    
-    testequal "Using proxy 'https://https-proxy' for URL 'https://ssl.example.com/'" apthelper auto-detect-proxy https://ssl.example.com 
 
-
-    
+    testequal "Using proxy 'https://https-proxy' for URL 'https://ssl.example.com/'" apthelper auto-detect-proxy https://ssl.example.com
 }
 
 test_apt_helper_download
 test_apt_helper_detect_proxy
 
+# test failure modes
+testequal 'E: Invalid operation download' apthelper download
+testequal 'E: Must specify at least one pair url/filename' apthelper download-file
+testequal 'E: Must specify at least one pair url/filename' apthelper download-file http://example.org/
+testequal 'E: Need one URL as argument' apthelper auto-detect-proxy
index 69e0f933d1463e81e933263fc553137abdb8615a..0f62a12b41b010d016d41b3c5e471202adefe0ef 100755 (executable)
@@ -20,21 +20,31 @@ testdpkginstalled dpkg
 
 testnoautopkg() {
        testempty aptmark showauto
+       testempty aptcache showauto
        testequal 'bar
 dpkg
 foo' aptmark showmanual
        testequal 'bar
 foo' aptmark showmanual bar foo uninstalled
 }
-testmarkonpkgasauto() {
-       testsuccess aptmark $1 foo
+testfooisauto() {
        testequal 'foo' aptmark showauto
+       testequal 'foo' aptcache showauto
        testequal 'foo' aptmark showauto foo
+       testequal 'foo' aptcache showauto foo
        testequal 'bar
 dpkg' aptmark showmanual
        testequal 'bar' aptmark showmanual bar
+}
+testmarkonpkgasauto() {
+       testsuccess $1 $2 foo
+       testfooisauto
+       testsuccess $1 $2 foo
+       testfooisauto
 
-       testsuccess aptmark $2 foo
+       testsuccess $1 $3 foo
+       testnoautopkg
+       testsuccess $1 $3 foo
        testnoautopkg
 }
 
@@ -42,8 +52,9 @@ testequal 'E: No packages found' aptmark auto
 testequal 'E: No packages found' aptmark manual
 
 testnoautopkg
-testmarkonpkgasauto 'auto' 'manual'
-testmarkonpkgasauto 'markauto' 'unmarkauto'
+testmarkonpkgasauto 'aptmark' 'auto' 'manual'
+testmarkonpkgasauto 'aptmark' 'markauto' 'unmarkauto'
+testmarkonpkgasauto 'aptget' 'markauto' 'unmarkauto'
 
 testnoholdpkg() {
        testempty aptmark showhold
@@ -51,10 +62,19 @@ testnoholdpkg() {
        testempty aptmark showhold dpkg
        testempty aptmark showholds dpkg
 }
-testmarkonepkgashold() {
-       testsuccess aptmark hold $1
+testpkgonhold() {
        testequal "$1" aptmark showhold
        testequal "$1" aptmark showholds
+       testequal "$1" aptmark showhold $1
+       testequal "$1" aptmark showholds $1
+}
+testmarkonepkgashold() {
+       testsuccess aptmark hold $1
+       testpkgonhold $1
+       testsuccess aptmark hold $1
+       testpkgonhold $1
+       testsuccess aptmark unhold $1
+       testnoholdpkg
        testsuccess aptmark unhold $1
        testnoholdpkg
 }
index 52f94591fe42b21e433be9e2d3ad6ffda04d238a..277aa5b09e9d2e54f2185e2f3ae2a60dc36516de 100755 (executable)
@@ -14,9 +14,11 @@ configarchitecture "i386"
 
 insertpackage 'unstable' 'foo' 'all' '1.0'
 
-setupaptarchive
+setupaptarchive --no-update
 changetowebserver
-aptget update -qq
+
+echo "Acquire::Languages \"none\";" > rootdir/etc/apt/apt.conf.d/00nolanguages
+testsuccess aptget update
 listcurrentlistsdirectory > lists.before
 
 # insert new version
index 07d2441b6200d85a4844e6e6ddedefc563a5f21c..fd68578c5c666019a79f4c8d9c5c1ad7ec164de2 100755 (executable)
@@ -12,7 +12,10 @@ insertinstalledpackage 'stuff' 'all' '1'
 insertpackage 'unstable' 'cool' 'all' '2' 'Multi-Arch: foreign'
 insertpackage 'unstable' 'stuff' 'all' '2' 'Multi-Arch: foreign'
 insertpackage 'unstable' 'coolstuff' 'i386,amd64' '2' 'Depends: cool, stuff'
-insertpackage 'unstable' 'awesome' 'all' '2' 'Multi-Arch: foreign'
+insertpackage 'unstable' 'awesome' 'all' '2' 'Multi-Arch: foreign
+Conflicts: badstuff'
+insertpackage 'unstable' 'badstuff' 'all' '2' 'Multi-Arch: foreign
+Conflicts: awesome'
 insertpackage 'unstable' 'awesomecoolstuff' 'i386' '2' 'Depends: coolstuff, awesome'
 
 insertpackage 'experimental' 'cool' 'all' '3' 'Multi-Arch: foreign'
@@ -44,6 +47,14 @@ The following NEW packages will be installed:
 Inst coolstuff (3 experimental [amd64])
 Conf coolstuff (3 experimental [amd64])' aptget install --solver apt coolstuff -s
 
+testequal 'Reading package lists...
+Building dependency tree...
+Execute external solver...
+The following packages will be REMOVED:
+  cool*
+0 upgraded, 0 newly installed, 1 to remove and 1 not upgraded.
+Purg cool [1]' aptget purge --solver apt cool -s
+
 testsuccess aptget install awesomecoolstuff:i386 -s
 testsuccess aptget install --solver apt awesomecoolstuff:i386 -s
 
@@ -57,9 +68,13 @@ testsuccess aptget dist-upgrade -s --solver apt
 testsuccess aptget upgrade -s
 testsuccess aptget upgrade -s --solver apt
 
+testfailure aptget install awesome badstuff -s
+testfailure aptget install awesome badstuff -s --solver apt
+testsuccess grep 'ERR_UNSOLVABLE' rootdir/tmp/testfailure.output
+
 configarchitecture 'armel'
 msgtest 'Test direct calling is okay for' 'apt-internal-solver'
-cat /tmp/dump.edsp | aptinternalsolver > solver.result 2>&1 || true
+cat /tmp/dump.edsp | aptinternalsolver -q=0 > solver.result 2>&1 || true
 if [ "$(tail -n2 solver.result | head -n1 )" = "Message: Done" ]; then
        msgpass
 else
@@ -69,3 +84,16 @@ fi
 rm -f /tmp/dump.edsp
 
 testfailure aptget install --solver apt awesomecoolstuff:i386 -s
+
+testsuccess aptinternalsolver scenario
+testequal 'Package: stuff
+Source: stuff
+Architecture: all
+Version: 1
+Installed: yes
+APT-ID: 2
+Priority: optional
+Section: other
+APT-Pin: 100
+APT-Candidate: yes
+' aptinternalsolver scenario stuff