Exemplo n.º 1
0
END_TEST

START_TEST(test_eval_predicate_dot)
{
    peos_resource_t* resources;
    Tree t_dot, t_res, t_exists;
    
    resources = (peos_resource_t *) calloc(1, sizeof(peos_resource_t));
    strcpy(resources[0].name, "res");
    strcpy(resources[0].value, "my_file");

    t_res = make_tree("res", 0, NULL, NULL);
    t_exists = make_tree("exists", 0, NULL, NULL);
    t_dot = make_tree(NULL, DOT, t_res, t_exists);
    
    /* Happy path: requires { res.exists } */
    system("touch my_file");
    fail_unless(eval_predicate(resources, 1, t_dot) == 1, "eval_predicate_dot 1 failed");
    system("rm my_file");
    fail_unless(eval_predicate(resources, 1, t_dot) == 0, "eval_predicate_dot 2 failed");


    /* requires { doc.title } -> [isTrue [title ${doc}]] */
    /* requires { doc.spellchecked } -> [isTrue [spellchecked ${doc}] */
    /* requires { doc.spellchecked == "True" } [spellchecked ${doc}] == true */

    free(resources);
}
Exemplo n.º 2
0
Arquivo: config.c Projeto: Aconex/pcp
static int
eval_predicate(bool_node *pred)
{
    bool_node *lhs, *rhs;

    switch(pred->tag) {
	case N_and:	
	    lhs = pred->data.children.left;
	    rhs = pred->data.children.right;
	    return eval_predicate(lhs) && eval_predicate(rhs);	
	case N_or:	
	    lhs = pred->data.children.left;
	    rhs = pred->data.children.right;
	    return eval_predicate(lhs) || eval_predicate(rhs);	
	case N_not:	
	    lhs = pred->data.children.left;
	    return !eval_predicate(lhs);	
	case N_true:
	    return 1;
	case N_false:
	    return 0;
	default:
	    return eval_comparison(pred);
    }/*switch*/
}
Exemplo n.º 3
0
END_TEST

START_TEST(test_eval_predicate_and_or)
{
    peos_resource_t* resources;
    Tree t_and, t_or, t_res0, t_res1;
    
    resources = (peos_resource_t *) calloc(2, sizeof(peos_resource_t));
    strcpy(resources[0].name, "res0");
    strcpy(resources[0].value, "my_file0");
    strcpy(resources[1].name, "res1");
    strcpy(resources[1].value, "my_file1");

    t_res0 = make_tree("res0", 0, NULL, NULL);
    t_res1 = make_tree("res1", 0, NULL, NULL);
    t_and = make_tree(NULL, AND, t_res0, t_res1);
    t_or = make_tree(NULL, OR, t_res0, t_res1);
    
    system("touch my_file0");
    system("touch my_file1");
    fail_unless(eval_predicate(resources, 2, t_and) == 1, "res0 AND res1 (both exist) failed");
    fail_unless(eval_predicate(resources, 2, t_or) == 1, "res0 OR res1 (both exist) failed");
    system("rm my_file0");
    fail_unless(eval_predicate(resources, 2, t_and) == 0, "res0 AND res1 (res0 doesn't exist) failed");
    fail_unless(eval_predicate(resources, 2, t_or) == 1, "res0 OR res1 (res0 doesn't exist) failed");
    system("rm my_file1");
    fail_unless(eval_predicate(resources, 2, t_and) == 0, "res0 AND res1 (neither exists) failed");
    fail_unless(eval_predicate(resources, 2, t_or) == 0, "res0 OR res1 (neither exists) failed");
    free(resources);
}
Exemplo n.º 4
0
END_TEST

START_TEST(test_eval_predicate_single_node)
{
    peos_resource_t* resources;
    Tree t;
    
    resources = (peos_resource_t *) calloc(1, sizeof(peos_resource_t));
    strcpy(resources[0].name, "res");
    strcpy(resources[0].value, "my_file");
    

    t = make_tree("\"True\"", 0, NULL, NULL);
    fail_unless(eval_predicate(NULL, 0, t) == 1, "\"True\" failed");
    free(t);

    t = make_tree("\"true\"", 0, NULL, NULL); 
    fail_unless(eval_predicate(NULL, 0, t) == 1, "\"true\" failed");
    free(t);

    t = make_tree("\"1\"", 0, NULL, NULL);
    fail_unless(eval_predicate(NULL, 0, t) == 1, "\"1\" failed");
    free(t);

    t = make_tree("\"False\"", 0, NULL, NULL);
    fail_unless(eval_predicate(NULL, 0, t) == 0, "\"False\" failed");
    free(t);

    t = make_tree("\"false\"", 0, NULL, NULL);
    fail_unless(eval_predicate(NULL, 0, t) == 0, "\"false\" failed");
    free(t);

    t = make_tree("\"0\"", 0, NULL, NULL);
    fail_unless(eval_predicate(NULL, 0, t) == 0, "\"0\" failed");
    free(t);

    t = make_tree("res", 0, NULL, NULL);
    system("touch my_file");
    fail_unless(eval_predicate(resources, 1, t) == 1, "[exists ${res}] (= my_file) failed");
    system("rm my_file");
    fail_unless(eval_predicate(resources, 1, t) == 0, "not [exists ${res}] (= my_file0) failed");
    free(t);    

    free(resources);
}
Exemplo n.º 5
0
END_TEST

START_TEST(test_eval_predicate_abstract)
{
    peos_resource_t* resources;
    Tree t_res;
    
    resources = (peos_resource_t *) calloc(1, sizeof(peos_resource_t));
    strcpy(resources[0].name, "res");
    strcpy(resources[0].value, "my_file");
    strcpy(resources[0].qualifier, "abstract");

    t_res = make_tree("res", 0, NULL, NULL);
    
    fail_unless(eval_predicate(resources, 1, t_res) == 0, "eval_predicate_abstract_0 failed"); /* XXX ignores qualifier */
    free(resources);
}
Exemplo n.º 6
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);
}
Exemplo n.º 7
0
END_TEST
        
START_TEST(test_eval_predicate_eq_ne_gt_le_ge)
{
    peos_resource_t* resources;
    Tree t_eq, t_ne, t_lt, t_gt, t_le, t_ge, t_dot0, t_dot1, t_res0, t_res1, t_attr0, t_attr1;
    
    resources = (peos_resource_t *) calloc(2, sizeof(peos_resource_t));
    strcpy(resources[0].name, "res0");
    strcpy(resources[0].value, "my_file0");
    strcpy(resources[1].name, "res1");
    strcpy(resources[1].value, "my_file1");

    t_res0 = make_tree("res0", 0, NULL, NULL);
    t_attr0 = make_tree("filesize", 0, NULL, NULL);
    t_dot0 = make_tree(NULL, DOT, t_res0, t_attr0);
    
    t_res1 = make_tree("res1", 0, NULL, NULL);
    t_attr1 = make_tree("filesize", 0, NULL, NULL);
    t_dot1 = make_tree(NULL, DOT, t_res1, t_attr1);
    
    t_eq = make_tree(NULL, EQ, t_dot0, t_dot1); // res0.filesize == res1.filesize
    t_ne = make_tree(NULL, NE, t_dot0, t_dot1); // res0.filesize != res1.filesize
    t_lt = make_tree(NULL, LT, t_dot0, t_dot1); // res0.filesize < res1.filesize
    t_gt = make_tree(NULL, GT, t_dot0, t_dot1); // res0.filesize > res1.filesize
    t_le = make_tree(NULL, LE, t_dot0, t_dot1); // res0.filesize <= res1.filesize
    t_ge = make_tree(NULL, GE, t_dot0, t_dot1); // res0.filesize >= res1.filesize
    
    system("touch my_file0");
    system("touch my_file1");
    fail_unless(eval_predicate(resources, 2, t_eq)  == 1, "eval_predicate_eq_ne_gt_le_ge failed");
    fail_unless(eval_predicate(resources, 2, t_ne) == 0, "eval_predicate_eq_ne_gt_le_ge failed");
    fail_unless(eval_predicate(resources, 2, t_lt) == 0, "eval_predicate_eq_ne_gt_le_ge failed");
    fail_unless(eval_predicate(resources, 2, t_gt) == 0, "eval_predicate_eq_ne_gt_le_ge failed");
    fail_unless(eval_predicate(resources, 2, t_le) == 1, "eval_predicate_eq_ne_gt_le_ge failed");
    fail_unless(eval_predicate(resources, 2, t_ge) == 1, "eval_predicate_eq_ne_gt_le_ge failed");
    system("echo \"12\" > my_file0");
    system("echo \"1234\" > my_file1");
    fail_unless(eval_predicate(resources, 2, t_eq) == 0, "eval_predicate_eq_ne_gt_le_ge failed");
    fail_unless(eval_predicate(resources, 2, t_ne) == 1, "eval_predicate_eq_ne_gt_le_ge failed");
    fail_unless(eval_predicate(resources, 2, t_lt) == 1, "eval_predicate_eq_ne_gt_le_ge failed");
    fail_unless(eval_predicate(resources, 2, t_gt) == 0, "eval_predicate_eq_ne_gt_le_ge failed");
    fail_unless(eval_predicate(resources, 2, t_le) == 1, "eval_predicate_eq_ne_gt_le_ge failed");
    fail_unless(eval_predicate(resources, 2, t_ge) == 0, "eval_predicate_eq_ne_gt_le_ge failed");
    system("echo \"1234\" > my_file0");
    system("echo \"12\" > my_file1");
    fail_unless(eval_predicate(resources, 2, t_eq) == 0, "eval_predicate_eq_ne_gt_le_ge failed");
    fail_unless(eval_predicate(resources, 2, t_ne) == 1, "eval_predicate_eq_ne_gt_le_ge failed");
    fail_unless(eval_predicate(resources, 2, t_lt) == 0, "eval_predicate_eq_ne_gt_le_ge failed");
    fail_unless(eval_predicate(resources, 2, t_gt) == 1, "eval_predicate_eq_ne_gt_le_ge failed");
    fail_unless(eval_predicate(resources, 2, t_le) == 0, "eval_predicate_eq_ne_gt_le_ge failed");
    fail_unless(eval_predicate(resources, 2, t_ge) == 1, "eval_predicate_eq_ne_gt_le_ge failed");
    system("rm my_file0");
    system("rm my_file1");
}
Exemplo n.º 8
0
END_TEST

START_TEST(test_eval_predicate_error)
{

    peos_resource_t* resources = NULL;
    Tree t_dot, t_op, t0, t1, t_true;
    t0 = make_tree("res", 0, NULL, NULL);
    //test resources == NULL
    fail_unless(eval_predicate(resources, 0, t0) == -1, "null resource list failed");
    //test num_resources == 0
    resources = (peos_resource_t *) calloc(1, sizeof(peos_resource_t));
    fail_unless(eval_predicate(resources, 0, t0) == -1, "empty resource list failed");
    //resource name not found
    t1 = make_tree("exists", 0, NULL, NULL);
    t_dot = make_tree(NULL, DOT, t0, t1);
    strcpy(resources[0].name, "res_not_in_tree");
    strcpy(resources[0].value, "res_not_in_tree");
    fail_unless(eval_predicate(resources, 1, t_dot) == -1, "unbound resource failed");

    //test tcl attr procedure not exists
    strcpy(resources[0].name, "res");
    strcpy(resources[0].value, "val");
    free(t1);
    free(t_dot);
    t1 = make_tree("not_exist_tcl_proc", 0, NULL, NULL);
    t_dot = make_tree(NULL, DOT, t0, t1);
    fail_unless(eval_predicate(resources, 1, t_dot) == -1, "missing tcl attr procedure failed");

    //test operators that operate on error tree
    t_true = make_tree("\"True\"", 0, NULL, NULL);
    t_op = make_tree(NULL, EQ, t_true, t_dot);
    fail_unless(eval_predicate(resources, 1, t_op) == -1, "missing tcl attr procedure EQ failed");
    t_op->ival = NE;
    fail_unless(eval_predicate(resources, 1, t_op) == -1, "missing tcl attr procedure NE failed");
    t_op->ival = LT;
    fail_unless(eval_predicate(resources, 1, t_op) == -1, "missing tcl attr procedure LT failed");
    t_op->ival = GT;
    fail_unless(eval_predicate(resources, 1, t_op) == -1, "missing tcl attr procedure GT failed");
    t_op->ival = LE;
    fail_unless(eval_predicate(resources, 1, t_op) == -1, "missing tcl attr procedure LE failed");
    t_op->ival = GE;
    fail_unless(eval_predicate(resources, 1, t_op) == -1, "missing tcl attr procedure GE failed");
    t_op->ival = AND;
    fail_unless(eval_predicate(resources, 1, t_op) == -1, "missing tcl attr procedure AND failed");
    t_op->ival = OR;
    /* "True" || res.not_exist_tcl_proc is true */
    fail_unless(eval_predicate(resources, 1, t_op) == 1, "missing tcl attr procedure OR failed");
    free(resources);
}
Exemplo n.º 9
0
END_TEST

START_TEST(test_eval_predicate_null_tree)
{
    fail_unless(eval_predicate(NULL, 0, NULL) == 1, "eval_predicate_null_tree failed");
}
Exemplo n.º 10
0
Arquivo: config.c Projeto: Aconex/pcp
int
eval_tree(config_vars *vars)
{
    the_vars = vars;
    return eval_predicate(the_tree);
}