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