Ejemplo n.º 1
0
    def test_raw(self):
        response = PingResponse({
            "description": "A Minecraft Server",
            "players": {
                "max": 20,
                "online": 0
            },
            "version": {
                "name": "1.8-pre1",
                "protocol": 44
            }
        })

        self.assertEqual(
            response.raw, {
                "description": "A Minecraft Server",
                "players": {
                    "max": 20,
                    "online": 0
                },
                "version": {
                    "name": "1.8-pre1",
                    "protocol": 44
                }
            })
async def test_same_host(hass: HomeAssistantType) -> None:
    """Test abort in case of same host name."""
    with patch(
            "aiodns.DNSResolver.query",
            side_effect=aiodns.error.DNSError,
    ):
        with patch(
                "mcstatus.server.MinecraftServer.status",
                return_value=PingResponse(STATUS_RESPONSE_RAW),
        ):
            unique_id = "mc.dummyserver.com-25565"
            config_data = {
                CONF_NAME: DEFAULT_NAME,
                CONF_HOST: "mc.dummyserver.com",
                CONF_PORT: DEFAULT_PORT,
            }
            mock_config_entry = MockConfigEntry(domain=DOMAIN,
                                                unique_id=unique_id,
                                                data=config_data)
            mock_config_entry.add_to_hass(hass)

            result = await hass.config_entries.flow.async_init(
                DOMAIN, context={"source": SOURCE_USER}, data=USER_INPUT)

            assert result["type"] == RESULT_TYPE_ABORT
            assert result["reason"] == "already_configured"
Ejemplo n.º 3
0
 def test_players_missing(self):
     with pytest.raises(ValueError):
         PingResponse({
             "description": "A Minecraft Server",
             "version": {
                 "name": "1.8-pre1",
                 "protocol": 44
             }
         })
Ejemplo n.º 4
0
 def test_version_missing(self):
     with pytest.raises(ValueError):
         PingResponse({
             "description": "A Minecraft Server",
             "players": {
                 "max": 20,
                 "online": 0
             }
         })
Ejemplo n.º 5
0
 def test_description_missing(self):
     with pytest.raises(ValueError):
         PingResponse({
             "players": {
                 "max": 20,
                 "online": 0
             },
             "version": {
                 "name": "1.8-pre1",
                 "protocol": 44
             }
         })
Ejemplo n.º 6
0
    def test_favicon_missing(self):
        response = PingResponse({
            "description": "A Minecraft Server",
            "players": {
                "max": 20,
                "online": 0
            },
            "version": {
                "name": "1.8-pre1",
                "protocol": 44
            }
        })

        self.assertIsNone(response.favicon)
Ejemplo n.º 7
0
    def test_description(self):
        response = PingResponse({
            "description": "A Minecraft Server",
            "players": {
                "max": 20,
                "online": 0
            },
            "version": {
                "name": "1.8-pre1",
                "protocol": 44
            },
        })

        assert response.description == "A Minecraft Server"
Ejemplo n.º 8
0
async def test_connection_succeeded_with_host(hass: HomeAssistant) -> None:
    """Test config entry in case of a successful connection with a host name."""
    with patch("aiodns.DNSResolver.query", side_effect=aiodns.error.DNSError,), patch(
        "mcstatus.server.MinecraftServer.status",
        return_value=PingResponse(STATUS_RESPONSE_RAW),
    ):
        result = await hass.config_entries.flow.async_init(
            DOMAIN, context={"source": SOURCE_USER}, data=USER_INPUT
        )

        assert result["type"] == FlowResultType.CREATE_ENTRY
        assert result["title"] == USER_INPUT[CONF_HOST]
        assert result["data"][CONF_NAME] == USER_INPUT[CONF_NAME]
        assert result["data"][CONF_HOST] == "mc.dummyserver.com"
Ejemplo n.º 9
0
    def test_favicon(self):
        response = PingResponse({
            "description": "A Minecraft Server",
            "players": {
                "max": 20,
                "online": 0
            },
            "version": {
                "name": "1.8-pre1",
                "protocol": 44
            },
            "favicon": "data:image/png;base64,foo"
        })

        self.assertEqual(response.favicon, "data:image/png;base64,foo")
Ejemplo n.º 10
0
    def test_players(self):
        response = PingResponse({
            "description": "A Minecraft Server",
            "players": {
                "max": 20,
                "online": 5
            },
            "version": {
                "name": "1.8-pre1",
                "protocol": 44
            }
        })

        self.assertIsNotNone(response.players)
        self.assertEqual(response.players.max, 20)
        self.assertEqual(response.players.online, 5)
Ejemplo n.º 11
0
    def test_version(self):
        response = PingResponse({
            "description": "A Minecraft Server",
            "players": {
                "max": 20,
                "online": 0
            },
            "version": {
                "name": "1.8-pre1",
                "protocol": 44
            }
        })

        self.assertIsNotNone(response.version)
        self.assertEqual(response.version.name, "1.8-pre1")
        self.assertEqual(response.version.protocol, 44)
Ejemplo n.º 12
0
    def test_players(self):
        response = PingResponse({
            "description": "A Minecraft Server",
            "players": {
                "max": 20,
                "online": 5
            },
            "version": {
                "name": "1.8-pre1",
                "protocol": 44
            },
        })

        assert response.players != None
        assert response.players.max == 20
        assert response.players.online == 5
Ejemplo n.º 13
0
async def test_connection_succeeded_with_host(hass: HomeAssistantType) -> None:
    """Test config entry in case of a successful connection with a host name."""
    with patch("mcstatus.server.MinecraftServer.ping", return_value=50):
        with patch(
                "mcstatus.server.MinecraftServer.status",
                return_value=PingResponse(STATUS_RESPONSE_RAW),
        ):
            result = await hass.config_entries.flow.async_init(
                DOMAIN, context={"source": SOURCE_USER}, data=USER_INPUT)

            assert result["type"] == RESULT_TYPE_CREATE_ENTRY
            assert result[
                "title"] == f"{USER_INPUT[CONF_HOST]}:{USER_INPUT[CONF_PORT]}"
            assert result["data"][CONF_NAME] == USER_INPUT[CONF_NAME]
            assert result["data"][CONF_HOST] == USER_INPUT[CONF_HOST]
            assert result["data"][CONF_PORT] == USER_INPUT[CONF_PORT]
Ejemplo n.º 14
0
async def test_connection_succeeded_with_ip6(hass: HomeAssistant) -> None:
    """Test config entry in case of a successful connection with an IPv6 address."""
    with patch("getmac.get_mac_address",
               return_value="01:23:45:67:89:ab"), patch(
                   "aiodns.DNSResolver.query",
                   side_effect=aiodns.error.DNSError,
               ), patch(
                   "mcstatus.server.MinecraftServer.status",
                   return_value=PingResponse(STATUS_RESPONSE_RAW),
               ):
        result = await hass.config_entries.flow.async_init(
            DOMAIN, context={"source": SOURCE_USER}, data=USER_INPUT_IPV6)

        assert result["type"] == RESULT_TYPE_CREATE_ENTRY
        assert result["title"] == USER_INPUT_IPV6[CONF_HOST]
        assert result["data"][CONF_NAME] == USER_INPUT_IPV6[CONF_NAME]
        assert result["data"][CONF_HOST] == "::ffff:0101:0101"
Ejemplo n.º 15
0
async def test_connection_succeeded_with_srv_record(
        hass: HomeAssistant) -> None:
    """Test config entry in case of a successful connection with a SRV record."""
    with patch(
            "aiodns.DNSResolver.query",
            return_value=SRV_RECORDS,
    ), patch(
            "mcstatus.server.MinecraftServer.status",
            return_value=PingResponse(STATUS_RESPONSE_RAW),
    ):
        result = await hass.config_entries.flow.async_init(
            DOMAIN, context={"source": SOURCE_USER}, data=USER_INPUT_SRV)

        assert result["type"] == RESULT_TYPE_CREATE_ENTRY
        assert result["title"] == USER_INPUT_SRV[CONF_HOST]
        assert result["data"][CONF_NAME] == USER_INPUT_SRV[CONF_NAME]
        assert result["data"][CONF_HOST] == USER_INPUT_SRV[CONF_HOST]
Ejemplo n.º 16
0
from mcstatus.pinger import PingResponse
from unittest import TestCase
from unittest.mock import MagicMock
from src.Minecraft import Minecraft
import re

status_vanilla_empty = PingResponse({
    'description': {
        'text': ''
    },
    'players': {
        'online': 0,
        'max': 8
    },
    'version': {
        'name': '1.12.1',
        'protocol': 338
    },
})

status_modded_online = PingResponse({
    'description': {
        'text': '§9§k||§bStuff§9§k||§r §7Whitelist:§r §2Offline✔§r\n§6Stuff',
    },
    'modinfo': {
        'modList': [
            {
                'modid': 'FML',
                'version': '8.0.99.99'
            },
            {