/**
 * Callback for lock status changes
 *
 * @param cls the closure from GNUNET_LOCKMANAGER_lock call
 *
 * @param domain_name the locking domain of the lock 
 *
 * @param lock the lock for which this status is relevant
 *
 * @param status GNUNET_LOCKMANAGER_SUCCESS if the lock has been successfully
 *          acquired; GNUNET_LOCKMANAGER_RELEASE when the acquired lock is lost
 */
static void 
status_cb (void *cls,
           const char *domain_name,
           uint32_t lock,
           enum GNUNET_LOCKMANAGER_Status status)
{
  LOG (GNUNET_ERROR_TYPE_DEBUG,
       "Status change callback called on lock: %d of domain: %s\n",
       lock, domain_name);
  switch (result)
  {
  case LOCK1_ACQUIRE:
    GNUNET_assert (GNUNET_LOCKMANAGER_SUCCESS == status);
    GNUNET_assert (NULL != request);
    //GNUNET_LOCKMANAGER_cancel_request (request);
    //request = NULL;
    result = LOCK2_ACQUIRE;
    request2 = GNUNET_LOCKMANAGER_acquire_lock (handle,
                                                "GNUNET_LOCKMANAGER_TESTING",
                                                100,
                                                &status_cb,
                                                NULL);
    GNUNET_assert (NULL != request2);
    break;
  case LOCK2_ACQUIRE:
    GNUNET_assert (GNUNET_LOCKMANAGER_SUCCESS == status);
    GNUNET_assert (NULL != request);
    GNUNET_SCHEDULER_add_delayed (TIME_REL_SECONDS (1),
                                  &do_shutdown,
                                  NULL);
    break;
  default:
    GNUNET_break (0);
  } 
}
/**
 * Testing function
 *
 * @param cls NULL
 * @param tc the task context
 */
static void
test (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{  
  handle = GNUNET_LOCKMANAGER_connect (config);
  GNUNET_assert (NULL != handle);
  result = LOCK1_ACQUIRE;
  request = GNUNET_LOCKMANAGER_acquire_lock (handle,
                                             "GNUNET_LOCKMANAGER_TESTING",
                                             99,
                                             &status_cb,
                                             NULL);
  abort_task_id = GNUNET_SCHEDULER_add_delayed (TIME_REL_SECONDS (10),
                                                &do_abort,
                                                NULL);
}
Пример #3
0
/**
 * Main point of test execution
 */
static void
run (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg,
     struct GNUNET_TESTING_Peer *peer)
{
  LOG (GNUNET_ERROR_TYPE_DEBUG, "Starting test...\n");
  config = cfg;
  handle = GNUNET_LOCKMANAGER_connect (config);
  GNUNET_assert (NULL != handle);
  result = LOCK1_ACQUIRE;
  request =
      GNUNET_LOCKMANAGER_acquire_lock (handle, "GNUNET_LOCKMANAGER_TESTING", 99,
                                       &status_cb, NULL);
  abort_task_id =
      GNUNET_SCHEDULER_add_delayed (TIME_REL_SECONDS (30), &do_abort, NULL);
}
/**
 * Main point of test execution
 */
static void
run (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg,
     struct GNUNET_TESTING_Peer *peer)
{
  config = cfg;
  self = peer;
  result = TEST_INIT;
  handle = GNUNET_LOCKMANAGER_connect (config);
  GNUNET_assert (NULL != handle);
  handle2 = GNUNET_LOCKMANAGER_connect (config);

  request =
      GNUNET_LOCKMANAGER_acquire_lock (handle, "GNUNET_LOCKMANAGER_TESTING", 99,
                                       &status_cb, handle);
  GNUNET_assert (NULL != request);
  abort_task_id =
      GNUNET_SCHEDULER_add_delayed (TIME_REL_SECONDS (10), &do_abort, NULL);
}
/**
 * Callback for lock status changes
 *
 * @param cls the handle
 *
 * @param domain_name the locking domain of the lock
 *
 * @param lock the lock for which this status is relevant
 *
 * @param status GNUNET_LOCKMANAGER_SUCCESS if the lock has been successfully
 *          acquired; GNUNET_LOCKMANAGER_RELEASE when the acquired lock is lost
 */
static void
status_cb (void *cls, const char *domain_name, uint32_t lock,
           enum GNUNET_LOCKMANAGER_Status status)
{
  LOG (GNUNET_ERROR_TYPE_DEBUG,
       "Status change callback called on lock: %d of domain: %s\n", lock,
       domain_name);
  switch (result)
  {
  case TEST_INIT:
    GNUNET_assert (handle == cls);
    GNUNET_assert (GNUNET_LOCKMANAGER_SUCCESS == status);
    result = TEST_CLIENT1_LOCK_SUCCESS;
    request2 =
        GNUNET_LOCKMANAGER_acquire_lock (handle2, "GNUNET_LOCKMANAGER_TESTING",
                                         99, &status_cb, handle2);
    GNUNET_assert (NULL != request2);
    GNUNET_LOCKMANAGER_cancel_request (request);
    request = NULL;
    break;
  case TEST_CLIENT1_LOCK_SUCCESS:
    GNUNET_assert (handle2 == cls);
    GNUNET_assert (GNUNET_LOCKMANAGER_SUCCESS == status);
    result = TEST_CLIENT2_LOCK_SUCCESS;
    /* We should stop our peer to simulate crash in lockmanager service */
    GNUNET_TESTING_peer_stop (self);
    break;
  case TEST_CLIENT2_LOCK_SUCCESS:
    GNUNET_assert (handle2 == cls);
    GNUNET_assert (GNUNET_LOCKMANAGER_RELEASE == status);
    GNUNET_assert (99 == lock);
    GNUNET_assert (0 == strcmp (domain_name, "GNUNET_LOCKMANAGER_TESTING"));
    result = TEST_CLIENT2_SERVER_CRASH_SUCCESS;
    GNUNET_LOCKMANAGER_cancel_request (request2);
    request2 = NULL;
    GNUNET_SCHEDULER_add_delayed (TIME_REL_SECONDS (1), &do_shutdown, NULL);
    break;
  default:
    GNUNET_assert (0);          /* We should never reach here */
  }
}