]> git.saurik.com Git - apt.git/blobdiff - test/integration/framework
test framework: Correctly generate new paths in noopchroot
[apt.git] / test / integration / framework
index 292a7b9581e4456687f0c1fa0c1a5df6bb334ef3..8ea1e1c0d1259e3044d8765f0e543a463c2edfbe 100644 (file)
@@ -370,6 +370,8 @@ EOF
                # in testcases, it can appear as if localhost has a rotation setup,
                # hide this as we can't really deal with it properly
                echo 'Acquire::Failure::ShowIP "false";'
+               # fakeroot can't fake everything, so disabled in production but good for tests
+               echo 'APT::Sandbox::Verify "true";'
        } >> aptconfig.conf
 
        cp "${TESTDIRECTORY}/apt.pem" "${TMPWORKINGDIRECTORY}/rootdir/etc/webserver.pem"
@@ -475,6 +477,7 @@ configdpkgnoopchroot() {
 #include <stdlib.h>
 #include <string.h>
 #include <dlfcn.h>
+#include <limits.h>
 
 static char * chrootdir = NULL;
 
@@ -491,13 +494,11 @@ int execvp(const char *file, char *const argv[]) {
        if (chrootdir == NULL || strncmp(file, "/var/lib/dpkg/", strlen("/var/lib/dpkg/")) != 0)
                return func_execvp(file, argv);
        printf("REWRITE execvp call %s into %s\n", file, chrootdir);
-       char newfile[strlen(chrootdir) + strlen(file)];
-       strcpy(newfile, chrootdir);
-       strcat(newfile, file);
+       char newfile[PATH_MAX];
+       snprintf(newfile, sizeof(newfile), "%s/%s", chrootdir, file);
        char const * const baseadmindir = "/var/lib/dpkg";
-       char admindir[strlen(chrootdir) + strlen(baseadmindir)];
-       strcpy(admindir, chrootdir);
-       strcat(admindir, baseadmindir);
+       char admindir[PATH_MAX];
+       snprintf(admindir, sizeof(admindir), "%s/%s", chrootdir, baseadmindir);
        setenv("DPKG_ADMINDIR", admindir, 1);
        return func_execvp(newfile, argv);
 }
@@ -572,7 +573,7 @@ setupsimplenativepackage() {
        local DESCRIPTION="${6:-"an autogenerated dummy ${NAME}=${VERSION}/${RELEASE}
  If you find such a package installed on your system,
  something went horribly wrong! They are autogenerated
- und used only by testcases and surf no other propose…"}"
+ und used only by testcases and serve no other purpose…"}"
 
        local SECTION="${7:-others}"
        local DISTSECTION
@@ -628,7 +629,7 @@ buildsimplenativepackage() {
        local DESCRIPTION="${6:-"an autogenerated dummy ${NAME}=${VERSION}/${RELEASE}
  If you find such a package installed on your system,
  something went horribly wrong! They are autogenerated
- und used only by testcases and surf no other propose…"}"
+ und used only by testcases and serve no other purpose…"}"
 
        local SECTION="${7:-others}"
        local PRIORITY="${8:-optional}"
@@ -810,7 +811,7 @@ insertpackage() {
        local DESCRIPTION="${7:-"an autogenerated dummy ${NAME}=${VERSION}/${RELEASES}
  If you find such a package installed on your system,
  something went horribly wrong! They are autogenerated
- und used only by testcases and surf no other propose…"}"
+ und used only by testcases and serve no other purpose…"}"
        local ARCHS=""
        for RELEASE in $(printf '%s' "$RELEASES" | tr ',' '\n'); do
                if [ "$RELEASE" = 'installed' ]; then
@@ -889,7 +890,7 @@ insertinstalledpackage() {
        local DESCRIPTION="${7:-"an autogenerated dummy ${NAME}=${VERSION}/installed
  If you find such a package installed on your system,
  something went horribly wrong! They are autogenerated
- und used only by testcases and surf no other propose…"}"
+ und used only by testcases and serve no other purpose…"}"
 
        local FILE='rootdir/var/lib/dpkg/status'
        local INFO='rootdir/var/lib/dpkg/info'
@@ -1195,7 +1196,7 @@ changetowebserver() {
                fi
                cd - > /dev/null
        else
-               msgdie 'You have to build aptwerbserver or install a webserver'
+               msgdie 'You have to build apt from source to have test/interactive-helper/aptwebserver available for tests requiring a webserver'
        fi
        if [ "$REWRTE" != 'yes' ]; then
                rewritesourceslist "http://localhost:${APTHTTPPORT}/"
@@ -1203,7 +1204,7 @@ changetowebserver() {
 }
 
 changetohttpswebserver() {
-       if ! which stunnel4 >/dev/null; then
+       if ! command -v stunnel4 >/dev/null 2>&1; then
                msgdie 'You need to install stunnel4 for https testcases'
        fi
        if [ ! -e "${TMPWORKINGDIRECTORY}/aptarchive/aptwebserver.pid" ]; then
@@ -1418,6 +1419,19 @@ testnopackage() {
        fi
        msggroup
 }
+testnosrcpackage() {
+       msggroup 'testnosrcpackage'
+       msgtest "Test for non-existent source packages" "apt-cache showsrc $*"
+       local SHOWPKG="$(aptcache showsrc "$@" 2>&1 | grep '^Package: ')"
+       if [ -n "$SHOWPKG" ]; then
+               local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testnosrcpackage.output"
+               echo "$SHOWPKG" >"$OUTPUT"
+               msgfailoutput '' "$OUTPUT"
+       else
+               msgpass
+       fi
+       msggroup
+}
 
 testdpkgstatus() {
        msggroup 'testdpkgstatus'
@@ -1495,7 +1509,10 @@ msgfailoutput() {
                        if expr match "$1" "$FILEFLAGS" >/dev/null; then
                                echo "#### stat(2) of file: $2 ####"
                                stat "$2" || true
-                               if test -e "$2"; then
+                               if test -d "$2"; then
+                                       echo "#### The directory contains: $2 ####"
+                                       ls >&2 "$2" || true
+                               elif test -e "$2"; then
                                        echo "#### Complete file: $2 ####"
                                        cat >&2 "$2" || true
                                fi