]> rtime.felk.cvut.cz Git - frescor/fna.git/blob - tests/tests_frescan/test_frescan_bwres_cancel_in_slave.c
b5ca3576d07769015acbbb499efc040807f53ed7
[frescor/fna.git] / tests / tests_frescan / test_frescan_bwres_cancel_in_slave.c
1 #include <stdio.h>  // perror
2 #include <stdlib.h> // exit
3 #include <unistd.h>   // sleep
4
5 #include "frsh.h"
6
7 #include "frescan.h"
8 #include "frescan_bwres.h"
9 #include "frescan_servers.h"
10
11 #define PUT_ERROR(s) {perror (s); exit (-1);}
12
13 #define NETWORK 0
14 #define LOCAL_NODE 1
15
16 int main ()
17 {
18         int ret;
19         frescan_init_params_t init_params;
20         frescan_ss_t ss1, ss2, ss3;
21         frsh_contract_t contract;
22         frescan_server_params_t server_params;
23         bool accepted;
24         frsh_rel_time_t budget_min, period_max;
25
26         init_params.net = NETWORK;
27         init_params.node = LOCAL_NODE;
28         init_params.tx_fp_max_prio = 10;
29         init_params.rx_num_of_channels = 10;
30         init_params.rx_channel_max_prio = NULL;
31
32         printf("Initializing FRESCAN\n");
33         ret = frescan_init(&init_params);
34         if (ret != 0) PUT_ERROR ("could not init FRESCAN");
35
36         printf("Initializing BWRES\n");
37         ret = frescan_bwres_init(NETWORK);
38         if (ret != 0) PUT_ERROR ("could not init BWRES");
39
40         ret = frsh_contract_init(&contract);
41         if (ret != 0) PUT_ERROR ("could not init contract");
42
43         budget_min.tv_sec = 5;
44         period_max = frsh_msec_to_rel_time(3000);
45
46         ret = frsh_contract_set_basic_params
47                         (&contract,
48                          &budget_min,
49                          &period_max,
50                          FRSH_WT_INDETERMINATE,
51                          FRSH_CT_REGULAR);
52         if (ret != 0) PUT_ERROR ("could not set basic params");
53
54 #if !FRSH_AUTOMATIC_PRIO_ASSIGN_ENABLE
55         ret = frsh_contract_set_preemption_level(&contract, 5);
56         if (ret != 0) PUT_ERROR ("could not set preemption level");
57 #endif
58
59         printf("Negotiating a contract 1\n");
60         ret = frescan_bwres_negotiate(NETWORK, &contract, &ss1, &accepted);
61         if (ret != 0) PUT_ERROR ("could not negotiate succesfully");
62
63         if (accepted) {
64                 printf("The contract was accepted, ss:%u\n", ss1);
65                 ret = frescan_servers_get_data(NETWORK, &server_params, ss1);
66                 if (ret != 0) PUT_ERROR ("could not get servers data");
67
68                 printf("B:%u, T=(%u,%u), P:%u\n",
69                        server_params.budget,
70                        server_params.period.tv_sec,
71                        server_params.period.tv_nsec,
72                        server_params.prio);
73         } else {
74                 printf("The contract was not accepted\n");
75         }
76
77         budget_min.tv_sec = 6;
78         period_max = frsh_msec_to_rel_time(2600);
79
80         ret = frsh_contract_set_basic_params
81                         (&contract,
82                           &budget_min,
83                           &period_max,
84                           FRSH_WT_INDETERMINATE,
85                           FRSH_CT_REGULAR);
86         if (ret != 0) PUT_ERROR ("could not set basic params");
87
88 #if !FRSH_AUTOMATIC_PRIO_ASSIGN_ENABLE
89         ret = frsh_contract_set_preemption_level(&contract, 4);
90         if (ret != 0) PUT_ERROR ("could not set preemption level");
91 #endif
92
93         printf("Negotiating a contract 2\n");
94         ret = frescan_bwres_negotiate(NETWORK, &contract, &ss2, &accepted);
95         if (ret != 0) PUT_ERROR ("could not negotiate");
96
97         if (accepted) {
98                 printf("The contract was accepted, ss:%u\n", ss2);
99                 ret = frescan_servers_get_data(NETWORK, &server_params, ss2);
100                 if (ret != 0) PUT_ERROR ("could not get servers data");
101
102                 printf("B:%u, T=(%u,%u), P:%u\n",
103                        server_params.budget,
104                        server_params.period.tv_sec,
105                        server_params.period.tv_nsec,
106                        server_params.prio);
107         } else {
108                 printf("The contract was not accepted\n");
109         }
110
111         printf("cancelling contract for ss:%u\n", ss1);
112         ret = frescan_bwres_cancel(NETWORK, ss1);
113         if (ret != 0) PUT_ERROR ("could not cancel server");
114
115         budget_min.tv_sec = 1;
116         period_max = frsh_msec_to_rel_time(6666);
117
118         ret = frsh_contract_set_basic_params
119                         (&contract,
120                           &budget_min,
121                           &period_max,
122                           FRSH_WT_INDETERMINATE,
123                           FRSH_CT_REGULAR);
124         if (ret != 0) PUT_ERROR ("could not set basic params");
125
126 #if !FRSH_AUTOMATIC_PRIO_ASSIGN_ENABLE
127         ret = frsh_contract_set_preemption_level(&contract, 3);
128         if (ret != 0) PUT_ERROR ("could not set preemption level");
129 #endif
130
131         printf("Negotiating a contract 3\n");
132         ret = frescan_bwres_negotiate(NETWORK, &contract, &ss3, &accepted);
133         if (ret != 0) PUT_ERROR ("could not negotiate");
134
135         if (accepted) {
136                 printf("The contract was accepted, ss:%u\n", ss3);
137                 ret = frescan_servers_get_data(NETWORK, &server_params, ss3);
138                 if (ret != 0) PUT_ERROR ("could not get servers data");
139
140                 printf("B:%u, T=(%u,%u), P:%u\n",
141                        server_params.budget,
142                        server_params.period.tv_sec,
143                        server_params.period.tv_nsec,
144                        server_params.prio);
145         } else {
146                 printf("The contract was not accepted\n");
147         }
148
149         while (1) {
150                 sleep(1);
151         }
152
153         return 0;
154 }
155
156