From: sangorrin Date: Wed, 26 Nov 2008 16:52:15 +0000 (+0000) Subject: add test used to detect bug when a contract was non schedulable in the master X-Git-Url: https://rtime.felk.cvut.cz/gitweb/frescor/fna.git/commitdiff_plain/4e51f68a46d377c30000a967b538350c4d8783b6 add test used to detect bug when a contract was non schedulable in the master git-svn-id: http://www.frescor.org/private/svn/frescor/fna/trunk@1442 35b4ef3e-fd22-0410-ab77-dab3279adceb --- diff --git a/tests/tests_frescan/test_frescan_bwres_negotiate_in_master_not_accepted.c b/tests/tests_frescan/test_frescan_bwres_negotiate_in_master_not_accepted.c new file mode 100644 index 0000000..e4d17d4 --- /dev/null +++ b/tests/tests_frescan/test_frescan_bwres_negotiate_in_master_not_accepted.c @@ -0,0 +1,137 @@ +#include // perror +#include // exit +#include // sleep +#include + +#include "frsh.h" + +#include "frescan.h" +#include "frescan_bwres.h" +#include "frescan_servers.h" + +#define PUT_ERROR(s) {perror (s); exit (-1);} + +#define NETWORK 0 +#define LOCAL_NODE 0 + +// #define ENABLE_LOGGING +#ifdef ENABLE_LOGGING +#include +#include +#include +#define LOG_DEVICE LOG_ETHERNET +#endif + +extern int frescan_fna_network_bytes_to_budget + (const frsh_resource_id_t resource_id, + const size_t nbytes, + frsh_rel_time_t *budget); + +int main () +{ + int ret; + frescan_init_params_t init_params; + frescan_ss_t ss; + frsh_contract_t contract; + frescan_server_params_t server_params; + bool accepted; + frsh_rel_time_t budget_min, period_max; + +#ifdef ENABLE_LOGGING + ret = logger_init(LOG_DEVICE); + assert(ret == 0); + + printf("Changing to membuffer console\n"); + MEMBUFFER_CONSOLE_INIT(); +#endif + + init_params.net = NETWORK; + init_params.node = LOCAL_NODE; + init_params.tx_fp_max_prio = 10; + init_params.rx_num_of_channels = 10; + init_params.rx_channel_max_prio = NULL; + + printf("Initializing FRESCAN\n"); + ret = frescan_init(&init_params); + if (ret != 0) PUT_ERROR ("could not init FRESCAN"); + + printf("Initializing BWRES\n"); + ret = frescan_bwres_init(NETWORK); + if (ret != 0) PUT_ERROR ("could not init BWRES"); + + + ret = frsh_contract_init(&contract); + assert(ret == 0); + + ret = frsh_network_bytes_to_budget(FRSH_NETWORK_ID_DEFAULT, + 8*10, + &budget_min); + assert(ret == 0); + + period_max.tv_sec = 1; period_max.tv_nsec = 0; + + ret = frsh_contract_set_basic_params(&contract, + &budget_min, + &period_max, + FRSH_WT_INDETERMINATE, + FRSH_CT_REGULAR); + assert(ret == 0); + + ret = frsh_contract_set_preemption_level(&contract, 5); + assert(ret == 0); + + ret = frescan_bwres_negotiate(NETWORK, &contract, &ss, &accepted); + if (ret != 0) PUT_ERROR ("could not negotiate succesfully"); + + ret = frescan_bwres_negotiate(NETWORK, &contract, &ss, &accepted); + if (ret != 0) PUT_ERROR ("could not negotiate succesfully"); + + + ret = frsh_contract_init(&contract); + if (ret != 0) PUT_ERROR ("could not init contract"); + + ret = frescan_fna_network_bytes_to_budget (NETWORK, 8*1, &budget_min); + if (ret != 0) PUT_ERROR ("could not transform bytes to budget"); + + period_max = frsh_msec_to_rel_time(2); + + ret = frsh_contract_set_basic_params + (&contract, + &budget_min, + &period_max, + FRSH_WT_INDETERMINATE, + FRSH_CT_REGULAR); + if (ret != 0) PUT_ERROR ("could not set basic params"); + + ret = frsh_contract_set_preemption_level(&contract, 8); + if (ret != 0) PUT_ERROR ("could not set preemption level"); + + printf("Negotiating a contract\n"); + ret = frescan_bwres_negotiate(NETWORK, &contract, &ss, &accepted); + if (ret != 0) PUT_ERROR ("could not negotiate succesfully"); + + if (accepted) { + printf("The contract was accepted, ss:%u\n", ss); + ret = frescan_servers_get_data(NETWORK, &server_params, ss); + if (ret != 0) PUT_ERROR ("could not get servers data"); + + printf("B:%u, T=(%u,%u), P:%u\n", + server_params.budget, + server_params.period.tv_sec, + server_params.period.tv_nsec, + server_params.prio); + } else { + printf("The contract was not accepted\n"); + } + + printf("MAIN DONE\n"); + +#ifdef ENABLE_LOGGING + while (logger_manual_call() > 0); +#endif + + while (1) sleep(1); + return 0; +} + +