Example #1
0
bool is_program_blocked_test() {
	const char* name1 = "/root/hw1_tests/prog1";
	const char* name2 = "/root/hw1_tests/prog2";
	const char* name3 = "/root/hw1_tests/prog3";
	const char* name4 = "/root/hw1_tests/prog4";
	int len = strlen(name1);

	//checking errors
	ASSERT_TEST(is_program_blocked(NULL, len));
	ASSERT_TEST(errno == EINVAL);
	ASSERT_TEST(is_program_blocked("da", 0));
	ASSERT_TEST(errno == EINVAL);
	ASSERT_TEST(is_program_blocked(NULL, 0));
	ASSERT_TEST(errno == EINVAL);

	block_program(name1, len);
	block_program(name2, len);

	ASSERT_TEST(is_program_blocked(name1, len));
	ASSERT_TEST(is_program_blocked(name2, len));
	ASSERT_TEST(is_program_blocked(name3, len) == 0);
	ASSERT_TEST(is_program_blocked(name4, len) == 0);
	ASSERT_TEST(is_program_blocked("adar", 4) == 0);

	block_program(name3, len);
	block_program(name4, len);

	ASSERT_TEST(is_program_blocked(name3, len));
	ASSERT_TEST(is_program_blocked(name4, len));

	unblock_program(name3, len);
	ASSERT_TEST(is_program_blocked(name1, len));
	ASSERT_TEST(is_program_blocked(name2, len));
	ASSERT_TEST(is_program_blocked(name3, len) == 0);
	ASSERT_TEST(is_program_blocked(name4, len));

	unblock_program(name4, len);
	ASSERT_TEST(is_program_blocked(name1, len));
	ASSERT_TEST(is_program_blocked(name2, len));
	ASSERT_TEST(is_program_blocked(name3, len) == 0);
	ASSERT_TEST(is_program_blocked(name4, len) == 0);

	//errors again because why not
	ASSERT_TEST(is_program_blocked(NULL, len));
	ASSERT_TEST(errno == EINVAL);
	ASSERT_TEST(is_program_blocked("da", 0));
	ASSERT_TEST(errno == EINVAL);
	ASSERT_TEST(is_program_blocked(NULL, 0));
	ASSERT_TEST(errno == EINVAL);

	unblock_program(name1, len);
	ASSERT_TEST(is_program_blocked(name1, len) == 0);
	ASSERT_TEST(is_program_blocked(name2, len));
	ASSERT_TEST(is_program_blocked(name3, len) == 0);
	ASSERT_TEST(is_program_blocked(name4, len) == 0);

	unblock_program(name2, len);
	ASSERT_TEST(is_program_blocked(name1, len) == 0);
	ASSERT_TEST(is_program_blocked(name2, len)== 0);
	ASSERT_TEST(is_program_blocked(name3, len) == 0);
	ASSERT_TEST(is_program_blocked(name4, len) == 0);

	return true;
}
Example #2
0
void test1() {
    /* Assuming no blocked programs before the test runs. If that's not
     * the case, you should unblock any programs before */
    assert(get_blocked_count() == 0);
    assert(block_program(0, strlen(PROG_A)) == -1);
    assert(errno == EINVAL);
    assert(is_program_blocked(PROG_A, strlen(PROG_A)) == 0);
    assert(block_program(PROG_A, strlen(PROG_A)) == 0);
    assert(is_program_blocked(PROG_A, strlen(PROG_A)) == 1);
    assert(block_program(PROG_A, strlen(PROG_A)) == 1);
    assert(get_blocked_count() == 1);
    assert(block_program(PROG_B, strlen(PROG_B)) == 0);
    assert(block_program(PROG_B, strlen(PROG_B)) == 1);
    assert(get_blocked_count() == 2);

    char *argva[] = {A_NAME, 0};
    char *argvb[] = {B_NAME, 0};
	
	char log[20][256];
    // should all fail
    execv(PROG_A, argva);
	assert(get_forbidden_tries(getpid(), log, 20)==1);
    execv(PROG_B, argvb);
	assert(get_forbidden_tries(getpid(), log, 20)==2);
    execv(PROG_A, argva);
	assert(get_forbidden_tries(getpid(), log, 20)==3);
    execv(PROG_A, argva);
	assert(get_forbidden_tries(getpid(), log, 20)==4);
    execv(PROG_B, argvb);
	assert(get_forbidden_tries(getpid(), log, 20)==5);
    execv(PROG_B, argvb);
	assert(get_forbidden_tries(getpid(), log, 20)==6);



    assert(get_forbidden_tries(getpid(), log, 0) == -1);
    assert(errno == EINVAL);
    assert(get_forbidden_tries(-5, log, 20) == -1);
    assert(errno == ESRCH);
    assert(get_forbidden_tries(getpid(), (void*)5, 20) == -1);
    assert(errno == EFAULT);
    int n = get_forbidden_tries(getpid(), log, 20);
    assert(n == 6);
    assert(strncmp(log[0], PROG_A, strlen(PROG_A)) == 0);
    assert(strncmp(log[1], PROG_B, strlen(PROG_B)) == 0);
    assert(strncmp(log[2], PROG_A, strlen(PROG_A)) == 0);
    assert(strncmp(log[3], PROG_A, strlen(PROG_A)) == 0);
    assert(strncmp(log[4], PROG_B, strlen(PROG_B)) == 0);
    assert(strncmp(log[5], PROG_B, strlen(PROG_B)) == 0);

    assert(unblock_program(0, 11) == -1);
    assert(errno == EINVAL);
    assert(unblock_program(PROG_A, strlen(PROG_A)) == 0);
    assert(unblock_program(PROG_A, strlen(PROG_A)) == 1);
    assert(is_program_blocked(PROG_B, strlen(PROG_B)) == 1);
    assert(get_blocked_count() == 1);
    assert(unblock_program(PROG_B, strlen(PROG_B)) == 0);
    assert(is_program_blocked(PROG_A, strlen(PROG_A)) == 0);
    assert(is_program_blocked(PROG_B, strlen(PROG_B)) == 0);
    assert(unblock_program(PROG_B, strlen(PROG_B)) == 1);
    assert(is_program_blocked(PROG_A, strlen(PROG_A)) == 0);
    assert(get_blocked_count() == 0);
}