1 /* 2 * 3 * Copyright (c) Crackerjack Project., 2007 4 * Copyright (c) 2011 Cyril Hrubis <chrubis (at) suse.cz> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 14 * the GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 /* Porting from Crackerjack to LTP is done 22 by Masatake YAMATO <yamato (at) redhat.com> */ 23 24 #include "config.h" 25 #include "test.h" 26 27 char *TCID = "io_getevents01"; 28 29 int TST_TOTAL = 1; 30 31 #ifdef HAVE_LIBAIO_H 32 #include <libaio.h> 33 #include <errno.h> 34 #include <string.h> 35 36 static void cleanup(void) 37 { 38 } 39 40 static void setup(void) 41 { 42 tst_sig(NOFORK, DEF_HANDLER, cleanup); 43 44 TEST_PAUSE; 45 } 46 47 /* 48 DESCRIPTION 49 io_getevents attempts to read at least min_nr events and up to nr 50 events from the completion queue of the AIO context specified by 51 ctx_id. timeout specifies the amount of time to wait for events, 52 where a NULL timeout waits until at least min_nr events have been 53 seen. Note that timeout is relative and will be updated if not NULL 54 and the operation blocks. 55 56 RETURN VALUE 57 io_getevents returns the number of events read: 0 if no events are 58 available or < min_nr if the timeout has elapsed. 59 60 ERRORS 61 EINVAL ctx_id is invalid. min_nr is out of range or nr is out of 62 range. 63 */ 64 65 #define EXP_RET (-EINVAL) 66 67 int main(int argc, char *argv[]) 68 { 69 int lc; 70 71 io_context_t ctx; 72 73 memset(&ctx, 0, sizeof(ctx)); 74 75 tst_parse_opts(argc, argv, NULL, NULL); 76 77 setup(); 78 79 for (lc = 0; TEST_LOOPING(lc); lc++) { 80 tst_count = 0; 81 82 TEST(io_getevents(ctx, 0, 0, NULL, NULL)); 83 84 switch (TEST_RETURN) { 85 case 0: 86 tst_resm(TFAIL, "call succeeded unexpectedly"); 87 break; 88 case EXP_RET: 89 tst_resm(TPASS, "expected failure - " 90 "returned value = %ld : %s", TEST_RETURN, 91 strerror(-TEST_RETURN)); 92 break; 93 case -ENOSYS: 94 tst_resm(TCONF, "io_cancel returned ENOSYS"); 95 break; 96 default: 97 tst_resm(TFAIL, "unexpected returned value - %s (%i) - " 98 "expected %s (%i)", strerror(-TEST_RETURN), 99 (int)TEST_RETURN, strerror(-EXP_RET), EXP_RET); 100 break; 101 } 102 } 103 104 cleanup(); 105 tst_exit(); 106 } 107 #else 108 int main(int argc, char *argv[]) 109 { 110 tst_brkm(TCONF, NULL, "System doesn't support execution of the test"); 111 } 112 #endif 113