END_TEST

START_TEST(test_eval_resource_list_error)
{
    peos_resource_t* resources;
    fail_unless(eval_resource_list(&resources, 1) == 0, "eval_resource_list_error failed");
    resources = (peos_resource_t*)calloc(1, sizeof(peos_resource_t));
    strcpy(resources[0].name, "res0");
    fail_unless(eval_resource_list(&resources, 1) == 1, "eval_resource_list_error failed");
    fail_unless(eval_resource_list(&resources, 0) == 0, "eval_resource_list_error failed");
    strcpy(resources[0].name, "");
    fail_unless(eval_resource_list(&resources, 1) == 0, "eval_resource_list_error failed");
}
END_TEST
        
START_TEST(test_eval_resource_list_unbound) {
    peos_resource_t* resources = (peos_resource_t *) calloc(3, sizeof(peos_resource_t));
    strcpy(resources[0].name, "unbound");  //res0 is unbound
    strcpy(resources[1].name, "res1");
    strcpy(resources[1].value, "$unbound/val1");
    strcpy(resources[2].name, "res2");
    strcpy(resources[2].value, "${res1}/val2");
    
    fail_unless(eval_resource_list(&resources, 3) == 1, "eval_resource_list_unbound 1 failed");
    
    fail_unless(strcmp(resources[0].value, "{}") == 0, "eval_resource_list_unbound 2 failed");
    fail_unless(strcmp(resources[1].value, "/val1") == 0, "eval_resource_list_unbound 3 failed");
    fail_unless(strcmp(resources[2].value, "/val1/val2") == 0, "eval_resource_list_unbound 4 failed");
    free(resources);
}
Example #3
0
int is_provides_true(Node n) {
    int i;
    int num_resources = 0;
    peos_resource_t* resources;
    peos_resource_t* proc_resources;
    peos_context_t* context = peos_get_context(PID(n));
    resources = get_resource_list_action_provides(PID(n), n->name, &num_resources);
    if (context && context->num_resources > 0) {
        proc_resources = (peos_resource_t *) calloc(context->num_resources, sizeof(peos_resource_t));
       for (i = 0; i < context->num_resources; i++) {
            strcpy(proc_resources[i].name, context->resources[i].name);
         strcpy(proc_resources[i].value, context->resources[i].value);
       }
       eval_resource_list(&proc_resources, context->num_resources);
       fill_resource_list_value(proc_resources, context->num_resources, &resources, num_resources);
    }
    return eval_predicate(resources, num_resources, n->provides);
}
END_TEST

START_TEST(test_eval_resource_list_bound) {
    peos_resource_t* resources = (peos_resource_t*)calloc(3, sizeof(peos_resource_t));
    
    strcpy(resources[0].name, "res0");
    strcpy(resources[0].value, "val0");
    strcpy(resources[1].name, "res1");
    strcpy(resources[1].value, "$res0/val1");
    strcpy(resources[2].name, "res2");
    strcpy(resources[2].value, "${res1}/val2");
    
    fail_unless(eval_resource_list(&resources, 3) == 1, "eval_resource_list_bound failed");
    
    fail_unless(strcmp(resources[0].value, "val0") == 0, "eval_resource_list_bound failed");
    fail_unless(strcmp(resources[1].value, "val0/val1") == 0, "eval_resource_list_bound failed");
    fail_unless(strcmp(resources[2].value, "val0/val1/val2") == 0, "eval_resource_list_bound failed");
    free(resources);
}