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; }
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); }