Using regex for exit/vpn
[oweals/gnunet.git] / src / include / gnunet_testing_lib.h
index 786522cddb9e6d1f2e491c676d96665b5eb0a6b7..b170670d1ffe92a3d8230dd73142c77783759f23 100644 (file)
@@ -304,9 +304,34 @@ struct GNUNET_TESTING_Daemon
   void *update_cb_cls;
 
   /**
-   * PID of the process that we started last.
+   * PID of the process we used to run gnunet-arm or SSH to start the peer.
    */
-  struct GNUNET_OS_Process *proc;
+  struct GNUNET_OS_Process *proc_arm_start;
+
+  /**
+   * PID of the process we used to run gnunet-arm or SSH to stop the peer.
+   */
+  struct GNUNET_OS_Process *proc_arm_stop;
+
+  /**
+   * PID of the process we used to run gnunet-arm or SSH to manage services at the peer.
+   */
+  struct GNUNET_OS_Process *proc_arm_srv_start;
+
+  /**
+   * PID of the process we used to run gnunet-arm or SSH to manage services at the peer.
+   */
+  struct GNUNET_OS_Process *proc_arm_srv_stop;
+
+  /**
+   * PID of the process we used to run copy files
+   */
+  struct GNUNET_OS_Process *proc_arm_copying;
+
+  /**
+   * PID of the process we used to run gnunet-peerinfo.
+   */
+  struct GNUNET_OS_Process *proc_arm_peerinfo;
 
   /**
    * Handle to the server.
@@ -318,6 +343,11 @@ struct GNUNET_TESTING_Daemon
    */
   struct GNUNET_TRANSPORT_Handle *th;
 
+  /**
+   * Handle for getting HELLOs from transport
+   */
+  struct GNUNET_TRANSPORT_GetHelloHandle *ghh;
+
   /**
    * HELLO message for this peer
    */
@@ -427,6 +457,7 @@ typedef void (*GNUNET_TESTING_NotifyConnection) (void *cls,
                                                  second_daemon,
                                                  const char *emsg);
 
+
 /**
  * Prototype of a callback function indicating that two peers
  * are currently connected.
@@ -492,12 +523,25 @@ GNUNET_TESTING_daemon_continue_startup (struct GNUNET_TESTING_Daemon *daemon);
  * Check whether the given daemon is running.
  *
  * @param daemon the daemon to check
- *
  * @return GNUNET_YES if the daemon is up, GNUNET_NO if the
  *         daemon is down, GNUNET_SYSERR on error.
  */
 int
-GNUNET_TESTING_daemon_running (struct GNUNET_TESTING_Daemon *daemon);
+GNUNET_TESTING_test_daemon_running (struct GNUNET_TESTING_Daemon *daemon);
+
+
+/**
+ * Obtain the peer identity of the peer with the given configuration
+ * handle.  This function reads the private key of the peer, obtains
+ * the public key and hashes it.
+ *
+ * @param cfg configuration of the peer
+ * @param pid where to store the peer identity
+ * @return GNUNET_OK on success, GNUNET_SYSERR on failure
+ */
+int
+GNUNET_TESTING_get_peer_identity (const struct GNUNET_CONFIGURATION_Handle *cfg,
+                                 struct GNUNET_PeerIdentity *pid);
 
 
 /**
@@ -540,7 +584,7 @@ GNUNET_TESTING_daemon_start_stopped (struct GNUNET_TESTING_Daemon *daemon,
  */
 void
 GNUNET_TESTING_daemon_start_service (struct GNUNET_TESTING_Daemon *d,
-                                     char *service,
+                                     const char *service,
                                      struct GNUNET_TIME_Relative timeout,
                                      GNUNET_TESTING_NotifyDaemonRunning cb,
                                      void *cb_cls);
@@ -586,7 +630,7 @@ GNUNET_TESTING_daemon_get (struct GNUNET_TESTING_PeerGroup *pg,
  */
 struct GNUNET_TESTING_Daemon *
 GNUNET_TESTING_daemon_get_by_id (struct GNUNET_TESTING_PeerGroup *pg,
-                                 struct GNUNET_PeerIdentity *peer_id);
+                                 const struct GNUNET_PeerIdentity *peer_id);
 
 
 /**
@@ -609,6 +653,29 @@ GNUNET_TESTING_daemon_stop (struct GNUNET_TESTING_Daemon *d,
                             int delete_files, int allow_restart);
 
 
+
+/**
+ * Create a new configuration using the given configuration
+ * as a template; however, each PORT in the existing cfg
+ * must be renumbered by incrementing "*port".  If we run
+ * out of "*port" numbers, return NULL.
+ *
+ * @param cfg template configuration
+ * @param off the current peer offset
+ * @param port port numbers to use, update to reflect
+ *             port numbers that were used
+ * @param upnum number to make unix domain socket names unique
+ * @param hostname hostname of the controlling host, to allow control connections from
+ * @param fdnum number used to offset the unix domain socket for grouped processes
+ *              (such as statistics or peerinfo, which can be shared among others)
+ *
+ * @return new configuration, NULL on error
+ */
+struct GNUNET_CONFIGURATION_Handle *
+GNUNET_TESTING_create_cfg (const struct GNUNET_CONFIGURATION_Handle *cfg, uint32_t off,
+             uint16_t * port, uint32_t * upnum, const char *hostname,
+             uint32_t * fdnum);
+
 /**
  * Changes the configuration of a GNUnet daemon.
  *
@@ -638,7 +705,7 @@ GNUNET_TESTING_daemon_reconfigure (struct GNUNET_TESTING_Daemon *d,
  */
 void
 GNUNET_TESTING_daemon_stop_service (struct GNUNET_TESTING_Daemon *d,
-                                    char *service,
+                                    const char *service,
                                     struct GNUNET_TIME_Relative timeout,
                                     GNUNET_TESTING_NotifyCompletion cb,
                                     void *cb_cls);
@@ -710,7 +777,16 @@ GNUNET_TESTING_daemons_continue_startup (struct GNUNET_TESTING_PeerGroup *pg);
 
 
 /**
- * Establish a connection between two GNUnet daemons.
+ * Handle for an active request to connect two peers.
+ */
+struct GNUNET_TESTING_ConnectContext;
+
+
+/**
+ * Establish a connection between two GNUnet daemons.  The daemons
+ * must both be running and not be stopped until either the
+ * 'cb' callback is called OR the connection request has been
+ * explicitly cancelled.
  *
  * @param d1 handle for the first daemon
  * @param d2 handle for the second daemon
@@ -722,6 +798,7 @@ GNUNET_TESTING_daemons_continue_startup (struct GNUNET_TESTING_PeerGroup *pg);
  *                   the HELLO has already been exchanged
  * @param cb function to call at the end
  * @param cb_cls closure for cb
+ * @return handle to cancel the request, NULL on error
  */
 struct GNUNET_TESTING_ConnectContext *
 GNUNET_TESTING_daemons_connect (struct GNUNET_TESTING_Daemon *d1,
@@ -733,6 +810,7 @@ GNUNET_TESTING_daemons_connect (struct GNUNET_TESTING_Daemon *d1,
                                 void *cb_cls);
 
 
+
 /**
  * Cancel an attempt to connect two daemons.
  *
@@ -743,6 +821,7 @@ GNUNET_TESTING_daemons_connect_cancel (struct GNUNET_TESTING_ConnectContext
                                        *cc);
 
 
+
 /**
  * Restart all peers in the given group.
  *