for w32 port
[oweals/gnunet.git] / src / include / gnunet_testing_lib.h
index 5145e2e09850ca25a6c84d6aaa2b0a4fcee72969..3f0aeb1209255d2d1e80e944d3742f1617632a78 100644 (file)
@@ -51,12 +51,30 @@ extern "C"
 struct GNUNET_TESTING_Daemon;
 
 /**
- * Linked list of hostnames to use for starting daemons.
+ * Linked list of hostnames and ports to use for starting daemons.
  */
 struct GNUNET_TESTING_Host
 {
+  /**
+   * Pointer to next item in the list.
+   */
   struct GNUNET_TESTING_Host *next;
+
+  /**
+   * Hostname to connect to.
+   */
   char *hostname;
+
+  /**
+   * Username to use when connecting (may be null).
+   */
+  char *username;
+
+  /**
+   * Port to use for SSH connection (used for ssh
+   * connection forwarding, 0 to let ssh decide)
+   */
+  uint16_t port;
 };
 
 /**
@@ -206,6 +224,11 @@ struct GNUNET_TESTING_Daemon
    */
   char *hostname;
 
+  /**
+   * Port to use for ssh, NULL to let system choose default.
+   */
+  char *ssh_port_str;
+
   /**
    * Result of GNUNET_i2s of this peer,
    * for printing
@@ -392,11 +415,13 @@ typedef void (*GNUNET_TESTING_NotifyTopology)(void *cls,
  * @param timeout how long to wait starting up peers
  * @param hostname name of the machine where to run GNUnet
  *        (use NULL for localhost).
+ * @param ssh_username ssh username to use when connecting to hostname
+ * @param sshport port to pass to ssh process when connecting to hostname
  * @param hostkey_callback function to call once the hostkey has been
  *        generated for this peer, but it hasn't yet been started
  *        (NULL to start immediately, otherwise waits on GNUNET_TESTING_daemon_continue_start)
  * @param hostkey_cls closure for hostkey callback
- * @param cb function to call with the result
+ * @param cb function to call once peer is up, or failed to start
  * @param cb_cls closure for cb
  * @return handle to the daemon (actual start will be completed asynchronously)
  */
@@ -405,6 +430,8 @@ GNUNET_TESTING_daemon_start (struct GNUNET_SCHEDULER_Handle *sched,
                              const struct GNUNET_CONFIGURATION_Handle *cfg,
                              struct GNUNET_TIME_Relative timeout,
                              const char *hostname,
+                             const char *ssh_username,
+                             uint16_t sshport,
                              GNUNET_TESTING_NotifyHostkeyCreated hostkey_callback,
                              void *hostkey_cls,
                              GNUNET_TESTING_NotifyDaemonRunning cb,
@@ -420,6 +447,17 @@ GNUNET_TESTING_daemon_start (struct GNUNET_SCHEDULER_Handle *sched,
 void
 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);
+
 /**
  * Restart (stop and start) a GNUnet daemon.
  *
@@ -456,6 +494,18 @@ struct GNUNET_TESTING_Daemon *
 GNUNET_TESTING_daemon_get (struct GNUNET_TESTING_PeerGroup *pg, 
                           unsigned int position);
 
+/*
+ * Get a daemon by peer identity, so callers can
+ * retrieve the daemon without knowing it's offset.
+ *
+ * @param pg the peer group to retrieve the daemon from
+ * @param peer_id the peer identity of the daemon to retrieve
+ *
+ * @return the daemon on success, or NULL if no such peer identity is found
+ */
+struct GNUNET_TESTING_Daemon *
+GNUNET_TESTING_daemon_get_by_id (struct GNUNET_TESTING_PeerGroup *pg,
+                                 struct GNUNET_PeerIdentity *peer_id);
 
 /**
  * Stops a GNUnet daemon.
@@ -586,6 +636,16 @@ GNUNET_TESTING_daemons_stop (struct GNUNET_TESTING_PeerGroup *pg,
                              void *cb_cls);
 
 
+/**
+ * Count the number of running peers.
+ *
+ * @param pg handle for the peer group
+ *
+ * @return the number of currently running peers in the peer group
+ */
+unsigned int
+GNUNET_TESTING_daemons_running (struct GNUNET_TESTING_PeerGroup *pg);
+
 /**
  * Simulate churn by stopping some peers (and possibly
  * re-starting others if churn is called multiple times).  This
@@ -728,6 +788,13 @@ enum GNUNET_TESTING_TopologyOption
    */
   GNUNET_TESTING_TOPOLOGY_OPTION_DFS,
 
+  /**
+   * Find the N closest peers to each allowed peer in the
+   * topology and make sure a connection to those peers
+   * exists in the connect topology.
+   */
+  GNUNET_TESTING_TOPOLOGY_OPTION_ADD_CLOSEST,
+
   /**
    * No options specified.
    */