def test_parse_client_args_no_addr(self):
        """
        Шаманство ниже требуется, чтобы отловить именно
        argparse.ArgumentError: argument -a: expected one argument

        unittest затирает стэктрейс и мы видим только конечный эксепшн (SystemExit).
        Багу знают:
        https://bugs.python.org/issue24959
        Есть пул-реквест на фикс, но он пока открыт (на 20.02.2022)
        """

        # ioerr - не обязателен
        # без него лезут описания ошибок из ArgumentError
        ioerr = StringIO()
        with contextlib.redirect_stderr(ioerr):
            with self.assertRaises(SystemExit) as e:
                server.parse_srv_args()

        e_context = e.exception.__context__  # <argparse.ArgumentError>
        conditions = [
            e_context.argument_name == '-a',
            e_context.message == 'expected one argument',
        ]

        self.assertTrue(all(conditions))
    def test_parse_client_args_no_port(self):
        ioerr = StringIO()
        with contextlib.redirect_stderr(ioerr):
            with self.assertRaises(SystemExit) as e:
                server.parse_srv_args()

        e_context = e.exception.__context__  # <argparse.ArgumentError>
        conditions = [
            e_context.argument_name == '-p',
            e_context.message == 'expected one argument',
        ]

        self.assertTrue(all(conditions))
    def test_parse_client_args_custom_port(self):
        test_args = server.parse_srv_args()

        self.assertEqual(test_args.p, 7000)
    def test_parse_client_args_custom_addr(self):
        test_args = server.parse_srv_args()

        self.assertEqual(test_args.a, '28.28.28.28')
    def test_parse_client_args_default_port(self):
        test_args = server.parse_srv_args()

        self.assertEqual(test_args.p, DEFAULT_PORT)
    def test_parse_client_args_default_addr(self):
        test_args = server.parse_srv_args()

        self.assertEqual(test_args.a, '')