root/opal/mca/pmix/pmix4x/pmix/test/test_error.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. comfail_errhandler
  2. timeout_errhandler
  3. op1_callbk
  4. errhandler_reg_callbk1
  5. test_error

   1 /*
   2  * Copyright (c) 2015-2016 Intel, Inc.  All rights reserved.
   3  * $COPYRIGHT$
   4  *
   5  * Additional copyrights may follow
   6  *
   7  * $HEADER$
   8  *
   9  */
  10 #include <time.h>
  11 #include "test_error.h"
  12 #include "test_common.h"
  13 
  14 #define MAX_ERR_HANDLERS 5
  15 #define TEST_NOTIFY PMIX_ERR_TIMEOUT
  16 static bool done;
  17 static void comfail_errhandler(size_t evhdlr_registration_id,
  18                                pmix_status_t status,
  19                                const pmix_proc_t *source,
  20                                pmix_info_t info[], size_t ninfo,
  21                                pmix_info_t results[], size_t nresults,
  22                                pmix_event_notification_cbfunc_fn_t cbfunc,
  23                                void *cbdata)
  24 {
  25     TEST_ERROR(("comfail errhandler called for error status = %d ninfo = %lu",
  26                   status, (unsigned long)ninfo));
  27     if (NULL != cbfunc) {
  28         cbfunc(PMIX_SUCCESS, NULL, 0, NULL, NULL, cbdata);
  29     }
  30 }
  31 
  32 static void timeout_errhandler(size_t evhdlr_registration_id,
  33                                pmix_status_t status,
  34                                const pmix_proc_t *source,
  35                                pmix_info_t info[], size_t ninfo,
  36                                pmix_info_t results[], size_t nresults,
  37                                pmix_event_notification_cbfunc_fn_t cbfunc,
  38                                void *cbdata)
  39 {
  40     TEST_ERROR(("timeout errhandler called for error status = %d ninfo = %d",
  41                   status, ninfo));
  42     if (NULL != cbfunc) {
  43         cbfunc(PMIX_SUCCESS, NULL, 0, NULL, NULL, cbdata);
  44     }
  45 }
  46 
  47 static void op1_callbk(pmix_status_t status,
  48                        void *cbdata)
  49 {
  50     TEST_VERBOSE(( "op1_callbk CALLED WITH STATUS %d", status));
  51     done = true;
  52 }
  53 
  54 static void errhandler_reg_callbk1 (pmix_status_t status,
  55                                    size_t errhandler_ref,
  56                                    void *cbdata)
  57 {
  58     size_t *ref = (size_t*) cbdata;
  59     *ref = errhandler_ref;
  60     TEST_VERBOSE(("PMIX client ERRHANDLER REGISTRATION CALLED WITH STATUS %d, ref=%lu",
  61                   status, *ref, (unsigned long)errhandler_ref));
  62 
  63 }
  64 
  65 int test_error(char *my_nspace, int my_rank, test_params params)
  66 {
  67     size_t errhandler_refs[MAX_ERR_HANDLERS];
  68     struct timespec ts;
  69     pmix_status_t status;
  70     pmix_proc_t source;
  71 
  72     TEST_VERBOSE(("test-error: running  error handling test cases"));
  73     /* register specific client error handlers and test their invocation
  74      * by  trigerring events  from server side*/
  75     status = PMIX_ERR_TIMEOUT;
  76     PMIx_Register_event_handler(&status, 1, NULL, 0,
  77                                 timeout_errhandler, errhandler_reg_callbk1, &errhandler_refs[0]);
  78 
  79     /* reg a handler for comm errors */
  80     status = PMIX_ERR_LOST_PEER_CONNECTION;
  81     PMIx_Register_event_handler(&status, 1, NULL, 0,
  82                                 comfail_errhandler, errhandler_reg_callbk1, &errhandler_refs[1]);
  83     /* inject error from client */
  84     done = false;
  85     (void)strncpy(source.nspace, my_nspace, PMIX_MAX_NSLEN);
  86     source.rank = my_rank;
  87     /* change error value to test other error notifications */
  88     PMIx_Notify_event(TEST_NOTIFY,
  89                       &source, PMIX_RANGE_NAMESPACE,
  90                       NULL, 0,
  91                       op1_callbk, NULL);
  92     while(!done) {
  93         ts.tv_sec = 0;
  94         ts.tv_nsec = 100000;
  95         nanosleep(&ts, NULL);
  96     }
  97     done = false;
  98     /* dereg all handlers*/
  99     PMIx_Deregister_event_handler( errhandler_refs[0], op1_callbk, NULL);
 100     /* loop until we get callback */
 101     while(!done) {
 102         ts.tv_sec = 0;
 103         ts.tv_nsec = 100000;
 104         nanosleep(&ts, NULL);
 105     }
 106     done = false;
 107     PMIx_Deregister_event_handler( errhandler_refs[1], op1_callbk, NULL);
 108     /* loop until we get callback */
 109     while(!done) {
 110         ts.tv_sec = 0;
 111         ts.tv_nsec = 100000;
 112         nanosleep(&ts, NULL);
 113     }
 114     return PMIX_SUCCESS;
 115 }

/* [<][>][^][v][top][bottom][index][help] */