- dont resend useless channel_destroy messages
[oweals/gnunet.git] / src / identity / test_identity.c
index 7c429770b33ed55a61c4d5acf55c42273d3e8d41..6797afe3cd0c5ee03b8839ba2637fd9e4a47f1d7 100644 (file)
@@ -24,7 +24,6 @@
  * @author Christian Grothoff
  */
 #include "platform.h"
-#include "gnunet_common.h"
 #include "gnunet_util_lib.h"
 #include "gnunet_identity_service.h"
 #include "gnunet_testing_lib.h"
@@ -50,7 +49,7 @@ static struct GNUNET_IDENTITY_Operation *op;
 
 /**
  * Handle for task for timeout termination.
- */ 
+ */
 static GNUNET_SCHEDULER_TaskIdentifier endbadly_task;
 
 
@@ -105,7 +104,7 @@ end_normally (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 /**
  * Finish the testcase (successfully).
  */
-static void 
+static void
 end ()
 {
   if (endbadly_task != GNUNET_SCHEDULER_NO_TASK)
@@ -113,7 +112,8 @@ end ()
     GNUNET_SCHEDULER_cancel (endbadly_task);
     endbadly_task = GNUNET_SCHEDULER_NO_TASK;
   }
-  GNUNET_SCHEDULER_add_now (&end_normally, NULL);
+  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MILLISECONDS,
+                               &end_normally, NULL);
 }
 
 
@@ -134,7 +134,90 @@ notification_cb (void *cls,
                 void **ctx,
                 const char *identifier)
 {
-  // fprintf (stderr, "Notification: %s\n", identifier);
+  static struct GNUNET_IDENTITY_Ego *my_ego;
+  static int round;
+
+  switch (round)
+  {
+  case 0: /* end of initial iteration */
+    GNUNET_assert (NULL == ego);
+    GNUNET_assert (NULL == identifier);
+    break;
+  case 1: /* create */
+    GNUNET_assert (NULL != ego);
+    GNUNET_assert (0 == strcmp (identifier, "test-id"));
+    my_ego = ego;
+    *ctx = &round;
+    break;
+  case 2: /* rename */
+    GNUNET_assert (my_ego == ego);
+    GNUNET_assert (0 == strcmp (identifier, "test"));
+    GNUNET_assert (*ctx == &round);
+    break;
+  case 3: /* delete */
+    GNUNET_assert (my_ego == ego);
+    GNUNET_assert (NULL == identifier);
+    GNUNET_assert (*ctx == &round);
+    *ctx = NULL;
+    break;
+  default:
+    GNUNET_break (0);
+  }
+  round++;
+}
+
+
+/**
+ * Continuation called from successful delete operation.
+ *
+ * @param cls NULL
+ * @param emsg (should also be NULL)
+ */
+static void
+delete_cont (void *cls,
+            const char *emsg)
+{
+  op = NULL;
+  GNUNET_assert (NULL == emsg);
+  end ();
+}
+
+
+/**
+ * Continuation called from expected-to-fail rename operation.
+ *
+ * @param cls NULL
+ * @param emsg (should also be NULL)
+ */
+static void
+fail_rename_cont (void *cls,
+                 const char *emsg)
+{
+  GNUNET_assert (NULL != emsg);
+  op = GNUNET_IDENTITY_delete (h,
+                              "test",
+                              &delete_cont,
+                              NULL);
+   end (); /* yepee */
+}
+
+
+/**
+ * Continuation called from successful rename operation.
+ *
+ * @param cls NULL
+ * @param emsg (should also be NULL)
+ */
+static void
+success_rename_cont (void *cls,
+                    const char *emsg)
+{
+  GNUNET_assert (NULL == emsg);
+  op = GNUNET_IDENTITY_rename (h,
+                              "test-id",
+                              "test",
+                              &fail_rename_cont,
+                              NULL);
 }
 
 
@@ -142,22 +225,18 @@ notification_cb (void *cls,
  * Called with events about created ego.
  *
  * @param cls NULL
- * @param ego ego handle
- * @param ego_ctx context for application to store data for this ego
- *                 (during the lifetime of this process, initially NULL)
- * @param identifier identifier assigned by the user for this ego,
- *                   NULL if the user just deleted the ego and it
- *                   must thus no longer be used
+ * @param emsg error message
  */
 static void
 create_cb (void *cls,
-          struct GNUNET_IDENTITY_Ego *ego,
-          void **ctx,
-          const char *identifier)
+          const char *emsg)
 {
-  op = NULL;
-  // fprintf (stderr, "HERE!\n");
-  end (); /* yepee */
+  GNUNET_assert (NULL == emsg);
+  op = GNUNET_IDENTITY_rename (h,
+                              "test-id",
+                              "test",
+                              &success_rename_cont,
+                              NULL);
 }
 
 
@@ -169,27 +248,28 @@ create_cb (void *cls,
  * @param peer handle to access more of the peer (not used)
  */
 static void
-run (void *cls, 
+run (void *cls,
      const struct GNUNET_CONFIGURATION_Handle *cfg,
      struct GNUNET_TESTING_Peer *peer)
 {
-  endbadly_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, 
-                                               &endbadly, NULL); 
+  endbadly_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT,
+                                               &endbadly, NULL);
   h = GNUNET_IDENTITY_connect (cfg, &notification_cb, NULL);
   GNUNET_assert (NULL != h);
   op = GNUNET_IDENTITY_create (h,
                               "test-id",
                               &create_cb,
                               NULL);
-  
+
 }
 
 
 int
 main (int argc, char *argv[])
 {
+  GNUNET_DISK_directory_remove ("/tmp/test-identity-service");
   res = 1;
-  if (0 != 
+  if (0 !=
       GNUNET_TESTING_service_run ("test-identity",
                                  "identity",
                                  "test_identity.conf",