]> rtime.felk.cvut.cz Git - frescor/frsh.git/blob - fres/contract/tests/contract.c
Fix contract test
[frescor/frsh.git] / fres / contract / tests / contract.c
1 #include <fres_contract.h>
2 #include <error.h>
3 #include <errno.h>
4 #include <fres_blocks.h>
5 #include <string.h>
6 #include <fres_contract_type.h>
7 #include <stdio.h>
8 #include <forb/cdr.h>
9 #include <wvtest.h>
10
11 void cmp(struct fres_contract *c1, struct fres_contract *c2, const char *msg)
12 {
13         int ret;
14         if (!WVPASS((ret = strcmp(fres_contract_get_label(c1)->label,
15                                   fres_contract_get_label(c2)->label)) == 0))
16                 error(1, 0, "%s: label cmp failed %d", msg, ret);
17         
18         if (!WVPASS((ret = memcmp(fres_contract_get_resource(c1),
19                                   fres_contract_get_resource(c2),
20                                   sizeof(fres_block_resource))) == 0))
21                 error(1, 0, "%s: resource cmp failed %d", msg, ret);
22         
23         if (!WVPASS((ret = memcmp(fres_contract_get_basic(c1),
24                                   fres_contract_get_basic(c2),
25                                   sizeof(fres_block_basic))) == 0))
26                 error(1, 0, "%s: basic cmp failed %d", msg, ret);
27         
28         if (!WVPASS((ret = memcmp(fres_contract_get_timing_reqs(c1),
29                                   fres_contract_get_timing_reqs(c2),
30                                   sizeof(fres_block_timing_reqs))) == 0))
31                 error(1, 0, "%s: timing_reqs cmp failed %d", msg, ret);
32         
33         /*ret = memcmp(fres_contract_get_csects(c1),
34                      fres_contract_get_csects(c2),
35                      sizeof(fres_block_csects));
36         if (ret) error(1, 0, "%s: critical_sects cmp failed %d", msg, ret);*/
37 }
38
39 WVTEST_MAIN("contract manipulation")
40 {
41         struct fres_contract *c, *c2;
42         fres_block_label *label;
43         fres_block_resource *resource;
44         fres_block_basic *basic;
45         fres_block_timing_reqs *timing_reqs;
46         //fres_block_csects *critical_sects;
47
48         if (!WVPASS(c = fres_contract_new()))
49                 error(1, errno, "fres_contract_new");
50
51         if (!WVPASS(label = malloc(sizeof(*label))))
52                 error(1, errno, "cannot allocate memory for label");
53         strcpy(label->label, "TestLabel");
54         if (!WVPASS(fres_contract_add_label(c, label) == 0))
55                 error(1, errno, "fres_contract_add_label");
56                 
57         if (!WVPASS(resource = malloc(sizeof(*resource))))
58                 error(1, errno, "cannot allocate memory for resource");
59         resource->resource_type = FRSH_RT_NETWORK;
60         resource->resource_id = 12;
61         if (!WVPASS(fres_contract_add_resource(c, resource) == 0))
62                 error(1, errno, "fres_contract_add_resource");
63                 
64         if (!WVPASS(basic = malloc(sizeof(*basic))))
65                 error(1, errno, "cannot allocate memory for basic");
66         basic->budget = fosa_msec_to_rel_time(10);
67         basic->period = fosa_msec_to_rel_time(100);
68         basic->workload = FRSH_WT_SYNCHRONIZED;
69         basic->contract_type = FRSH_CT_REGULAR;
70         if (!WVPASS(fres_contract_add_basic(c, basic) == 0))
71                 error(1, errno, "fres_contract_add_basic");
72                 
73         if (!WVPASS(timing_reqs = malloc(sizeof(*timing_reqs))))
74                 error(1, errno, "cannot allocate memory for timing_reqs");
75         timing_reqs->d_equals_t = CORBA_FALSE;
76         timing_reqs->deadline = fosa_msec_to_rel_time(50);
77         if (!WVPASS(fres_contract_add_timing_reqs(c, timing_reqs) == 0))
78                 error(1, errno, "fres_contract_add_timing_reqs");
79 #if 0   
80         if (!WVPASS(critical_sects = malloc(sizeof(*critical_sects))))
81                 error(1, errno, "cannot allocate memory for critical_sects");
82         //criticacl_sects->;
83         if (!WVPASS(fres_contract_add_csects(c, critical_sects) == 0))
84                 error(1, errno, "fres_contract_add_csects");
85 #endif
86         if (!WVPASS(c2 = fres_contract_duplicate(c)))
87                 error(1, errno, "fres_contract_duplicate");
88         cmp(c, c2, "cmp after fres_contract_duplicate");
89                 
90         fres_contract_destroy(c2);
91
92         {
93                 FORB_CDR_Codec codec;
94                 CORBA_boolean cb;
95                 FORB_CDR_codec_init_static(&codec, NULL);
96                 cb = FORB_CDR_buffer_init(&codec, 4000, 0);
97                 if (!cb) error(1, errno, "CDR_buffer_init");
98                 
99                 cb = fres_contract_ptr_serialize(&codec, &c);
100                 if (!cb) error(1, 0, "fres_contract_ptr_serialize failed");
101                 cb = fres_contract_ptr_deserialize(&codec, &c2);
102                 if (!cb) error(1, 0, "fres_contract_ptr_deserialize failed");
103
104                 cmp(c, c2, "cmp after serialize/desearialize");
105                 
106                 fres_contract_destroy(c2);
107         }
108         fres_contract_destroy(c);
109 }