slack-autoupdate

Update your Slackware system automatically
git clone git://git.server.ky/slackcoder/slack-autoupdate
Log | Files | Refs | README

test_autoupdate.sh (3493B)


      1 #/bin/bash
      2 #
      3 # The test assumes you are running Slackware on a 64 bit system.
      4 #
      5 
      6 # Packages are copied here on successful download.
      7 export PACKAGE_DIR="${PACKAGE_DIR:-/var/spool/slack-autoupdate}"
      8 
      9 # Packages are temperarily stored here until success.
     10 export STAGING_DIR="${STAGING_DIR:-/var/cache/slack-autoupdate/staging}"
     11 
     12 # Use fake chmod and chown commands to avoid errors when making packages.
     13 BIN_DIR="$(realpath $(dirname "${BASH_SOURCE[0]}"))/bin"
     14 
     15 TEST_DIR="$(
     16   mktemp \
     17   --directory \
     18   --tmpdir="$TMP" \
     19   slack-autoupdate.XXXXXX
     20 )" || exit 1
     21 trap "rm -fr $TEST_DIR" EXIT
     22 
     23 mkdir -p \
     24   "$TEST_DIR/tmp" \
     25   "$TEST_DIR/etc/sbotools" \
     26   "$TEST_DIR/etc/slackpkg" \
     27   "$TEST_DIR/root" \
     28   "$TEST_DIR/tmp" \
     29   "$TEST_DIR/usr/sbo" \
     30   "$TEST_DIR/var/cache" \
     31   "$TEST_DIR/var/lib" \
     32   "$TEST_DIR/var/lock" \
     33   "$TEST_DIR/var/log" \
     34   "$TEST_DIR/var/spool"
     35 
     36 if ! command -v bwrap &> /dev/null
     37 then
     38     echo "bwrap could not be found.  The 'bubblewrap' application must be installed to run this test."
     39     exit 1
     40 fi
     41 
     42 # Slackpkg etc. require a fake root user and filesystem.
     43 export INSTANCE="\
     44 bwrap \
     45   --unshare-user --uid 0 --gid 0 \
     46   --setenv "HOME" "/root" \
     47   --ro-bind / / \
     48   --dev /dev \
     49   --bind "$TEST_DIR/tmp" "/tmp" \
     50   --bind "$TEST_DIR/etc/sbotools" /etc/sbotools \
     51   --bind "$TEST_DIR/etc/slackpkg" /etc/slackpkg \
     52   --bind "$TEST_DIR/root" /root \
     53   --bind "$BIN_DIR" /usr/local/bin \
     54   --bind "$TEST_DIR/usr/sbo" /usr/sbo \
     55   --bind "$TEST_DIR/var" /var \
     56   --"
     57 
     58 $INSTANCE ln -s ../lib/pkgtools/packages "/var/log/packages"
     59 $INSTANCE mkdir --parents "/var/lib/pkgtools/packages"
     60 
     61 echo "Preparing slackpkg test case"
     62 (
     63   mkdir --parents "$TEST_DIR/etc"
     64   cp --recursive /etc/slackpkg "$TEST_DIR/etc/"
     65 
     66   echo http://mirrors.slackware.com/slackware/slackware64-15.0/ > "$TEST_DIR/etc/slackpkg/mirrors"
     67   echo "WGETFLAGS=\"-4 --quiet\"" >> "$TEST_DIR/etc/slackpkg/slackpkg.conf" # REMOVE ME
     68 
     69   yes | $INSTANCE slackpkg update gpg
     70   $INSTANCE slackpkg -batch=on -default_answer=y update
     71   touch "$TEST_DIR/var/lib/pkgtools/packages/xpdf-4.00-x86_64-3"
     72   touch "$TEST_DIR/var/lib/pkgtools/packages/xz-5.0.0-x86_64-4_slack15.0"
     73 )
     74 
     75 echo "Preparing sbotools test case"
     76 (
     77   $INSTANCE sboconfig --pkg-dir "$STAGING_DIR" >/dev/null
     78 
     79   touch "$TEST_DIR/var/lib/pkgtools/packages/bubblewrap-0.7.0-x86_64-1_SBo"
     80   $INSTANCE sbosnap fetch
     81 )
     82 
     83 echo ""
     84 echo "Running slack-autoupdate..."
     85 echo ""
     86 
     87 # Display a helpful message and successful exit code by tracking total success.
     88 TESTS_PASS=true
     89 
     90 if ! $INSTANCE bash $(dirname "${BASH_SOURCE[0]}")/../slack-autoupdate; then
     91   TESTS_PASS=false
     92 
     93   echo "slack-autoupdate failed"
     94   cat "$TEST_DIR/$PACKAGE_DIR/error.txt"
     95 elif [ -f "$TEST_DIR/$PACKAGE_DIR/error.txt" ]; then
     96   TESTS_PASS=false
     97 
     98   cat "$TEST_DIR/$PACKAGE_DIR/error.txt"
     99 fi
    100 
    101 if [ ! -f "$TEST_DIR/$PACKAGE_DIR/info.txt" ]; then
    102   TESTS_PASS=false
    103 
    104   echo "expected '$PACKAGE_DIR/info.txt' file to be created"
    105 fi
    106 
    107 if [ -z "$(find "$TEST_DIR/$PACKAGE_DIR" -name 'xpdf-*.t*z')" ] \
    108   || [ -z "$(find "$TEST_DIR/$PACKAGE_DIR" -name 'xz-*.t*z')" ]; then
    109   TESTS_PASS=false
    110 
    111   echo "slackpkg: expected to have xpdf and xz package update"
    112 else
    113   echo "slackpkg: ok"
    114 fi
    115 
    116 if [ -f "$TEST_DIR/etc/sbotools/sbotools.conf" ] \
    117   && [ -z "$(find "$TEST_DIR/$PACKAGE_DIR" -name 'bubblewrap-*.t*z')" ]; then
    118   TESTS_PASS=false
    119 
    120   echo "sbotools: expected to have bubblewrap package update"
    121 else
    122   echo "sbotools: ok"
    123 fi
    124 
    125 if [ "$TESTS_PASS" = true ]; then
    126   echo "all tests pass"
    127 else
    128   exit 1
    129 fi