package com.connectsdk.discovery.provider.ssdp;
import com.connectsdk.core.TestUtil;
import junit.framework.Assert;
import org.junit.Test;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.UnknownHostException;
import javax.xml.parsers.ParserConfigurationException;
/**
* Created by oleksii.frolov on 1/30/2015.
*/
public class SSDPDeviceTest {
String deviceDescription =
"<root xmlns=\"urn:schemas-upnp-org:device-1-0\" xmlns:dlna=\"urn:schemas-dlna-org:device-1-0\">\n" +
"<specVersion>\n" +
"<major>1</major>\n" +
"<minor>0</minor>\n" +
"</specVersion>\n" +
"<device>\n" +
"<deviceType>urn:schemas-upnp-org:device:Basic:1</deviceType>\n" +
"<friendlyName>Adnan TV</friendlyName>\n" +
"<manufacturer>LG Electronics</manufacturer>\n" +
"<manufacturerURL>http://www.lge.com</manufacturerURL>\n" +
"<modelDescription/>\n" +
"<modelName>LG Smart TV</modelName>\n" +
"<modelURL>http://www.lge.com</modelURL>\n" +
"<modelNumber>WEBOS1</modelNumber>\n" +
"<serialNumber/>\n" +
"<UDN>uuid:86ea12c3-4ad7-2117-edbd-8177429fe21e</UDN>\n" +
"<serviceList>\n" +
"<service>\n" +
"<serviceType>urn:lge-com:service:webos-second-screen:1</serviceType>\n" +
"<serviceId>\n" +
"urn:lge-com:serviceId:webos-second-screen-3000-3001\n" +
"</serviceId>\n" +
"<SCPDURL>\n" +
"/WebOS_SecondScreen/86ea12c3-4ad7-2117-edbd-8177429fe21e/scpd.xml\n" +
"</SCPDURL>\n" +
"<controlURL>\n" +
"/WebOS_SecondScreen/86ea12c3-4ad7-2117-edbd-8177429fe21e/control.xml\n" +
"</controlURL>\n" +
"<eventSubURL>\n" +
"/WebOS_SecondScreen/86ea12c3-4ad7-2117-edbd-8177429fe21e/event.xml\n" +
"</eventSubURL>\n" +
"</service>\n" +
"</serviceList>\n" +
"</device>\n" +
"</root>";
String deviceSmallDescription =
"<root xmlns=\"urn:schemas-upnp-org:device-1-0\" xmlns:dlna=\"urn:schemas-dlna-org:device-1-0\">\n" +
"<specVersion>\n" +
"<major>1</major>\n" +
"<minor>0</minor>\n" +
"</specVersion>\n" +
"<device>\n" +
"<deviceType>urn:schemas-upnp-org:device:Basic:1</deviceType>\n" +
"</device>\n" +
"</root>";
@Test
public void testCreateDeviceWithNullUrl() {
try {
new SSDPDevice((String)null, null);
Assert.fail("MalformedURLException should be thrown");
} catch (MalformedURLException e) {
// OK
} catch (Exception e) {
Assert.fail("MalformedURLException should be thrown");
}
}
@Test
public void testCreateDeviceWithWrongUrl() {
try {
new SSDPDevice("http://unknown.host", null);
Assert.fail("MalformedURLException should be thrown");
} catch (UnknownHostException e) {
// OK
} catch (Exception e) {
Assert.fail("MalformedURLException should be thrown");
}
}
@Test
public void testCreateDeviceFromPlainTextContent() {
try {
new SSDPDevice(TestUtil.getMockUrl("plain text", null), null);
Assert.fail("SAXParseException should be thrown");
} catch (SAXParseException e) {
// OK
} catch (Exception e) {
Assert.fail("SAXParseException should be thrown");
}
}
@Test
public void testCreateDeviceFrom() throws IOException, ParserConfigurationException, SAXException {
SSDPDevice device = new SSDPDevice(TestUtil.getMockUrl(deviceDescription, "http://application_url/"), null);
Assert.assertEquals("urn:schemas-upnp-org:device:Basic:1", device.deviceType);
Assert.assertEquals("Adnan TV", device.friendlyName);
Assert.assertEquals("LG Electronics", device.manufacturer);
Assert.assertNull(device.modelDescription);
Assert.assertEquals(deviceDescription, device.locationXML);
Assert.assertEquals("http://application_url/", device.applicationURL);
Assert.assertEquals("hostname", device.ipAddress);
Assert.assertEquals(80, device.port);
Assert.assertEquals("http://hostname", device.serviceURI);
Assert.assertEquals("http://hostname:80", device.baseURL);
Assert.assertEquals("WEBOS1", device.modelNumber);
}
@Test
public void testCreateDeviceFromSmallDescription() throws IOException, ParserConfigurationException, SAXException {
SSDPDevice device = new SSDPDevice(TestUtil.getMockUrl(deviceSmallDescription, "http://application_url"), null);
Assert.assertEquals("urn:schemas-upnp-org:device:Basic:1", device.deviceType);
Assert.assertNull(device.friendlyName);
Assert.assertNull(device.manufacturer);
Assert.assertNull(device.modelDescription);
Assert.assertEquals(deviceSmallDescription, device.locationXML);
Assert.assertEquals("http://application_url/", device.applicationURL);
Assert.assertEquals("hostname", device.ipAddress);
Assert.assertEquals(80, device.port);
Assert.assertEquals("http://hostname", device.serviceURI);
Assert.assertEquals("http://hostname:80", device.baseURL);
Assert.assertNull(device.modelNumber);
}
}