1 #include <fres_contract.h>
4 #include <fres_blocks.h>
6 #include <fres_contract_type.h>
11 void cmp(struct fres_contract *c1, struct fres_contract *c2, const char *msg)
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);
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);
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);
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);
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);*/
39 WVTEST_MAIN("contract manipulation")
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;
48 if (!WVPASS(c = fres_contract_new()))
49 error(1, errno, "fres_contract_new");
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");
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");
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");
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");
80 if (!WVPASS(critical_sects = malloc(sizeof(*critical_sects))))
81 error(1, errno, "cannot allocate memory for critical_sects");
83 if (!WVPASS(fres_contract_add_csects(c, critical_sects) == 0))
84 error(1, errno, "fres_contract_add_csects");
86 if (!WVPASS(c2 = fres_contract_duplicate(c)))
87 error(1, errno, "fres_contract_duplicate");
88 cmp(c, c2, "cmp after fres_contract_duplicate");
90 fres_contract_destroy(c2);
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");
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");
104 cmp(c, c2, "cmp after serialize/desearialize");
106 fres_contract_destroy(c2);
108 fres_contract_destroy(c);