Home | History | Annotate | Download | only in io_getevents
      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 <errno.h>
     25 #include <string.h>
     26 
     27 #include "config.h"
     28 #include "test.h"
     29 
     30 char *TCID = "io_getevents01";
     31 int TST_TOTAL = 1;
     32 
     33 #ifdef HAVE_LIBAIO
     34 #include <libaio.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 
    108 #else
    109 int main(void)
    110 {
    111 	tst_brkm(TCONF, NULL, "test requires libaio and it's development packages");
    112 }
    113 #endif
    114