X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Finclude%2Fgnunet_testing_lib.h;h=b170670d1ffe92a3d8230dd73142c77783759f23;hb=211fd52268a5ae7856273dd8d8b3b3ed427beadb;hp=5bedc406c05fbbc03958d252e16c8c479e324d14;hpb=16a6919a9f98ee9fa1fee9dd262906c321004a19;p=oweals%2Fgnunet.git diff --git a/src/include/gnunet_testing_lib.h b/src/include/gnunet_testing_lib.h index 5bedc406c..b170670d1 100644 --- a/src/include/gnunet_testing_lib.h +++ b/src/include/gnunet_testing_lib.h @@ -114,7 +114,6 @@ typedef void (*GNUNET_TESTING_NotifyDaemonRunning) (void *cls, struct GNUNET_TESTING_Daemon * d, const char *emsg); - /** * Handle to an entire testbed of GNUnet peers. */ @@ -305,38 +304,34 @@ struct GNUNET_TESTING_Daemon void *update_cb_cls; /** - * Identity of this peer (once started). + * PID of the process we used to run gnunet-arm or SSH to start the peer. */ - struct GNUNET_PeerIdentity id; + struct GNUNET_OS_Process *proc_arm_start; /** - * Flag to indicate that we've already been asked - * to terminate (but could not because some action - * was still pending). + * PID of the process we used to run gnunet-arm or SSH to stop the peer. */ - int dead; + struct GNUNET_OS_Process *proc_arm_stop; /** - * GNUNET_YES if the hostkey has been created - * for this peer, GNUNET_NO otherwise. + * PID of the process we used to run gnunet-arm or SSH to manage services at the peer. */ - int have_hostkey; + struct GNUNET_OS_Process *proc_arm_srv_start; /** - * PID of the process that we started last. + * PID of the process we used to run gnunet-arm or SSH to manage services at the peer. */ - struct GNUNET_OS_Process *proc; + struct GNUNET_OS_Process *proc_arm_srv_stop; /** - * In which phase are we during the start of - * this process? + * PID of the process we used to run copy files */ - enum GNUNET_TESTING_StartPhase phase; + struct GNUNET_OS_Process *proc_arm_copying; /** - * ID of the current task. + * PID of the process we used to run gnunet-peerinfo. */ - GNUNET_SCHEDULER_TaskIdentifier task; + struct GNUNET_OS_Process *proc_arm_peerinfo; /** * Handle to the server. @@ -348,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 */ @@ -359,9 +359,41 @@ struct GNUNET_TESTING_Daemon struct GNUNET_DISK_PipeHandle *pipe_stdout; /** - * Output from gnunet-peerinfo is read into this buffer. + * Currently, a single char * pointing to a service + * that has been churned off. + * + * FIXME: make this a linked list of services that have been churned off!!! */ - char hostkeybuf[105]; + char *churned_services; + + /** + * ID of the current task. + */ + GNUNET_SCHEDULER_TaskIdentifier task; + + /** + * Identity of this peer (once started). + */ + struct GNUNET_PeerIdentity id; + + /** + * Flag to indicate that we've already been asked + * to terminate (but could not because some action + * was still pending). + */ + int dead; + + /** + * GNUNET_YES if the hostkey has been created + * for this peer, GNUNET_NO otherwise. + */ + int have_hostkey; + + /** + * In which phase are we during the start of + * this process? + */ + enum GNUNET_TESTING_StartPhase phase; /** * Current position in 'hostkeybuf' (for reading from gnunet-peerinfo) @@ -380,12 +412,10 @@ struct GNUNET_TESTING_Daemon int churn; /** - * Currently, a single char * pointing to a service - * that has been churned off. - * - * FIXME: make this a linked list of services that have been churned off!!! + * Output from gnunet-peerinfo is read into this buffer. */ - char *churned_services; + char hostkeybuf[105]; + }; @@ -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. @@ -443,6 +474,7 @@ typedef void (*GNUNET_TESTING_NotifyTopology) (void *cls, const struct GNUNET_PeerIdentity * second, const char *emsg); + /** * Starts a GNUnet daemon. GNUnet must be installed on the target * system and available in the PATH. The machine must furthermore be @@ -486,16 +518,31 @@ GNUNET_TESTING_daemon_start (const struct GNUNET_CONFIGURATION_Handle *cfg, 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); +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); + /** * Restart (stop and start) a GNUnet daemon. @@ -509,6 +556,7 @@ GNUNET_TESTING_daemon_restart (struct GNUNET_TESTING_Daemon *d, GNUNET_TESTING_NotifyDaemonRunning cb, void *cb_cls); + /** * Start a peer that has previously been stopped using the daemon_stop * call (and files weren't deleted and the allow restart flag) @@ -524,6 +572,7 @@ GNUNET_TESTING_daemon_start_stopped (struct GNUNET_TESTING_Daemon *daemon, GNUNET_TESTING_NotifyDaemonRunning cb, void *cb_cls); + /** * Starts a GNUnet daemon's service. * @@ -535,11 +584,12 @@ 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); + /** * Starts a GNUnet daemon's service which has been previously turned off. * @@ -557,6 +607,7 @@ GNUNET_TESTING_daemon_start_stopped_service (struct GNUNET_TESTING_Daemon *d, GNUNET_TESTING_NotifyDaemonRunning cb, void *cb_cls); + /** * Get a certain testing daemon handle. * @@ -567,7 +618,8 @@ 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. * @@ -578,7 +630,8 @@ 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); + /** * Stops a GNUnet daemon. @@ -600,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. * @@ -614,6 +690,7 @@ GNUNET_TESTING_daemon_reconfigure (struct GNUNET_TESTING_Daemon *d, GNUNET_TESTING_NotifyCompletion cb, void *cb_cls); + /** * Stops a single service of a GNUnet daemon. Used like daemon_stop, * only doesn't stop the entire peer in any case. If the service @@ -628,11 +705,12 @@ 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); + /** * Read a testing hosts file based on a configuration. * Returns a DLL of hosts (caller must free!) on success @@ -687,6 +765,7 @@ GNUNET_TESTING_daemons_start (const struct GNUNET_CONFIGURATION_Handle *cfg, void *connect_callback_cls, const struct GNUNET_TESTING_Host *hostnames); + /** * Function which continues a peer group starting up * after successfully generating hostkeys for each peer. @@ -698,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 @@ -710,8 +798,9 @@ 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 */ -void +struct GNUNET_TESTING_ConnectContext * GNUNET_TESTING_daemons_connect (struct GNUNET_TESTING_Daemon *d1, struct GNUNET_TESTING_Daemon *d2, struct GNUNET_TIME_Relative timeout, @@ -721,6 +810,18 @@ GNUNET_TESTING_daemons_connect (struct GNUNET_TESTING_Daemon *d1, void *cb_cls); + +/** + * Cancel an attempt to connect two daemons. + * + * @param cc connect context + */ +void +GNUNET_TESTING_daemons_connect_cancel (struct GNUNET_TESTING_ConnectContext + *cc); + + + /** * Restart all peers in the given group. * @@ -758,6 +859,7 @@ GNUNET_TESTING_daemons_stop (struct GNUNET_TESTING_PeerGroup *pg, 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 @@ -787,7 +889,9 @@ GNUNET_TESTING_daemons_churn (struct GNUNET_TESTING_PeerGroup *pg, unsigned int von, struct GNUNET_TIME_Relative timeout, GNUNET_TESTING_NotifyCompletion cb, void *cb_cls); -/* + + +/** * Start a given service for each of the peers in the peer group. * * @param pg handle for the peer group @@ -805,6 +909,7 @@ GNUNET_TESTING_daemons_start_service (struct GNUNET_TESTING_PeerGroup *pg, GNUNET_TESTING_NotifyCompletion cb, void *cb_cls); + /** * Callback function to process statistic values. * @@ -824,6 +929,7 @@ typedef int (*GNUNET_TESTING_STATISTICS_Iterator) (void *cls, uint64_t value, int is_persistent); + /** * Iterate over all (running) peers in the peer group, retrieve * all statistics from each. @@ -839,6 +945,7 @@ GNUNET_TESTING_get_statistics (struct GNUNET_TESTING_PeerGroup *pg, GNUNET_TESTING_STATISTICS_Iterator proc, void *cls); + /** * Topologies supported for testbeds. */ @@ -956,6 +1063,7 @@ int GNUNET_TESTING_topology_get (enum GNUNET_TESTING_Topology *topology, const char *topology_string); + /** * Get connect topology option from string input. * @@ -1013,6 +1121,7 @@ GNUNET_TESTING_create_topology (struct GNUNET_TESTING_PeerGroup *pg, enum GNUNET_TESTING_Topology restrict_topology, const char *restrict_transports); + /** * Iterate over all (running) peers in the peer group, retrieve * all connections that each currently has. @@ -1025,6 +1134,7 @@ void GNUNET_TESTING_get_topology (struct GNUNET_TESTING_PeerGroup *pg, GNUNET_TESTING_NotifyTopology cb, void *cls); + /** * Stop the connection process temporarily. * @@ -1033,6 +1143,7 @@ GNUNET_TESTING_get_topology (struct GNUNET_TESTING_PeerGroup *pg, void GNUNET_TESTING_stop_connections (struct GNUNET_TESTING_PeerGroup *pg); + /** * Resume the connection process. * @@ -1041,6 +1152,7 @@ GNUNET_TESTING_stop_connections (struct GNUNET_TESTING_PeerGroup *pg); void GNUNET_TESTING_resume_connections (struct GNUNET_TESTING_PeerGroup *pg); + /** * There are many ways to connect peers that are supported by this function. * To connect peers in the same topology that was created via the @@ -1073,6 +1185,7 @@ GNUNET_TESTING_connect_topology (struct GNUNET_TESTING_PeerGroup *pg, GNUNET_TESTING_NotifyCompletion notify_callback, void *notify_cls); + /** * Start or stop an individual peer from the given group. * @@ -1089,6 +1202,7 @@ GNUNET_TESTING_daemons_vary (struct GNUNET_TESTING_PeerGroup *pg, struct GNUNET_TIME_Relative timeout, GNUNET_TESTING_NotifyCompletion cb, void *cb_cls); + /** * Start a peer group with a given number of peers. Notify * on completion of peer startup and connection based on given @@ -1115,6 +1229,7 @@ GNUNET_TESTING_peergroup_start (const struct GNUNET_CONFIGURATION_Handle *cfg, void *peergroup_cls, const struct GNUNET_TESTING_Host *hostnames); + /** * Print current topology to a graphviz readable file. *