mirror of https://github.com/conqp/rcon
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.7 KiB
52 lines
1.7 KiB
"""Tests the configuration file parsing."""
|
|
|
|
from itertools import product
|
|
from random import shuffle
|
|
from string import printable
|
|
from typing import Iterator
|
|
from unittest import TestCase
|
|
|
|
from rcon.config import Config
|
|
|
|
|
|
def random_passwd() -> str:
|
|
"""Generates a random password containing all printable characters."""
|
|
|
|
chars = list(printable)
|
|
shuffle(chars)
|
|
return "".join(chars)
|
|
|
|
|
|
class TestConfig(TestCase):
|
|
"""Test the named tuple Config."""
|
|
|
|
def setUp(self):
|
|
"""Sets up test and target data."""
|
|
self.hosts = ["subsubdomain.subdomain.example.com", "locahost", "127.0.0.1"]
|
|
self.ports = range(65_536)
|
|
|
|
@property
|
|
def _sockets(self) -> Iterator[tuple[str, int]]:
|
|
"""Yields (host, port) tuples."""
|
|
return product(self.hosts, self.ports)
|
|
|
|
def _test_from_string_with_password(self, host, port):
|
|
"""Tests the Config.from_string() method with a password."""
|
|
passwd = random_passwd()
|
|
config = Config.from_string(f"{passwd}@{host}:{port}")
|
|
self.assertEqual(config.host, host)
|
|
self.assertEqual(config.port, port)
|
|
self.assertEqual(config.passwd, passwd)
|
|
|
|
def _test_from_string_without_password(self, host, port):
|
|
"""Tests the Config.from_string() method without a password."""
|
|
config = Config.from_string(f"{host}:{port}")
|
|
self.assertEqual(config.host, host)
|
|
self.assertEqual(config.port, port)
|
|
self.assertIsNone(config.passwd)
|
|
|
|
def test_from_string(self):
|
|
"""Tests the Config.from_string() method."""
|
|
for host, port in self._sockets:
|
|
self._test_from_string_with_password(host, port)
|
|
self._test_from_string_without_password(host, port)
|
|
|