1 #include "intel_rdt.c" /* sic */
4 /***************************************************************************
7 #if PQOS_VERSION >= 30000
8 int pqos_alloc_reset(const enum pqos_cdp_config l3_cdp_cfg,
9 const enum pqos_cdp_config l2_cdp_cfg,
10 const enum pqos_mba_config mba_cfg) {
13 #elif PQOS_VERSION >= 2000
14 int pqos_alloc_reset(const enum pqos_cdp_config l3_cdp_cfg,
15 const enum pqos_cdp_config l2_cdp_cfg) {
19 int pqos_alloc_reset(const enum pqos_cdp_config l3_cdp_cfg) {
25 /***************************************************************************
28 int pqos_mon_reset(void) { return 0; }
29 int pqos_mon_assoc_get(const unsigned lcore, pqos_rmid_t *rmid) { return 0; }
30 int pqos_mon_start(const unsigned num_cores, const unsigned *cores,
31 const enum pqos_mon_event event, void *context,
32 struct pqos_mon_data *group) {
35 int pqos_mon_start_pids(const unsigned num_pids, const pid_t *pids,
36 const enum pqos_mon_event event, void *context,
37 struct pqos_mon_data *group) {
40 int pqos_mon_add_pids(const unsigned num_pids, const pid_t *pids,
41 struct pqos_mon_data *group) {
44 int pqos_mon_remove_pids(const unsigned num_pids, const pid_t *pids,
45 struct pqos_mon_data *group) {
48 int pqos_mon_stop(struct pqos_mon_data *group) { return 0; }
49 int pqos_mon_poll(struct pqos_mon_data **groups, const unsigned num_groups) {
52 int pqos_alloc_assoc_set(const unsigned lcore, const unsigned class_id) {
55 int pqos_alloc_assoc_get(const unsigned lcore, unsigned *class_id) { return 0; }
56 int pqos_alloc_assoc_set_pid(const pid_t task, const unsigned class_id) {
59 int pqos_alloc_assoc_get_pid(const pid_t task, unsigned *class_id) { return 0; }
60 int pqos_alloc_assign(const unsigned technology, const unsigned *core_array,
61 const unsigned core_num, unsigned *class_id) {
64 int pqos_alloc_release(const unsigned *core_array, const unsigned core_num) {
67 int pqos_alloc_assign_pid(const unsigned technology, const pid_t *task_array,
68 const unsigned task_num, unsigned *class_id) {
71 int pqos_alloc_release_pid(const pid_t *task_array, const unsigned task_num) {
74 int pqos_init(const struct pqos_config *config) { return 0; }
75 int pqos_fini(void) { return 0; }
76 int pqos_cap_get_type(const struct pqos_cap *cap, const enum pqos_cap_type type,
77 const struct pqos_capability **cap_item) {
80 int pqos_cap_get(const struct pqos_cap **cap, const struct pqos_cpuinfo **cpu) {
84 /***************************************************************************
87 rdt_ctx_t *stub_rdt_setup() {
89 rdt_ctx_t *rdt = calloc(1, sizeof(*rdt));
90 struct pqos_cpuinfo *pqos_cpu = calloc(1, sizeof(*pqos_cpu));
91 struct pqos_cap *pqos_cap = calloc(1, sizeof(*pqos_cap));
92 struct pqos_cap_mon *mon = calloc(1, sizeof(*mon));
93 struct pqos_capability *cap_mon = calloc(1, sizeof(*cap_mon));
96 rdt->pqos_cap = pqos_cap;
97 rdt->pqos_cpu = pqos_cpu;
98 rdt->cap_mon = cap_mon;
103 void stub_rdt_teardown(rdt_ctx_t *rdt) {
104 free(rdt->cap_mon->u.mon);
105 free((void *)rdt->cap_mon);
106 free((void *)rdt->pqos_cpu);
107 free((void *)rdt->pqos_cap);
111 /***************************************************************************
114 DEF_TEST(rdt_config_ngroups__one_process) {
116 rdt_ctx_t *rdt = stub_rdt_setup();
118 oconfig_value_t values[] = {
119 {.value.string = "proc1", .type = OCONFIG_TYPE_STRING},
121 oconfig_item_t config_item = {
122 .values = values, .values_num = STATIC_ARRAY_SIZE(values),
126 int result = rdt_config_ngroups(rdt, &config_item);
127 EXPECT_EQ_INT(0, result);
128 EXPECT_EQ_STR(values[0].value.string, rdt->ngroups[0].desc);
129 EXPECT_EQ_INT(1, rdt->num_ngroups);
132 rdt_free_ngroups(rdt);
133 stub_rdt_teardown(rdt);
138 DEF_TEST(rdt_config_ngroups__two_groups) {
140 rdt_ctx_t *rdt = stub_rdt_setup();
142 oconfig_value_t values[] = {
143 {.value.string = "proc11,proc12,proc13", .type = OCONFIG_TYPE_STRING},
144 {.value.string = "proc21,proc22,proc23", .type = OCONFIG_TYPE_STRING},
146 oconfig_item_t config_item = {
147 .values = values, .values_num = STATIC_ARRAY_SIZE(values),
151 int result = rdt_config_ngroups(rdt, &config_item);
152 EXPECT_EQ_INT(0, result);
153 EXPECT_EQ_INT(2, rdt->num_ngroups);
154 EXPECT_EQ_STR("proc11,proc12,proc13", rdt->ngroups[0].desc);
155 EXPECT_EQ_STR("proc21,proc22,proc23", rdt->ngroups[1].desc);
156 EXPECT_EQ_STR("proc11", rdt->ngroups[0].names[0]);
157 EXPECT_EQ_STR("proc12", rdt->ngroups[0].names[1]);
158 EXPECT_EQ_STR("proc13", rdt->ngroups[0].names[2]);
159 EXPECT_EQ_STR("proc21", rdt->ngroups[1].names[0]);
160 EXPECT_EQ_STR("proc22", rdt->ngroups[1].names[1]);
161 EXPECT_EQ_STR("proc23", rdt->ngroups[1].names[2]);
164 rdt_free_ngroups(rdt);
165 stub_rdt_teardown(rdt);
170 DEF_TEST(rdt_config_ngroups__too_long_proc_name) {
172 rdt_ctx_t *rdt = stub_rdt_setup();
174 oconfig_value_t values[] = {
175 {.value.string = "_seventeen_chars_", .type = OCONFIG_TYPE_STRING},
177 oconfig_item_t config_item = {
178 .values = values, .values_num = STATIC_ARRAY_SIZE(values),
182 int result = rdt_config_ngroups(rdt, &config_item);
183 EXPECT_EQ_INT(-EINVAL, result);
186 stub_rdt_teardown(rdt);
191 DEF_TEST(rdt_config_ngroups__duplicate_proc_name_between_groups) {
193 rdt_ctx_t *rdt = stub_rdt_setup();
195 oconfig_value_t values[] = {
196 {.value.string = "proc11,proc12,proc", .type = OCONFIG_TYPE_STRING},
197 {.value.string = "proc21,proc,proc23", .type = OCONFIG_TYPE_STRING},
199 oconfig_item_t config_item = {
200 .values = values, .values_num = STATIC_ARRAY_SIZE(values),
204 int result = rdt_config_ngroups(rdt, &config_item);
205 EXPECT_EQ_INT(-EINVAL, result);
208 stub_rdt_teardown(rdt);
213 DEF_TEST(rdt_config_ngroups__duplicate_proc_name_in_group) {
215 rdt_ctx_t *rdt = stub_rdt_setup();
217 oconfig_value_t values[] = {
218 {.value.string = "proc11,proc,proc,proc14", .type = OCONFIG_TYPE_STRING},
220 oconfig_item_t config_item = {
221 .values = values, .values_num = STATIC_ARRAY_SIZE(values),
225 int result = rdt_config_ngroups(rdt, &config_item);
226 EXPECT_EQ_INT(-EINVAL, result);
229 stub_rdt_teardown(rdt);
234 DEF_TEST(rdt_config_ngroups__empty_group) {
236 rdt_ctx_t *rdt = stub_rdt_setup();
238 oconfig_value_t values[] = {
239 {.value.string = "proc11,proc12,proc13", .type = OCONFIG_TYPE_STRING},
240 {.value.string = "", .type = OCONFIG_TYPE_STRING},
243 oconfig_item_t config_item = {
244 .values = values, .values_num = STATIC_ARRAY_SIZE(values),
248 int result = rdt_config_ngroups(rdt, &config_item);
249 EXPECT_EQ_INT(-EINVAL, result);
252 stub_rdt_teardown(rdt);
257 DEF_TEST(rdt_config_ngroups__empty_proc_name) {
259 rdt_ctx_t *rdt = stub_rdt_setup();
261 oconfig_value_t values[] = {
262 {.value.string = "proc11,,proc13", .type = OCONFIG_TYPE_STRING},
264 oconfig_item_t config_item = {
265 .values = values, .values_num = STATIC_ARRAY_SIZE(values),
269 int result = rdt_config_ngroups(rdt, &config_item);
270 EXPECT_EQ_INT(-EINVAL, result);
273 stub_rdt_teardown(rdt);
279 RUN_TEST(rdt_config_ngroups__one_process);
280 RUN_TEST(rdt_config_ngroups__two_groups);
281 RUN_TEST(rdt_config_ngroups__too_long_proc_name);
282 RUN_TEST(rdt_config_ngroups__duplicate_proc_name_between_groups);
283 RUN_TEST(rdt_config_ngroups__duplicate_proc_name_in_group);
284 RUN_TEST(rdt_config_ngroups__empty_group);
285 RUN_TEST(rdt_config_ngroups__empty_proc_name);
290 /***************************************************************************
293 int pqos_mon_reset(void) { return 0; }
294 int pqos_mon_assoc_get(const unsigned lcore, pqos_rmid_t *rmid) { return 0; }
295 int pqos_mon_start(const unsigned num_cores, const unsigned *cores,
296 const enum pqos_mon_event event, void *context,
297 struct pqos_mon_data *group) {
300 int pqos_mon_start_pid(const pid_t pids, const enum pqos_mon_event event,
301 void *context, struct pqos_mon_data *group) {
304 int pqos_mon_stop(struct pqos_mon_data *group) { return 0; }
305 int pqos_mon_poll(struct pqos_mon_data **groups, const unsigned num_groups) {
308 int pqos_alloc_assoc_set(const unsigned lcore, const unsigned class_id) {
311 int pqos_alloc_assoc_get(const unsigned lcore, unsigned *class_id) { return 0; }
312 int pqos_alloc_assoc_set_pid(const pid_t task, const unsigned class_id) {
315 int pqos_alloc_assoc_get_pid(const pid_t task, unsigned *class_id) { return 0; }
316 int pqos_alloc_assign(const unsigned technology, const unsigned *core_array,
317 const unsigned core_num, unsigned *class_id) {
320 int pqos_alloc_release(const unsigned *core_array, const unsigned core_num) {
323 int pqos_alloc_assign_pid(const unsigned technology, const pid_t *task_array,
324 const unsigned task_num, unsigned *class_id) {
327 int pqos_alloc_release_pid(const pid_t *task_array, const unsigned task_num) {
330 int pqos_init(const struct pqos_config *config) { return 0; }
331 int pqos_fini(void) { return 0; }
332 int pqos_cap_get_type(const struct pqos_cap *cap, const enum pqos_cap_type type,
333 const struct pqos_capability **cap_item) {
336 int pqos_cap_get(const struct pqos_cap **cap, const struct pqos_cpuinfo **cpu) {
340 DEF_TEST(pqos12_test_stub) {
346 RUN_TEST(pqos12_test_stub);