def main(): args = parse_arguments() if args.count not in range(1000000): print("Bad number of packets to transmit.", file=sys.stderr) return try: cli = Client(args.server, args.count, args.verbose, args.dest) if args.ping: cli.run_direct_ping() elif args.reverse: cli.run_reverse_ping() else: if not args.dest: print("Destination ip and port needed", file=sys.stderr) return elif args.dest and len(args.dest.split(':')) != 2: print("Destination ip must be likely <ip>:<port>", file=sys.stderr) return cli.run_proxy_ping() cli.close() except (gaierror, ConnectionRefusedError) as e: print(f"Unable to connect to server: {str(e)}", file=sys.stderr) except ConnectionClosedException as e: print(f"Connection Closed: {str(e)}", file=sys.stderr)
class TestClient(unittest.TestCase): def setUp(self): args = parse_args() self.client = Client((args.addr, args.port), 'user') def test_username(self): result = self.client.validate_username('x' * 20) self.assertIs(type(result), str, 'Результат должен юыть строкой') def test_username_too_long(self): with self.assertRaises(SystemExit, msg='Имя должно быть <= 25 символов'): self.client.validate_username('x' * 26) def test_create_presence(self): result = self.client.create_presence() self.assertIs(type(result), dict, 'результат должен быть словарём') def test_translate_response_type(self): with self.assertRaises(TypeError, msg='Ответ должен быть словарём'): self.client.translate_response( str({ 'user': '******', 'response': 200 })) def test_translate_response_code(self): with self.assertRaises( MandatoryKeyError, msg='Не хватает обязательного атрибута response'): self.client.translate_response({'user': '******'}) def test_translate_response_code_len(self): with self.assertRaises(ResponseCodeLenError, msg='Длина кода должна быть 3 символа'): self.client.translate_response({'user': '******', 'response': 2000}) def test_translate_response_unknown(self): with self.assertRaises(ResponseCodeError, msg='Неверный код ответа'): self.client.translate_response({'user': '******', 'response': 199}) def tearDown(self): self.client.close()
from client.client import Client import time if __name__ == "__main__": client = Client(('', 25566)) client.connect(('localhost', 25565)) client.close()