import unittest from aioupnp.serialization.scpd import serialize_scpd_get, deserialize_scpd_get_response from aioupnp.device import Device from aioupnp.util import get_dict_val_case_insensitive class TestSCPDSerialization(unittest.TestCase): path, lan_address = '/IGDdevicedesc_brlan0.xml', '10.1.10.1' get_request = b'GET /IGDdevicedesc_brlan0.xml HTTP/1.1\r\n' \ b'Accept-Encoding: gzip\r\nHost: 10.1.10.1\r\nConnection: Close\r\n\r\n' response = b"HTTP/1.1 200 OK\r\n" \ b"CONTENT-LENGTH: 2972\r\n" \ b"CONTENT-TYPE: text/xml\r\n" \ b"DATE: Thu, 18 Oct 2018 01:20:23 GMT\r\n" \ b"LAST-MODIFIED: Fri, 28 Sep 2018 18:35:48 GMT\r\n" \ b"SERVER: Linux/3.14.28-Prod_17.2, UPnP/1.0, Portable SDK for UPnP devices/1.6.22\r\n" \ b"X-User-Agent: redsonic\r\n" \ b"CONNECTION: close\r\n" \ b"\r\n" \ b"\n\n\n1\n0\n\n\nurn:schemas-upnp-org:device:InternetGatewayDevice:1\nCGA4131COM\nCisco\nhttp://www.cisco.com/\nCGA4131COM\nCGA4131COM\nCGA4131COM\nhttp://www.cisco.com\n\nuuid:11111111-2222-3333-4444-555555555556\nCGA4131COM\n\n\nurn:schemas-upnp-org:service:Layer3Forwarding:1\nurn:upnp-org:serviceId:L3Forwarding1\n/Layer3ForwardingSCPD.xml\n/upnp/control/Layer3Forwarding\n/upnp/event/Layer3Forwarding\n\n\n\n\nurn:schemas-upnp-org:device:WANDevice:1\nWANDevice:1\nCisco\nhttp://www.cisco.com/\nCGA4131COM\nCGA4131COM\nCGA4131COM\nhttp://www.cisco.com\n\nuuid:11111111-2222-3333-4444-555555555556\nCGA4131COM\n\n\nurn:schemas-upnp-org:service:WANCommonInterfaceConfig:1\nurn:upnp-org:serviceId:WANCommonIFC1\n/WANCommonInterfaceConfigSCPD.xml\n/upnp/control/WANCommonInterfaceConfig0\n/upnp/event/WANCommonInterfaceConfig0\n\n\n\n \n urn:schemas-upnp-org:device:WANConnectionDevice:1\n WANConnectionDevice:1\n Cisco\n http://www.cisco.com/\n CGA4131COM\n CGA4131COM\n CGA4131COM\n http://www.cisco.com\n \n uuid:11111111-2222-3333-4444-555555555555\n CGA4131COM\n \n \n urn:schemas-upnp-org:service:WANIPConnection:1\n urn:upnp-org:serviceId:WANIPConn1\n /WANIPConnectionServiceSCPD.xml\n /upnp/control/WANIPConnection0\n /upnp/event/WANIPConnection0\n \n \n \n\n\n\nhttp://10.1.10.1/\n\n" expected_parsed = { 'specVersion': {'major': '1', 'minor': '0'}, 'device': { 'deviceType': 'urn:schemas-upnp-org:device:InternetGatewayDevice:1', 'friendlyName': 'CGA4131COM', 'manufacturer': 'Cisco', 'manufacturerURL': 'http://www.cisco.com/', 'modelDescription': 'CGA4131COM', 'modelName': 'CGA4131COM', 'modelNumber': 'CGA4131COM', 'modelURL': 'http://www.cisco.com', 'UDN': 'uuid:11111111-2222-3333-4444-555555555556', 'UPC': 'CGA4131COM', 'serviceList': { 'service': { 'serviceType': 'urn:schemas-upnp-org:service:Layer3Forwarding:1', 'serviceId': 'urn:upnp-org:serviceId:L3Forwarding1', 'SCPDURL': '/Layer3ForwardingSCPD.xml', 'controlURL': '/upnp/control/Layer3Forwarding', 'eventSubURL': '/upnp/event/Layer3Forwarding' } }, 'deviceList': { 'device': { 'deviceType': 'urn:schemas-upnp-org:device:WANDevice:1', 'friendlyName': 'WANDevice:1', 'manufacturer': 'Cisco', 'manufacturerURL': 'http://www.cisco.com/', 'modelDescription': 'CGA4131COM', 'modelName': 'CGA4131COM', 'modelNumber': 'CGA4131COM', 'modelURL': 'http://www.cisco.com', 'UDN': 'uuid:11111111-2222-3333-4444-555555555556', 'UPC': 'CGA4131COM', 'serviceList': { 'service': { 'serviceType': 'urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1', 'serviceId': 'urn:upnp-org:serviceId:WANCommonIFC1', 'SCPDURL': '/WANCommonInterfaceConfigSCPD.xml', 'controlURL': '/upnp/control/WANCommonInterfaceConfig0', 'eventSubURL': '/upnp/event/WANCommonInterfaceConfig0' } }, 'deviceList': { 'device': { 'deviceType': 'urn:schemas-upnp-org:device:WANConnectionDevice:1', 'friendlyName': 'WANConnectionDevice:1', 'manufacturer': 'Cisco', 'manufacturerURL': 'http://www.cisco.com/', 'modelDescription': 'CGA4131COM', 'modelName': 'CGA4131COM', 'modelNumber': 'CGA4131COM', 'modelURL': 'http://www.cisco.com', 'UDN': 'uuid:11111111-2222-3333-4444-555555555555', 'UPC': 'CGA4131COM', 'serviceList': { 'service': { 'serviceType': 'urn:schemas-upnp-org:service:WANIPConnection:1', 'serviceId': 'urn:upnp-org:serviceId:WANIPConn1', 'SCPDURL': '/WANIPConnectionServiceSCPD.xml', 'controlURL': '/upnp/control/WANIPConnection0', 'eventSubURL': '/upnp/event/WANIPConnection0' } } } } } }, 'presentationURL': 'http://10.1.10.1/' } } def test_serialize_get(self): self.assertEqual(serialize_scpd_get(self.path, self.lan_address), self.get_request) def test_deserialize_get_response(self): self.assertDictEqual(deserialize_scpd_get_response(self.response), self.expected_parsed) def test_deserialize_blank(self): self.assertDictEqual(deserialize_scpd_get_response(b''), {}) def test_deserialize_to_device_object(self): devices = [] services = [] device = Device(devices, services, **get_dict_val_case_insensitive(self.expected_parsed, "device")) expected_result = { 'deviceType': 'urn:schemas-upnp-org:device:InternetGatewayDevice:1', 'friendlyName': 'CGA4131COM', 'manufacturer': 'Cisco', 'manufacturerURL': 'http://www.cisco.com/', 'modelDescription': 'CGA4131COM', 'modelName': 'CGA4131COM', 'modelNumber': 'CGA4131COM', 'modelURL': 'http://www.cisco.com', 'udn': 'uuid:11111111-2222-3333-4444-555555555556', 'upc': 'CGA4131COM', 'serviceList': { 'service': { 'serviceType': 'urn:schemas-upnp-org:service:Layer3Forwarding:1', 'serviceId': 'urn:upnp-org:serviceId:L3Forwarding1', 'SCPDURL': '/Layer3ForwardingSCPD.xml', 'controlURL': '/upnp/control/Layer3Forwarding', 'eventSubURL': '/upnp/event/Layer3Forwarding' } }, 'deviceList': { 'device': { 'deviceType': 'urn:schemas-upnp-org:device:WANDevice:1', 'friendlyName': 'WANDevice:1', 'manufacturer': 'Cisco', 'manufacturerURL': 'http://www.cisco.com/', 'modelDescription': 'CGA4131COM', 'modelName': 'CGA4131COM', 'modelNumber': 'CGA4131COM', 'modelURL': 'http://www.cisco.com', 'UDN': 'uuid:11111111-2222-3333-4444-555555555556', 'UPC': 'CGA4131COM', 'serviceList': { 'service': { 'serviceType': 'urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1', 'serviceId': 'urn:upnp-org:serviceId:WANCommonIFC1', 'SCPDURL': '/WANCommonInterfaceConfigSCPD.xml', 'controlURL': '/upnp/control/WANCommonInterfaceConfig0', 'eventSubURL': '/upnp/event/WANCommonInterfaceConfig0' } }, 'deviceList': { 'device': { 'deviceType': 'urn:schemas-upnp-org:device:WANConnectionDevice:1', 'friendlyName': 'WANConnectionDevice:1', 'manufacturer': 'Cisco', 'manufacturerURL': 'http://www.cisco.com/', 'modelDescription': 'CGA4131COM', 'modelName': 'CGA4131COM', 'modelNumber': 'CGA4131COM', 'modelURL': 'http://www.cisco.com', 'UDN': 'uuid:11111111-2222-3333-4444-555555555555', 'UPC': 'CGA4131COM', 'serviceList': { 'service': { 'serviceType': 'urn:schemas-upnp-org:service:WANIPConnection:1', 'serviceId': 'urn:upnp-org:serviceId:WANIPConn1', 'SCPDURL': '/WANIPConnectionServiceSCPD.xml', 'controlURL': '/upnp/control/WANIPConnection0', 'eventSubURL': '/upnp/event/WANIPConnection0' } } } } } }, 'presentationURL': 'http://10.1.10.1/' } self.assertDictEqual(expected_result, device.as_dict())