123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523 |
- /*
- This file is part of GNUnet.
- Copyright (C) 2010-2015 GNUnet e.V.
- GNUnet is free software: you can redistribute it and/or modify it
- under the terms of the GNU Affero General Public License as published
- by the Free Software Foundation, either version 3 of the License,
- or (at your option) any later version.
- GNUnet is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- /**
- * @file ats/test_ats_lib.h
- * @brief test ATS library with a generic interpreter for running ATS tests
- * @author Christian Grothoff
- */
- #ifndef TEST_ATS_LIB_H
- #define TEST_ATS_LIB_H
- #include "gnunet_util_lib.h"
- #include "gnunet_ats_application_service.h"
- #include "gnunet_ats_transport_service.h"
- #include "gnunet_testing_lib.h"
- ///**
- // * Commands for the interpreter.
- // */
- //enum CommandCode
- //{
- // /**
- // * End the test (passing).
- // */
- // CMD_END_PASS = 0,
- //
- // /**
- // * Call #GNUNET_ATS_address_add().
- // */
- // CMD_ADD_ADDRESS,
- //
- // /**
- // * Call #GNUNET_ATS_address_del().
- // */
- // CMD_DEL_ADDRESS,
- //
- // /**
- // * Wait for ATS to suggest address.
- // */
- // CMD_AWAIT_ADDRESS_SUGGESTION,
- //
- // /**
- // * Wait for ATS to suggest disconnect.
- // */
- // CMD_AWAIT_DISCONNECT_SUGGESTION,
- //
- // /**
- // * Ask ATS to connect to a peer, using
- // * #GNUNET_ATS_connectivity_suggest().
- // */
- // CMD_REQUEST_CONNECTION_START,
- //
- // /**
- // * Tell ATS we no longer need a connection to a peer, using
- // * #GNUNET_ATS_connectivity_suggest_cancel().
- // */
- // CMD_REQUEST_CONNECTION_STOP,
- //
- // /**
- // * Wait for certain address information to be provided.
- // */
- // CMD_AWAIT_ADDRESS_INFORMATION,
- //
- // /**
- // * Update properties of an address, using
- // * #GNUNET_ATS_address_update().
- // */
- // CMD_UPDATE_ADDRESS,
- //
- // /**
- // * Add session to an address, using
- // * #GNUNET_ATS_address_add_session().
- // */
- // CMD_ADD_SESSION,
- //
- // /**
- // * Remove session from an address, using
- // * #GNUNET_ATS_address_del_session().
- // */
- // CMD_DEL_SESSION,
- //
- // /**
- // * Change performance preferences for a peer, testing
- // * #GNUNET_ATS_performance_change_preference().
- // */
- // CMD_CHANGE_PREFERENCE,
- //
- // /**
- // * Provide allocation quality feedback, testing
- // * #GNUNET_ATS_performance_give_feedback().
- // */
- // CMD_PROVIDE_FEEDBACK,
- //
- // /**
- // * Obtain list of all addresses, testing
- // * #GNUNET_ATS_performance_list_addresses().
- // */
- // CMD_LIST_ADDRESSES,
- //
- // /**
- // * Reserve bandwidth, testing
- // * #GNUNET_ATS_reserve_bandwidth().
- // */
- // CMD_RESERVE_BANDWIDTH,
- //
- // /**
- // * Wait for a bit.
- // */
- // CMD_SLEEP
- //
- //};
- //
- //
- ///**
- // * Details for the #CMD_ADD_ADDRESS command.
- // */
- //struct CommandAddAddress
- //{
- // /**
- // * Number of the peer (used to generate PID).
- // */
- // unsigned int pid;
- //
- // /**
- // * Number of the address (used to generate binary address).
- // */
- // unsigned int addr_num;
- //
- // /**
- // * Session to supply, 0 for NULL.
- // */
- // unsigned int session;
- //
- // /**
- // * Flags to set for the address.
- // */
- // enum GNUNET_HELLO_AddressInfo addr_flags;
- //
- // /**
- // * Performance properties to supply.
- // */
- // struct GNUNET_ATS_Properties properties;
- //
- // /**
- // * Expect the operation to fail (duplicate).
- // */
- // int expect_fail;
- //
- // /**
- // * Here the result of the add address operation will be stored.
- // */
- // struct GNUNET_ATS_AddressRecord *ar;
- //};
- //
- //
- ///**
- // * Details for the #CMD_DEL_ADDRESS command.
- // */
- //struct CommandDelAddress
- //{
- // /**
- // * Label of the corresponding #CMD_ADD_ADDRESS that
- // * we are now to remove.
- // */
- // const char *add_label;
- //};
- //
- //
- ///**
- // * Details for the #CMD_AWAIT_ADDRESS_SUGGESTION command.
- // */
- //struct CommandAwaitAddressSuggestion
- //{
- // /**
- // * For which peer do we expect a suggestion?
- // */
- // unsigned int pid;
- //
- // /**
- // * If we expect the address suggested to match a particular
- // * addition, specify the label of the add operation here. Otherwise
- // * use NULL for "any" available address.
- // */
- // const char *add_label;
- //
- //};
- //
- //
- ///**
- // * Details for the #CMD_AWAIT_DISCONNECT_SUGGESTION command.
- // */
- //struct CommandAwaitDisconnectSuggestion
- //{
- // /**
- // * For which peer do we expect the disconnect?
- // */
- // unsigned int pid;
- //
- //};
- //
- //
- ///**
- // * Details for the #CMD_REQUEST_CONNECTION_START command.
- // */
- //struct CommandRequestConnectionStart
- //{
- // /**
- // * Identity of the peer we would like to connect to.
- // */
- // unsigned int pid;
- //
- // /**
- // * Location where we store the handle returned from
- // * #GNUNET_ATS_connectivity_suggest().
- // */
- // struct GNUNET_ATS_ConnectivitySuggestHandle *csh;
- //};
- //
- //
- ///**
- // * Details for the #CMD_REQUEST_CONNECTION_STOP command.
- // */
- //struct CommandRequestConnectionStop
- //{
- // /**
- // * Label of the corresponding #CMD_REQUEST_CONNECTION_START that
- // * we are now stopping.
- // */
- // const char *connect_label;
- //};
- //
- //
- ///**
- // * Details for the #CMD_AWAIT_ADDRESS_INFORMATION command.
- // */
- //struct CommandAwaitAddressInformation
- //{
- // /**
- // * For which address do we expect information?
- // * The address is identified by the respective
- // * label of the corresponding add operation.
- // */
- // const char *add_label;
- //
- // /**
- // * Label of a possible update operation that may
- // * have modified the properties. NULL to use
- // * the properties from the @e add_label.
- // */
- // const char *update_label;
- //
- //};
- //
- //
- ///**
- // * Details for the #CMD_UPDATE_ADDRESS command.
- // */
- //struct CommandUpdateAddress
- //{
- // /**
- // * Label of the addresses's add operation.
- // */
- // const char *add_label;
- //
- // /**
- // * Performance properties to supply.
- // */
- // struct GNUNET_ATS_Properties properties;
- //
- //};
- //
- //
- ///**
- // * Details for the #CMD_ADD_SESSION command.
- // */
- //struct CommandAddSession
- //{
- // /**
- // * Label of the addresses's add operation.
- // */
- // const char *add_label;
- //
- // /**
- // * Session to supply.
- // */
- // unsigned int session;
- //
- //};
- //
- //
- ///**
- // * Details for the #CMD_DEL_SESSION command.
- // */
- //struct CommandDelSession
- //{
- // /**
- // * Label of the addresses's add operation.
- // */
- // const char *add_session_label;
- //
- //};
- //
- //
- ///**
- // * Details for the #CMD_CHANGE_PREFERENCE command.
- // */
- //struct CommandChangePreference
- //{
- // /**
- // * Identity of the peer we have a preference change towards.
- // */
- // unsigned int pid;
- //
- // /* FIXME: preference details! */
- //
- //};
- //
- //
- ///**
- // * Details for the #CMD_PROVIDE_FEEDBACK command.
- // */
- //struct CommandProvideFeedback
- //{
- // /**
- // * Identity of the peer we have a feedback for.
- // */
- // unsigned int pid;
- //
- // /**
- // * Over which timeframe does the feedback apply?
- // */
- // struct GNUNET_TIME_Relative scope;
- //
- // /* FIXME: feedback details! */
- //};
- //
- //
- ///**
- // * Details for the #CMD_LIST_ADDRESSES command.
- // */
- //struct CommandListAddresses
- //{
- // /**
- // * Identity of the peer we want a list for.
- // */
- // unsigned int pid;
- //
- // /**
- // * All addresses or just active?
- // */
- // int all;
- //
- // /**
- // * Minimum number of addresses the callback may report.
- // */
- // unsigned int min_calls;
- //
- // /**
- // * Maximum number of addresses the callback may report.
- // */
- // unsigned int max_calls;
- //
- // /**
- // * Minimum number of active addresses the callback may report.
- // */
- // unsigned int min_active_calls;
- //
- // /**
- // * Maximum number of active addresses the callback may report.
- // */
- // unsigned int max_active_calls;
- //
- // /**
- // * Number of calls the command invoked the callback with
- // * an address marked as active. (Set by command).
- // */
- // unsigned int active_calls;
- //
- // /**
- // * Number of calls the command invoked the callback with
- // * any address marked as available to ATS. (Set by command).
- // */
- // unsigned int calls;
- //
- // /**
- // * Location where we store the return value from
- // * #GNUNET_ATS_performance_list_addresses().
- // */
- // struct GNUNET_ATS_AddressListHandle *alh;
- //
- //};
- //
- //
- ///**
- // * Details for the #CMD_RESERVE_BANDWIDTH command.
- // */
- //struct CommandReserveBandwidth
- //{
- // /**
- // * For which peer do we reserve bandwidth?
- // */
- // unsigned int pid;
- //
- // /**
- // * How much should we try to reserve?
- // */
- // int32_t amount;
- //
- // /**
- // * Should we expect this to work or fail?
- // * #GNUNET_YES: must work
- // * #GNUNET_NO: may work or fail
- // * #GNUNET_SYSERR: must fail
- // */
- // int expected_result;
- //
- // /**
- // * Location where we store the return value from
- // * #GNUNET_ATS_reserve_bandwidth().
- // */
- // struct GNUNET_ATS_ReservationContext *rc;
- //
- //};
- //
- //
- ///**
- // * Details for the #CMD_SLEEP command.
- // */
- //struct CommandSleep
- //{
- // /**
- // * How long should we wait before running the next command?
- // */
- // struct GNUNET_TIME_Relative delay;
- //};
- //
- //
- ///**
- // * A command for the test case interpreter.
- // */
- //struct Command
- //{
- // /**
- // * Command code to run.
- // */
- // enum CommandCode code;
- //
- // /**
- // * Commands can be given a label so we can reference them later.
- // */
- // const char *label;
- //
- // /**
- // * Additional arguments to commands, if any.
- // */
- // union {
- //
- // struct CommandAddAddress add_address;
- //
- // struct CommandDelAddress del_address;
- //
- // struct CommandAwaitAddressSuggestion await_address_suggestion;
- //
- // struct CommandAwaitDisconnectSuggestion await_disconnect_suggestion;
- //
- // struct CommandRequestConnectionStart request_connection_start;
- //
- // struct CommandRequestConnectionStop request_connection_stop;
- //
- // struct CommandAwaitAddressInformation await_address_information;
- //
- // struct CommandUpdateAddress update_address;
- //
- // struct CommandAddSession add_session;
- //
- // struct CommandDelSession del_session;
- //
- // struct CommandChangePreference change_preference;
- //
- // struct CommandProvideFeedback provide_feedback;
- //
- // struct CommandListAddresses list_addresses;
- //
- // struct CommandReserveBandwidth reserve_bandwidth;
- //
- // struct CommandSleep sleep;
- //
- // } details;
- //
- //};
- /**
- * Run ATS test.
- *
- * @param argc length of @a argv
- * @param argv command line
- * @param cmds commands to run with the interpreter
- * @param timeout how long is the test allowed to take?
- * @return 0 on success
- */
- int
- TEST_ATS_run (int argc,
- char *argv[],
- struct Command *cmds,
- struct GNUNET_TIME_Relative timeout);
- #endif
|