1f08c3bdfSopenharmony_ci#!/bin/sh 2f08c3bdfSopenharmony_ci# SPDX-License-Identifier: GPL-2.0-or-later 3f08c3bdfSopenharmony_ci# Copyright (c) 2015 Fujitsu Ltd. 4f08c3bdfSopenharmony_ci# Author: Guangwen Feng <fenggw-fnst@cn.fujitsu.com> 5f08c3bdfSopenharmony_ci# 6f08c3bdfSopenharmony_ci# Test mkswap command with some basic options. 7f08c3bdfSopenharmony_ci 8f08c3bdfSopenharmony_ciTST_CNT=10 9f08c3bdfSopenharmony_ciTST_SETUP=setup 10f08c3bdfSopenharmony_ciTST_TESTFUNC=do_test 11f08c3bdfSopenharmony_ciTST_NEEDS_ROOT=1 12f08c3bdfSopenharmony_ciTST_NEEDS_DEVICE=1 13f08c3bdfSopenharmony_ciTST_NEEDS_CMDS="uuidgen blkid blockdev mkswap" 14f08c3bdfSopenharmony_ci 15f08c3bdfSopenharmony_cisetup() 16f08c3bdfSopenharmony_ci{ 17f08c3bdfSopenharmony_ci UUID=`uuidgen` 18f08c3bdfSopenharmony_ci 19f08c3bdfSopenharmony_ci PAGE_SIZE=`tst_getconf PAGESIZE` 20f08c3bdfSopenharmony_ci 21f08c3bdfSopenharmony_ci # Here get the size of the device and align it down to be the 22f08c3bdfSopenharmony_ci # multiple of $PAGE_SIZE and use that as the size for testing. 23f08c3bdfSopenharmony_ci real_size=`blockdev --getsize64 $TST_DEVICE` 24f08c3bdfSopenharmony_ci DEVICE_SIZE=$((($real_size/$PAGE_SIZE * $PAGE_SIZE)/1024)) 25f08c3bdfSopenharmony_ci} 26f08c3bdfSopenharmony_ci 27f08c3bdfSopenharmony_cicheck_for_file() 28f08c3bdfSopenharmony_ci{ 29f08c3bdfSopenharmony_ci local path="$1" 30f08c3bdfSopenharmony_ci 31f08c3bdfSopenharmony_ci if [ -z "$path" -o -e "$path" ]; then 32f08c3bdfSopenharmony_ci return 33f08c3bdfSopenharmony_ci fi 34f08c3bdfSopenharmony_ci return 1 35f08c3bdfSopenharmony_ci} 36f08c3bdfSopenharmony_ci 37f08c3bdfSopenharmony_cimkswap_verify() 38f08c3bdfSopenharmony_ci{ 39f08c3bdfSopenharmony_ci local mkswap_op="$1" 40f08c3bdfSopenharmony_ci local op_arg="$2" 41f08c3bdfSopenharmony_ci local swapfile="$3" 42f08c3bdfSopenharmony_ci local dev_file="$5" 43f08c3bdfSopenharmony_ci 44f08c3bdfSopenharmony_ci local before=`awk '/SwapTotal/ {print $2}' /proc/meminfo` 45f08c3bdfSopenharmony_ci 46f08c3bdfSopenharmony_ci local swapsize=${4:-$DEVICE_SIZE} 47f08c3bdfSopenharmony_ci 48f08c3bdfSopenharmony_ci if [ "$mkswap_op" = "-p" ]; then 49f08c3bdfSopenharmony_ci local pagesize=$op_arg 50f08c3bdfSopenharmony_ci else 51f08c3bdfSopenharmony_ci local pagesize=$PAGE_SIZE 52f08c3bdfSopenharmony_ci fi 53f08c3bdfSopenharmony_ci 54f08c3bdfSopenharmony_ci TST_RETRY_FUNC "check_for_file $dev_file" 0 55f08c3bdfSopenharmony_ci 56f08c3bdfSopenharmony_ci swapon $swapfile 2>/dev/null 57f08c3bdfSopenharmony_ci 58f08c3bdfSopenharmony_ci if [ $? -ne 0 ]; then 59f08c3bdfSopenharmony_ci tst_res TINFO "Can not do swapon on $swapfile." 60f08c3bdfSopenharmony_ci if [ $pagesize -ne $PAGE_SIZE ]; then 61f08c3bdfSopenharmony_ci tst_res TINFO "Page size specified by 'mkswap -p' \ 62f08c3bdfSopenharmony_ciis not equal to system's page size." 63f08c3bdfSopenharmony_ci tst_res TINFO "Swapon failed expectedly." 64f08c3bdfSopenharmony_ci return 0 65f08c3bdfSopenharmony_ci fi 66f08c3bdfSopenharmony_ci 67f08c3bdfSopenharmony_ci if [ $swapsize -gt $DEVICE_SIZE ]; then 68f08c3bdfSopenharmony_ci tst_res TINFO "Device size specified by 'mkswap' \ 69f08c3bdfSopenharmony_cigreater than real size." 70f08c3bdfSopenharmony_ci tst_res TINFO "Swapon failed expectedly." 71f08c3bdfSopenharmony_ci return 0 72f08c3bdfSopenharmony_ci fi 73f08c3bdfSopenharmony_ci 74f08c3bdfSopenharmony_ci tst_res TINFO "Swapon failed unexpectedly." 75f08c3bdfSopenharmony_ci return 1 76f08c3bdfSopenharmony_ci fi 77f08c3bdfSopenharmony_ci 78f08c3bdfSopenharmony_ci local after=`awk '/SwapTotal/ {print $2}' /proc/meminfo` 79f08c3bdfSopenharmony_ci 80f08c3bdfSopenharmony_ci local diff=$((after-before)) 81f08c3bdfSopenharmony_ci local filesize=$((swapsize-pagesize/1024)) 82f08c3bdfSopenharmony_ci 83f08c3bdfSopenharmony_ci local ret=0 84f08c3bdfSopenharmony_ci 85f08c3bdfSopenharmony_ci # In general, the swap increment by doing swapon should be equal to 86f08c3bdfSopenharmony_ci # the device size minus a page size, however for some kernels, the 87f08c3bdfSopenharmony_ci # increment we get is not exactly equal to that value, but is equal 88f08c3bdfSopenharmony_ci # to the value minus an extra page size, e.g. on RHEL5.11GA. 89f08c3bdfSopenharmony_ci if [ $diff -ne $filesize ] && \ 90f08c3bdfSopenharmony_ci [ $diff -ne $((filesize-pagesize/1024)) ]; then 91f08c3bdfSopenharmony_ci ret=1 92f08c3bdfSopenharmony_ci fi 93f08c3bdfSopenharmony_ci 94f08c3bdfSopenharmony_ci swapoff $swapfile 2>/dev/null 95f08c3bdfSopenharmony_ci if [ $? -ne 0 ]; then 96f08c3bdfSopenharmony_ci tst_res TWARN "Can not do swapoff on $swapfile." 97f08c3bdfSopenharmony_ci fi 98f08c3bdfSopenharmony_ci 99f08c3bdfSopenharmony_ci return $ret 100f08c3bdfSopenharmony_ci} 101f08c3bdfSopenharmony_ci 102f08c3bdfSopenharmony_cimkswap_test() 103f08c3bdfSopenharmony_ci{ 104f08c3bdfSopenharmony_ci local mkswap_op="$1" 105f08c3bdfSopenharmony_ci local op_arg="$2" 106f08c3bdfSopenharmony_ci local device="$3" 107f08c3bdfSopenharmony_ci local size="$4" 108f08c3bdfSopenharmony_ci local dev_file="$5" 109f08c3bdfSopenharmony_ci 110f08c3bdfSopenharmony_ci local mkswap_cmd="mkswap $mkswap_op $op_arg $TST_DEVICE $size" 111f08c3bdfSopenharmony_ci 112f08c3bdfSopenharmony_ci ${mkswap_cmd} >temp 2>&1 113f08c3bdfSopenharmony_ci if [ $? -ne 0 ]; then 114f08c3bdfSopenharmony_ci grep -q -E "unknown option|invalid option|Usage" temp 115f08c3bdfSopenharmony_ci if [ $? -eq 0 ]; then 116f08c3bdfSopenharmony_ci tst_res TCONF "'${mkswap_cmd}' not supported." 117f08c3bdfSopenharmony_ci return 118f08c3bdfSopenharmony_ci fi 119f08c3bdfSopenharmony_ci 120f08c3bdfSopenharmony_ci tst_res TFAIL "'${mkswap_cmd}' failed." 121f08c3bdfSopenharmony_ci cat temp 122f08c3bdfSopenharmony_ci return 123f08c3bdfSopenharmony_ci fi 124f08c3bdfSopenharmony_ci 125f08c3bdfSopenharmony_ci udevadm trigger --name-match=$TST_DEVICE 126f08c3bdfSopenharmony_ci udevadm settle --exit-if-exists==$TST_DEVICE 127f08c3bdfSopenharmony_ci 128f08c3bdfSopenharmony_ci if [ -n "$device" ]; then 129f08c3bdfSopenharmony_ci mkswap_verify "$mkswap_op" "$op_arg" "$device" "$size" "$dev_file" 130f08c3bdfSopenharmony_ci if [ $? -ne 0 ]; then 131f08c3bdfSopenharmony_ci tst_res TFAIL "'${mkswap_cmd}' failed, not expected." 132f08c3bdfSopenharmony_ci return 133f08c3bdfSopenharmony_ci fi 134f08c3bdfSopenharmony_ci fi 135f08c3bdfSopenharmony_ci 136f08c3bdfSopenharmony_ci tst_res TPASS "'${mkswap_cmd}' passed." 137f08c3bdfSopenharmony_ci} 138f08c3bdfSopenharmony_ci 139f08c3bdfSopenharmony_cido_test() 140f08c3bdfSopenharmony_ci{ 141f08c3bdfSopenharmony_ci case $1 in 142f08c3bdfSopenharmony_ci 1) mkswap_test "" "" "$TST_DEVICE";; 143f08c3bdfSopenharmony_ci 2) mkswap_test "" "" "$TST_DEVICE" "$((DEVICE_SIZE-PAGE_SIZE/1024))";; 144f08c3bdfSopenharmony_ci 3) mkswap_test "-f" "" "$TST_DEVICE" "$((DEVICE_SIZE+PAGE_SIZE/1024))";; 145f08c3bdfSopenharmony_ci 4) mkswap_test "-c" "" "$TST_DEVICE";; 146f08c3bdfSopenharmony_ci 5) mkswap_test "-p" "2048" "$TST_DEVICE";; 147f08c3bdfSopenharmony_ci 6) mkswap_test "-L" "ltp_testswap" "-L ltp_testswap" "" "/dev/disk/by-label/ltp_testswap";; 148f08c3bdfSopenharmony_ci 7) mkswap_test "-v1" "" "$TST_DEVICE";; 149f08c3bdfSopenharmony_ci 8) mkswap_test "-U" "$UUID" "-U $UUID" "" "/dev/disk/by-uuid/$UUID";; 150f08c3bdfSopenharmony_ci 9) mkswap_test "-V";; 151f08c3bdfSopenharmony_ci 10) mkswap_test "-h";; 152f08c3bdfSopenharmony_ci esac 153f08c3bdfSopenharmony_ci} 154f08c3bdfSopenharmony_ci 155f08c3bdfSopenharmony_ci. tst_test.sh 156f08c3bdfSopenharmony_citst_run 157