예제 #1
0
    def test_run_check_exception_timeout(self, stdout_io):
        # pylint: disable=abstract-method
        class ExceptionChecker(checkerlib.BaseChecker):
            def place_flag(self, tick):
                raise socket.timeout()

        checkerlib.run_check(ExceptionChecker)
        self.assertEqual(stdout_io.getvalue(), 'Check result: DOWN\n')
예제 #2
0
    def test_run_check_exception(self):
        # pylint: disable=abstract-method
        class ExceptionChecker(checkerlib.BaseChecker):
            def place_flag(self, tick):
                raise ValueError()

        with self.assertRaises(ValueError):
            checkerlib.run_check(ExceptionChecker)
예제 #3
0
    def test_run_check_tick0(self, stdout_io):
        MockChecker.reset_mocks()
        MockChecker.place_mock.return_value = CheckResult.OK
        MockChecker.service_mock.return_value = CheckResult.OK
        MockChecker.flag_mock.return_value = CheckResult.OK

        checkerlib.run_check(MockChecker)

        MockChecker.place_mock.assert_called_once_with(0)
        MockChecker.service_mock.assert_called_once()
        MockChecker.flag_mock.assert_called_once_with(0)
        self.assertEqual(stdout_io.getvalue(), 'Check result: OK\n')
예제 #4
0
    def test_run_check_flag_fail(self, stdout_io):
        MockChecker.reset_mocks()
        MockChecker.place_mock.return_value = CheckResult.OK
        MockChecker.service_mock.return_value = CheckResult.OK
        MockChecker.flag_mock.return_value = CheckResult.FLAG_NOT_FOUND

        checkerlib.run_check(MockChecker)

        MockChecker.place_mock.assert_called_once_with(10)
        MockChecker.service_mock.assert_called_once()
        MockChecker.flag_mock.assert_called_once_with(10)
        self.assertEqual(stdout_io.getvalue(), 'Check result: FLAG_NOT_FOUND\n')
예제 #5
0
    def test_run_check_service_fail(self, stdout_io):
        MockChecker.reset_mocks()
        MockChecker.place_mock.return_value = CheckResult.OK
        MockChecker.service_mock.return_value = CheckResult.FAULTY
        MockChecker.flag_mock.return_value = CheckResult.OK

        checkerlib.run_check(MockChecker)

        MockChecker.place_mock.assert_called_once_with(10)
        MockChecker.service_mock.assert_called_once()
        MockChecker.flag_mock.assert_not_called()
        self.assertEqual(stdout_io.getvalue(), 'Check result: FAULTY\n')
예제 #6
0
    def test_run_check_tick3(self, stdout_io):
        MockChecker.reset_mocks()
        MockChecker.place_mock.return_value = CheckResult.OK
        MockChecker.service_mock.return_value = CheckResult.OK
        MockChecker.flag_mock.return_value = CheckResult.OK

        checkerlib.run_check(MockChecker)

        MockChecker.place_mock.assert_called_once_with(3)
        MockChecker.service_mock.assert_called_once()
        self.assertEqual(MockChecker.flag_mock.call_count, 4)
        self.assertEqual(MockChecker.flag_mock.call_args_list, [call(3), call(2), call(1), call(0)])
        self.assertEqual(stdout_io.getvalue(), 'Check result: OK\n')
예제 #7
0
    def test_run_check_not_recovering(self, stdout_io):
        MockChecker.reset_mocks()
        MockChecker.place_mock.return_value = CheckResult.OK
        MockChecker.service_mock.return_value = CheckResult.OK
        MockChecker.flag_mock.side_effect = [CheckResult.OK, CheckResult.OK, CheckResult.FLAG_NOT_FOUND,
                                             CheckResult.OK, CheckResult.FAULTY]

        checkerlib.run_check(MockChecker)

        MockChecker.place_mock.assert_called_once_with(10)
        MockChecker.service_mock.assert_called_once()
        self.assertEqual(MockChecker.flag_mock.call_count, 5)
        self.assertEqual(stdout_io.getvalue(), 'Check result: FAULTY\n')
예제 #8
0
    def test_run_check_basic(self, stdout_io):
        MockChecker.reset_mocks()
        MockChecker.place_mock.return_value = CheckResult.OK
        MockChecker.service_mock.return_value = CheckResult.OK
        MockChecker.flag_mock.return_value = CheckResult.OK

        checkerlib.run_check(MockChecker)

        MockChecker.place_mock.assert_called_once_with(10)
        MockChecker.service_mock.assert_called_once()
        self.assertEqual(MockChecker.flag_mock.call_count, 6)
        self.assertEqual(MockChecker.flag_mock.call_args_list, [call(10), call(9), call(8), call(7), call(6),
                                                                call(5)])
        self.assertEqual(stdout_io.getvalue(), 'Check result: OK\n')
예제 #9
0
#!/usr/bin/env python3

from ctf_gameserver import checkerlib


class TestChecker(checkerlib.BaseChecker):
    def place_flag(self, tick):
        raise Exception('This is fine')

    def check_service(self):
        return checkerlib.CheckResult.OK

    def check_flag(self, tick):
        return checkerlib.CheckResult.OK


if __name__ == '__main__':

    checkerlib.run_check(TestChecker)
예제 #10
0
        pwn.log.info(
            f"Overall duration for check_service: {int(time.time() - start_time)}s"
        )
        return checkerlib.CheckResult.OK

    def check_flag(self, tick: int) -> checkerlib.CheckResult:
        """Tries to retrieve a flag."""
        start_time = time.time()
        interaction = Interaction(self.ip)

        flag = checkerlib.get_flag(tick)
        key = self._get_key_for_flag(flag)

        train = interaction.get_train(key)

        pwn.log.info(
            f"Overall duration for check_flag: {int(time.time() - start_time)}s"
        )
        if not train:
            return checkerlib.CheckResult.FLAG_NOT_FOUND
        if len(train.wagons) != 1:
            return checkerlib.CheckResult.FLAG_NOT_FOUND
        if train.wagons[0].content != flag:
            return checkerlib.CheckResult.FLAG_NOT_FOUND
        return checkerlib.CheckResult.OK


if __name__ == "__main__":
    checkerlib.run_check(MarsexpressChecker)
예제 #11
0
            logging.warning('Received non-UTF-8 data: %s', repr(resp))
            return checkerlib.CheckResult.FAULTY
        if resp != flag:
            logging.warning('Received wrong response to GET command')
            return checkerlib.CheckResult.FLAG_NOT_FOUND

        conn.close()
        return checkerlib.CheckResult.OK


def connect(ip):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((ip, 9999))
    return sock


def recv_line(conn):
    received = b''
    while not received.endswith(b'\n'):
        new = conn.recv(1024)
        if len(new) == 0:
            if not received.endswith(b'\n'):
                raise EOFError('Unexpected EOF')
            break
        received += new
    return received.decode('utf-8').rstrip()


if __name__ == '__main__':
    checkerlib.run_check(ExampleChecker)