]> rtime.felk.cvut.cz Git - frescor/frsh.git/blob - frsh_api/tests/negotiation.c
575044f36a15aa883341ce19eaecadf104ef1ff2
[frescor/frsh.git] / frsh_api / tests / negotiation.c
1 #include <frsh.h>
2 #include <error.h>
3 #include <res_dummy.h>
4 #include <getopt.h>
5 #include <ul_logreg.h>
6 #include <wvtest.h>
7
8 #define N 3
9
10 int b[N] = { 10, 20, 30 };
11
12 // TODO: Allow specifying loglevel in evironment
13
14 // static struct option long_opts[] = {
15 //     { "loglevel", 1, 0, 'l' },
16 //     { 0, 0, 0, 0}
17 // };
18
19 // static void
20 // usage(void)
21 // {
22 //      printf("usage: negotiation [ options ]\n");
23 //      printf("  -l, --loglevel <number>|<domain>=<number>,...\n");
24 // }
25
26 int ret;
27 frsh_contract_t contract[N], c;
28 frsh_vres_id_t vres[N];
29 frsh_rel_time_t budget, period, deadline;
30 int i;
31
32 WVTEST_MAIN("basic negotiation")
33 {
34 //      char opt;
35
36 //      while ((opt = getopt_long(argc, argv, "l:", &long_opts[0], NULL)) != EOF) {
37 //              switch (opt) {
38 //                      case 'l':
39 //                              break;
40 //                      case 'h':
41 //                      /\*default:*\/
42 //                              usage();
43 //                              exit(opt == 'h' ? 0 : 1);
44 //              }
45 //      }
46
47         setenv("WVTEST_DIE_FAST", "", 1);
48         ret = WVFRSH(frsh_init());
49
50         /* Negotiate N contracts */
51         for (i=0; i<N; i++) {
52                 ret = WVFRSH(frsh_contract_init(&contract[i]));
53
54                 ret = WVFRSH(frsh_contract_set_resource_and_label(
55                         &contract[i],
56                         DUMMY_RESOURCE_TYPE, DUMMY_RESOURCE_ID,
57                         NULL));
58
59                 budget = fosa_msec_to_rel_time(b[i]);
60                 period = fosa_msec_to_rel_time(100);
61                 deadline = fosa_msec_to_rel_time(50);
62                 ret = WVFRSH(frsh_contract_set_basic_params(&contract[i],
63                                                             &budget,
64                                                             &period,
65                                                             FRSH_WT_BOUNDED,
66                                                             FRSH_CT_REGULAR));
67                 
68                 ret = WVFRSH(frsh_contract_set_timing_reqs(&contract[i],
69                                                            false, &deadline));
70                 
71                 ret = WVFRSH(frsh_contract_negotiate(&contract[i], &vres[i]));
72                 WVFRSH(frsh_vres_get_contract(vres[i], &c));
73                 WVPASS(fres_contract_get_budget(&c, &budget));
74                 WVPASS(fosa_rel_time_to_msec(budget) == b[i]);
75         }
76 }
77
78 WVTEST_MAIN("renegotiation")
79 {
80         for (i=0; i<2; i++) {
81                 budget = fosa_msec_to_rel_time(2*b[i]);
82                 period = fosa_msec_to_rel_time(110);
83                 ret = WVFRSH(frsh_contract_set_basic_params(&contract[i],
84                                                             &budget,
85                                                             &period,
86                                                             FRSH_WT_BOUNDED,
87                                                             FRSH_CT_REGULAR));
88
89                 ret = WVFRSH(frsh_contract_renegotiate_sync(&contract[i], vres[i]));
90                 WVFRSH(frsh_vres_get_contract(vres[i], &c));
91                 WVPASS(fres_contract_get_budget(&c, &budget));
92                 WVPASS(fosa_rel_time_to_msec(budget) == 2*b[i]);
93         }
94
95         budget = fosa_msec_to_rel_time(2*b[2]);
96         period = fosa_msec_to_rel_time(110);
97         ret = WVFRSH(frsh_contract_set_basic_params(&contract[2],
98                                                     &budget,
99                                                     &period,
100                                                     FRSH_WT_BOUNDED,
101                                                     FRSH_CT_REGULAR));
102
103         WVPASS(frsh_contract_renegotiate_sync(&contract[2], vres[2]) == FRSH_ERR_CONTRACT_REJECTED);
104         WVFRSH(frsh_vres_get_contract(vres[i], &c));
105         WVPASS(fres_contract_get_budget(&c, &budget));
106         WVPASS(fosa_rel_time_to_msec(budget) == b[i]);
107 }
108
109 WVTEST_MAIN("cancelation")
110 {
111         /* Cancel N contracts */
112         for (i=0; i<N; i++) {
113                 ret = WVFRSH(frsh_contract_cancel(vres[i]));
114         }
115
116         frsh_destroy();
117 }