]> rtime.felk.cvut.cz Git - frescor/frsh.git/blobdiff - frsh_api/tests/negotiation.c
frsh: Update negotiation test
[frescor/frsh.git] / frsh_api / tests / negotiation.c
index 754018d9e2f0e953b5aedb35e26cf8b42251eea6..8d45b9d441974d5f10f1ce4df23150c3490ea571 100644 (file)
 #include <res_dummy.h>
 #include <getopt.h>
 #include <ul_logreg.h>
+#include <wvtest.h>
 
 #define N 3
 
 int b[N] = { 10, 20, 30 };
 
-static struct option long_opts[] = {
-    { "loglevel", 1, 0, 'l' },
-    { 0, 0, 0, 0}
-};
+// TODO: Allow specifying loglevel in evironment
 
-static void
-usage(void)
-{
-       printf("usage: negotiation [ options ]\n");
-       printf("  -l, --loglevel <number>|<domain>=<number>,...\n");
-}
+// static struct option long_opts[] = {
+//     { "loglevel", 1, 0, 'l' },
+//     { 0, 0, 0, 0}
+// };
 
+// static void
+// usage(void)
+// {
+//     printf("usage: negotiation [ options ]\n");
+//     printf("  -l, --loglevel <number>|<domain>=<number>,...\n");
+// }
 
+int ret;
+frsh_contract_t contract[N], c;
+frsh_vres_id_t vres[N];
+frsh_rel_time_t budget, period, deadline;
+int i;
 
-int main(int argc, char *argv[])
+WVTEST_MAIN("basic negotiation")
 {
-       int ret;
-       frsh_contract_t contract[N];
-       frsh_vres_id_t vres[N];
-       frsh_rel_time_t budget, period, deadline;
-       frsh_signal_info_t si;
-       int i;
-       char opt;
-
-       while ((opt = getopt_long(argc, argv, "l:", &long_opts[0], NULL)) != EOF) {
-               switch (opt) {
-                       case 'l':
-                               ul_log_domain_arg2levels(optarg);
-                               break;
-                       case 'h':
-                       /*default:*/
-                               usage();
-                               exit(opt == 'h' ? 0 : 1);
-               }
-       }
+//     char opt;
 
-       ret = frsh_init();
-       if (ret) PERROR_AND_EXIT(ret, "frsh_init");
+//     while ((opt = getopt_long(argc, argv, "l:", &long_opts[0], NULL)) != EOF) {
+//             switch (opt) {
+//                     case 'l':
+//                             break;
+//                     case 'h':
+//                     /\*default:*\/
+//                             usage();
+//                             exit(opt == 'h' ? 0 : 1);
+//             }
+//     }
+
+       setenv("WVTEST_DIE_FAST", "", 1);
+       ret = WVFRSH(frsh_init());
 
        /* Negotiate N contracts */
        for (i=0; i<N; i++) {
-               ret = frsh_contract_init(&contract[i]);
-               if (ret) PERROR_AND_EXIT(ret, "frsh_contract_init");
+               ret = WVFRSH(frsh_contract_init(&contract[i]));
 
-               ret = frsh_contract_set_resource_and_label(
+               ret = WVFRSH(frsh_contract_set_resource_and_label(
                        &contract[i],
                        DUMMY_RESOURCE_TYPE, DUMMY_RESOURCE_ID,
-                       NULL);
-               if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_resource_and_label");
+                       NULL));
 
                budget = fosa_msec_to_rel_time(b[i]);
                period = fosa_msec_to_rel_time(100);
                deadline = fosa_msec_to_rel_time(50);
-               ret = frsh_contract_set_basic_params(&contract[i],
-                                                    &budget,
-                                                    &period,
-                                                    FRSH_WT_BOUNDED,
-                                                    FRSH_CT_REGULAR);
-               if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_basic_params");
+               ret = WVFRSH(frsh_contract_set_basic_params(&contract[i],
+                                                           &budget,
+                                                           &period,
+                                                           FRSH_WT_BOUNDED,
+                                                           FRSH_CT_REGULAR));
                
-               ret = frsh_contract_set_timing_reqs(&contract[i],
-                                                   false, &deadline,
-                                           0, si, 0, si);
-               if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_timing_reqs");
+               ret = WVFRSH(frsh_contract_set_timing_reqs(&contract[i],
+                                                          false, &deadline));
                
-               ret = frsh_contract_negotiate(&contract[i], &vres[i]);
-               if (ret) PERROR_AND_EXIT(ret, "frsh_contract_negotiate");
+               ret = WVFRSH(frsh_contract_negotiate(&contract[i], &vres[i]));
+               WVFRSH(frsh_vres_get_contract(vres[i], &c));
+               WVPASS(fres_contract_get_budget(&c, &budget));
+               WVPASS(fosa_rel_time_to_msec(budget) == b[i]);
        }
-       for (i=0; i<N; i++) {
+
+       /* Renegotiate the first two contracts */
+       for (i=0; i<2; i++) {
                budget = fosa_msec_to_rel_time(2*b[i]);
                period = fosa_msec_to_rel_time(110);
-               ret = frsh_contract_set_basic_params(&contract[i],
-                                                    &budget,
-                                                    &period,
-                                                    FRSH_WT_BOUNDED,
-                                                    FRSH_CT_REGULAR);
-               if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_basic_params reneg");
-
-               ret = frsh_contract_renegotiate_sync(&contract[i], vres[i]);
-               
+               ret = WVFRSH(frsh_contract_set_basic_params(&contract[i],
+                                                           &budget,
+                                                           &period,
+                                                           FRSH_WT_BOUNDED,
+                                                           FRSH_CT_REGULAR));
+
+               ret = WVFRSH(frsh_contract_renegotiate_sync(&contract[i], vres[i]));
+               WVFRSH(frsh_vres_get_contract(vres[i], &c));
+               WVPASS(fres_contract_get_budget(&c, &budget));
+               WVPASS(fosa_rel_time_to_msec(budget) == 2*b[i]);
        }
 
+       /* Try to renegotiate the third contract - it will be rejected */
+       budget = fosa_msec_to_rel_time(2*b[2]);
+       period = fosa_msec_to_rel_time(110);
+       ret = WVFRSH(frsh_contract_set_basic_params(&contract[2],
+                                                   &budget,
+                                                   &period,
+                                                   FRSH_WT_BOUNDED,
+                                                   FRSH_CT_REGULAR));
+
+       WVPASS(frsh_contract_renegotiate_sync(&contract[2], vres[2]) == FRSH_ERR_CONTRACT_REJECTED);
+       WVFRSH(frsh_vres_get_contract(vres[2], &c));
+       WVPASS(fres_contract_get_budget(&c, &budget));
+       WVPASSEQ(fosa_rel_time_to_msec(budget), b[2]);
+
        /* Cancel N contracts */
        for (i=0; i<N; i++) {
-               ret = frsh_contract_cancel(vres[i]);
-               if (ret) PERROR_AND_EXIT(ret, "frsh_contract_cancel");
+               ret = WVFRSH(frsh_contract_cancel(vres[i]));
        }
-       return 0;
+
+       frsh_destroy();
 }