raise UPnPError on null or empty result from get_external_ip
This commit is contained in:
parent
312bab71d5
commit
55f78f2895
2 changed files with 17 additions and 2 deletions
|
@ -253,6 +253,8 @@ class SOAPCommands:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
assert name in self._wrappers_no_args
|
assert name in self._wrappers_no_args
|
||||||
result: str = await self._wrappers_no_args[name]()
|
result: str = await self._wrappers_no_args[name]()
|
||||||
|
if not result:
|
||||||
|
raise UPnPError("Got null external ip address")
|
||||||
return result
|
return result
|
||||||
|
|
||||||
# async def GetNATRSIPStatus(self) -> Tuple[bool, bool]:
|
# async def GetNATRSIPStatus(self) -> Tuple[bool, bool]:
|
||||||
|
|
|
@ -39,10 +39,11 @@ class UPnPCommandTestCase(AsyncioTestCase):
|
||||||
|
|
||||||
class TestGetExternalIPAddress(UPnPCommandTestCase):
|
class TestGetExternalIPAddress(UPnPCommandTestCase):
|
||||||
client_address = '11.2.3.222'
|
client_address = '11.2.3.222'
|
||||||
def setUp(self) -> None:
|
|
||||||
self.replies.update({b'POST /soap.cgi?service=WANIPConn1 HTTP/1.1\r\nHost: 11.2.3.4\r\nUser-Agent: python3/aioupnp, UPnP/1.0, MiniUPnPc/1.9\r\nContent-Length: 285\r\nContent-Type: text/xml\r\nSOAPAction: "urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress"\r\nConnection: Close\r\nCache-Control: no-cache\r\nPragma: no-cache\r\n\r\n<?xml version="1.0"?>\r\n<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:GetExternalIPAddress xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1"></u:GetExternalIPAddress></s:Body></s:Envelope>\r\n': b"HTTP/1.1 200 OK\r\nServer: WebServer\r\nDate: Wed, 22 May 2019 03:25:57 GMT\r\nConnection: close\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nCONTENT-LENGTH: 365 \r\nEXT:\r\n\r\n<?xml version=\"1.0\"?>\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n\t<s:Body>\n\t\t<u:GetExternalIPAddressResponse xmlns:u=\"urn:schemas-upnp-org:service:WANIPConnection:1\">\n<NewExternalIPAddress>11.222.3.44</NewExternalIPAddress>\n</u:GetExternalIPAddressResponse>\n\t</s:Body>\n</s:Envelope>\n"})
|
|
||||||
|
|
||||||
async def test_get_external_ip(self):
|
async def test_get_external_ip(self):
|
||||||
|
request = b'POST /soap.cgi?service=WANIPConn1 HTTP/1.1\r\nHost: 11.2.3.4\r\nUser-Agent: python3/aioupnp, UPnP/1.0, MiniUPnPc/1.9\r\nContent-Length: 285\r\nContent-Type: text/xml\r\nSOAPAction: "urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress"\r\nConnection: Close\r\nCache-Control: no-cache\r\nPragma: no-cache\r\n\r\n<?xml version="1.0"?>\r\n<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:GetExternalIPAddress xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1"></u:GetExternalIPAddress></s:Body></s:Envelope>\r\n'
|
||||||
|
self.replies.update({request: b"HTTP/1.1 200 OK\r\nServer: WebServer\r\nDate: Wed, 22 May 2019 03:25:57 GMT\r\nConnection: close\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nCONTENT-LENGTH: 365 \r\nEXT:\r\n\r\n<?xml version=\"1.0\"?>\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n\t<s:Body>\n\t\t<u:GetExternalIPAddressResponse xmlns:u=\"urn:schemas-upnp-org:service:WANIPConnection:1\">\n<NewExternalIPAddress>11.222.3.44</NewExternalIPAddress>\n</u:GetExternalIPAddressResponse>\n\t</s:Body>\n</s:Envelope>\n"})
|
||||||
|
self.addCleanup(self.replies.pop, request)
|
||||||
with mock_tcp_and_udp(self.loop, tcp_replies=self.replies):
|
with mock_tcp_and_udp(self.loop, tcp_replies=self.replies):
|
||||||
gateway = Gateway(self.reply, self.m_search_args, self.client_address, self.gateway_address, loop=self.loop)
|
gateway = Gateway(self.reply, self.m_search_args, self.client_address, self.gateway_address, loop=self.loop)
|
||||||
await gateway.discover_commands()
|
await gateway.discover_commands()
|
||||||
|
@ -50,6 +51,18 @@ class TestGetExternalIPAddress(UPnPCommandTestCase):
|
||||||
external_ip = await upnp.get_external_ip()
|
external_ip = await upnp.get_external_ip()
|
||||||
self.assertEqual("11.222.3.44", external_ip)
|
self.assertEqual("11.222.3.44", external_ip)
|
||||||
|
|
||||||
|
async def test_null_external_ip(self):
|
||||||
|
request = b'POST /soap.cgi?service=WANIPConn1 HTTP/1.1\r\nHost: 11.2.3.4\r\nUser-Agent: python3/aioupnp, UPnP/1.0, MiniUPnPc/1.9\r\nContent-Length: 285\r\nContent-Type: text/xml\r\nSOAPAction: "urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress"\r\nConnection: Close\r\nCache-Control: no-cache\r\nPragma: no-cache\r\n\r\n<?xml version="1.0"?>\r\n<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:GetExternalIPAddress xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1"></u:GetExternalIPAddress></s:Body></s:Envelope>\r\n'
|
||||||
|
self.replies.update({
|
||||||
|
request: b"HTTP/1.1 200 OK\r\nServer: WebServer\r\nDate: Wed, 22 May 2019 03:25:57 GMT\r\nConnection: close\r\nCONTENT-TYPE: text/xml; charset=\"utf-8\"\r\nCONTENT-LENGTH: 354 \r\nEXT:\r\n\r\n<?xml version=\"1.0\"?>\n<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n\t<s:Body>\n\t\t<u:GetExternalIPAddressResponse xmlns:u=\"urn:schemas-upnp-org:service:WANIPConnection:1\">\n<NewExternalIPAddress></NewExternalIPAddress>\n</u:GetExternalIPAddressResponse>\n\t</s:Body>\n</s:Envelope>\n"})
|
||||||
|
self.addCleanup(self.replies.pop, request)
|
||||||
|
with mock_tcp_and_udp(self.loop, tcp_replies=self.replies):
|
||||||
|
gateway = Gateway(self.reply, self.m_search_args, self.client_address, self.gateway_address, loop=self.loop)
|
||||||
|
await gateway.discover_commands()
|
||||||
|
upnp = UPnP(self.client_address, self.gateway_address, gateway)
|
||||||
|
with self.assertRaises(UPnPError):
|
||||||
|
await upnp.get_external_ip()
|
||||||
|
|
||||||
|
|
||||||
class TestMalformedGetExternalIPAddressResponse(UPnPCommandTestCase):
|
class TestMalformedGetExternalIPAddressResponse(UPnPCommandTestCase):
|
||||||
client_address = '11.2.3.222'
|
client_address = '11.2.3.222'
|
||||||
|
|
Loading…
Reference in a new issue