/* * Copyright 2012 buddycloud * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.buddycloud.mediaserver.xmpp; import java.util.List; import java.util.Properties; import org.dom4j.Element; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.xmpp.component.AbstractComponent; import org.xmpp.packet.IQ; import org.xmpp.packet.JID; import org.xmpp.packet.Packet; import com.buddycloud.mediaserver.commons.MediaServerConfiguration; public class MediaServerComponentTest { private static final String DISCO_INFO_NS = "http://jabber.org/protocol/disco#info"; IQ discoRequest = null; final String packetId = "12345-67890-09876-54321"; final String to = "mediaserver.example.com"; final String from = "me@example.com/media-lover"; @Before public void setup() { // <query xmlns='http://jabber.org/protocol/disco#info'/> IQ request = new IQ(); request.setTo(to); request.setFrom(from); request.setID(packetId); request.getElement().addElement("query", DISCO_INFO_NS); discoRequest = request; } @Test public void withoutApiEndPointInConfigurationStandardDiscoResponse() throws Exception { ComponentManagerMock cm = new ComponentManagerMock(); MediaServerComponent component = new MediaServerComponent(new Properties()); component.initialize(new JID(to), cm); component.processPacket(discoRequest); Packet replyPacket = cm.collectPacket(); Element queryEl = replyPacket.getElement().element("query"); Assert.assertEquals(AbstractComponent.NAMESPACE_DISCO_INFO, queryEl.getNamespaceURI()); Element identityEl = queryEl.element("identity"); Assert.assertEquals("component", identityEl.attributeValue("category")); Assert.assertEquals("Media Server", identityEl.attributeValue("name")); Assert.assertEquals("generic", identityEl.attributeValue("type")); Assert.assertTrue(hasFeature(AbstractComponent.NAMESPACE_DISCO_INFO, queryEl)); Assert.assertTrue(hasFeature(AbstractComponent.NAMESPACE_XMPP_PING, queryEl)); Assert.assertTrue(hasFeature(AbstractComponent.NAMESPACE_LAST_ACTIVITY, queryEl)); Assert.assertTrue(hasFeature(AbstractComponent.NAMESPACE_ENTITY_TIME, queryEl)); Assert.assertNull(queryEl.element("x")); } @SuppressWarnings("unchecked") private static boolean hasFeature(String var, Element queryEl) { List<Element> features = queryEl.elements("feature"); for (Element feature : features) { if (feature.attributeValue("var").equals(var)) { return true; } } return false; } @SuppressWarnings("unchecked") private static String getFieldValue(String var, Element xEl) { List<Element> fields = xEl.elements("field"); for (Element field : fields) { if (field.attributeValue("var").equals(var)) { return field.elementText("value"); } } return null; } @Test public void withApiEndPointInConfigurationServiceDiscoveryExtensionIncluded() throws Exception { String endPoint = "https://api.buddycloud.com"; Properties properties = new Properties(); properties.put(MediaServerConfiguration.HTTP_ENDPOINT, endPoint); ComponentManagerMock cm = new ComponentManagerMock(); MediaServerComponent component = new MediaServerComponent(properties); component.initialize(new JID(to), cm); component.processPacket(discoRequest); Packet replyPacket = cm.collectPacket(); Element queryEl = replyPacket.getElement().element("query"); Assert.assertEquals(AbstractComponent.NAMESPACE_DISCO_INFO, queryEl.getNamespaceURI()); Element identityEl = queryEl.element("identity"); Assert.assertEquals("component", identityEl.attributeValue("category")); Assert.assertEquals("Media Server", identityEl.attributeValue("name")); Assert.assertEquals("generic", identityEl.attributeValue("type")); Assert.assertTrue(hasFeature(AbstractComponent.NAMESPACE_DISCO_INFO, queryEl)); Assert.assertTrue(hasFeature(AbstractComponent.NAMESPACE_XMPP_PING, queryEl)); Assert.assertTrue(hasFeature(AbstractComponent.NAMESPACE_LAST_ACTIVITY, queryEl)); Assert.assertTrue(hasFeature(AbstractComponent.NAMESPACE_ENTITY_TIME, queryEl)); Element xEl = queryEl.element("x"); Assert.assertNotNull(xEl); Assert.assertEquals("jabber:x:data", xEl.getNamespaceURI()); Assert.assertEquals("http://buddycloud.org/v1/api", getFieldValue("FORM_TYPE", xEl)); Assert.assertEquals("https://api.buddycloud.com", getFieldValue("endpoint", xEl)); } }