swapon01.c revision ac9784e4b6099dba38e356f4dde08a8d91846a48
1ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew/* 2ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * Copyright (c) Wipro Technologies Ltd, 2002. All Rights Reserved. 3ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * 4ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * This program is free software; you can redistribute it and/or modify it 5ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * under the terms of version 2 of the GNU General Public License as 6ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * published by the Free Software Foundation. 7ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * 8ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * This program is distributed in the hope that it would be useful, but 9ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * WITHOUT ANY WARRANTY; without even the implied warranty of 10ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * 12ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * You should have received a copy of the GNU General Public License along 13ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * with this program; if not, write the Free Software Foundation, Inc., 59 14ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * Temple Place - Suite 330, Boston MA 02111-1307, USA. 15ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * 16ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew */ 17ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew/************************************************************************** 18ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * 19ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * TEST IDENTIFIER : swapon1 20ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * 21ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * EXECUTED BY : root / superuser 22ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * 23ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * TEST TITLE : Basic test for swapon(2) 24ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * 25ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * TEST CASE TOTAL : 1 26ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * 27ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * AUTHOR : Aniruddha Marathe <aniruddha.marathe@wipro.com> 28ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * 29ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * SIGNALS 30ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * Uses SIGUSR1 to pause before test if option set. 31ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * (See the parse_opts(3) man page). 32ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * 33ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * DESCRIPTION 34ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * This is a Phase I test for the swapon(2) system call. 35ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * It is intended to provide a limited exposure of the system call. 36ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * 37ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * Setup: 38ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * Setup signal handling. 39ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * Pause for SIGUSR1 if option specified. 40ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * Create a temporary directory. 41ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * Create file of size 40K ( minimum swapfile size). 42ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * Make this file as swap file using mkswap(8) 43ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * 44ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * Test: 45ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * Loop if the proper options are given. 46ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * Turn on the swapfile to test the system call 47ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * Execute system call 48ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * Check return code, if system call failed (return=-1) 49ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * Log the errno and Issue a FAIL message. 50ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * Otherwise, Issue a PASS message. 51ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * 52ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * Cleanup: 53ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * Print errno log and/or timing stats if options given 54ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * 55ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * USAGE: <for command-line> 56ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * swapon01 [-c n] [-e] [-i n] [-I x] [-P x] [-t] [-h] [-f] [-p] 57ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * where: 58ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * -c n : run n copies simultaneously. 59ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * -e : Turn on errno logging. 60ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * -i n : Execute test n times. 61ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * -I x : Execute test for x seconds. 62ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * -p : Pause for SIGUSR1 before starting 63ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * -P x : Pause for x seconds between iterations. 64ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * -t : Turn on syscall timing. 65ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * 66ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew *RESTRICTIONS: 67ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * Not compatible with kernel versions below 2.1.35 68ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew *****************************************************************************/ 69ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 70ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew#include <unistd.h> 71ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew#include "test.h" 72ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew#include "usctest.h" 73ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew#include <errno.h> 74ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew#include <sys/swap.h> 75ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew#include <stdlib.h> 76ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 77ac9784e4b6099dba38e356f4dde08a8d91846a48robbiewstatic void setup(); 78ac9784e4b6099dba38e356f4dde08a8d91846a48robbiewstatic void cleanup(); 79ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 80ac9784e4b6099dba38e356f4dde08a8d91846a48robbiewchar *TCID = "swapon01"; /* Test program identifier. */ 81ac9784e4b6099dba38e356f4dde08a8d91846a48robbiewint TST_TOTAL = 1; /* Total number of test cases. */ 82ac9784e4b6099dba38e356f4dde08a8d91846a48robbiewextern int Tst_count; /* Test Case counter for tst_* routines */ 83ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 84ac9784e4b6099dba38e356f4dde08a8d91846a48robbiewint 85ac9784e4b6099dba38e356f4dde08a8d91846a48robbiewmain(int ac, char **av) 86ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew{ 87ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 88ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew int lc; /* loop counter */ 89ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew char *msg; /* message returned from parse_opts */ 90ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 91ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew /* parse standard options */ 92ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) 93ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew != (char *)NULL) { 94ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg); 95ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew } 96ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 97ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew /* perform global setup for test */ 98ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew setup(); 99ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 100ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew /* check looping state if -i option given */ 101ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew for (lc = 0; TEST_LOOPING(lc); lc++) { 102ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 103ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew /* reset Tst_count in case we are looping. */ 104ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew Tst_count = 0; 105ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 106ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew TEST(swapon("./swapfile01", 0)); 107ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 108ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew /* check return code */ 109ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew if (TEST_RETURN == -1) { 110ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew TEST_ERROR_LOG(TEST_ERRNO); 111ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew tst_resm(TFAIL, "swapon(2) Failed to turn on" 112ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew " swapfile."); 113ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew } else { 114ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew tst_resm(TPASS, "swapon(2) passed and turned on" 115ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew " swapfile"); 116ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew /*we need to turn this swap file off for -i option */ 117ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew if(swapoff("./swapfile01") != 0) { 118ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew tst_brkm(TBROK, cleanup, "Failed to turn off" 119ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew " swapfile. system" 120ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew " reboot after" 121ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew " execution of LTP" 122ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew " test suite is" 123ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew " recommended."); 124ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew } 125ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew } 126ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew } /*End for TEST_LOOPING*/ 127ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 128ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew /*Clean up and exit*/ 129ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew cleanup(); 130ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 131ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew /*NOTREACHED*/ 132ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew return 0; 133ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew} 134ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 135ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew/* setup() - performs all ONE TIME setup for this test */ 136ac9784e4b6099dba38e356f4dde08a8d91846a48robbiewvoid 137ac9784e4b6099dba38e356f4dde08a8d91846a48robbiewsetup() 138ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew{ 139ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew /* capture signals */ 140ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew tst_sig(FORK, DEF_HANDLER, cleanup); 141ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 142ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew /* Check whether we are root*/ 143ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew if (geteuid() != 0) { 144ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew tst_brkm(TBROK, tst_exit, "Test must be run as root"); 145ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew } 146ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 147ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew /* Pause if that option was specified */ 148ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew TEST_PAUSE; 149ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 150ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew /* make a temp directory and cd to it */ 151ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew tst_tmpdir(); 152ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 153ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew /*create file*/ 154ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew if(system("dd if=/dev/zero of=swapfile01 bs=1048 count=40 >" 155ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew " tmpfile 2>&1") != 0) { 156ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew tst_brkm(TBROK, cleanup, "Failed to create file for swap"); 157ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew } 158ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 159ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew /* make above file a swap file*/ 160ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew if( system("mkswap swapfile01 > tmpfile 2>&1") != 0) { 161ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew tst_brkm(TBROK, cleanup, "Failed to make swapfile"); 162ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew } 163ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew} /* End setup() */ 164ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 165ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew/* 166ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * cleanup() - Performs one time cleanup for this test at 167ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * completion or premature exit 168ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew */ 169ac9784e4b6099dba38e356f4dde08a8d91846a48robbiewvoid 170ac9784e4b6099dba38e356f4dde08a8d91846a48robbiewcleanup() 171ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew{ 172ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew /* 173ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * print timing stats if that option was specified. 174ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew * print errno log if that option was specified. 175ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew */ 176ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew TEST_CLEANUP; 177ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 178ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew /* Remove tmp dir and all files inside it. */ 179ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew tst_rmdir(); 180ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew 181ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew /* exit with return code appropriate for results */ 182ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew tst_exit(); 183ac9784e4b6099dba38e356f4dde08a8d91846a48robbiew} /* End cleanup() */ 184