/* * Copyright (C) 2004-2008 Jive Software. All rights reserved. * * 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 org.jivesoftware.util; import static org.junit.Assert.assertEquals; import org.dom4j.Element; import org.dom4j.QName; import org.jivesoftware.openfire.entitycaps.EntityCapabilitiesManager; import org.jivesoftware.util.cache.CacheFactory; import org.junit.BeforeClass; import org.junit.Test; import org.xmpp.packet.IQ; /** * Test cases for the {@link EntityCapabilitiesManager} class. * * @see <a * href="http://xmpp.org/extensions/xep-0115.html">XEP-0115: Entity Capabilities</a> * @author Guus der Kinderen, guus.der.kinderen@gmail.com */ public class EntityCapabilitiesManagerTest { @BeforeClass public static void setUp() throws Exception { CacheFactory.initialize(); } /** * Tests the CAPS verification string generation based on the * "Simple Generation Example" provided in section 5.2 of XEP-0115 (version * 1.4 and later). */ @Test public void testSimpleGenerationExample() throws Exception { // formulate the result stanza final IQ iq = new IQ(IQ.Type.result); iq.setFrom("nurse@capulet.lit/chamber"); iq.setTo("juliet@capulet.lit"); iq.setID("simpleexample1"); final Element query = iq.setChildElement("query", "http://jabber.org/protocol/disco#info"); // Consider an entity whose category is "client", whose service // discovery type is "pc", service discovery name is "Exodus 0.9.1" // (...) final Element identity = query.addElement("identity"); identity.addAttribute("category", "client"); identity.addAttribute("type", "pc"); identity.addAttribute("name", "Exodus 0.9.1"); // (...) and whose supported features are // "http://jabber.org/protocol/disco#info", // "http://jabber.org/protocol/disco#items", // "http://jabber.org/protocol/muc" and // "http://jabber.org/protocol/caps" query.addElement("feature").addAttribute("var", "http://jabber.org/protocol/disco#info"); query.addElement("feature").addAttribute("var", "http://jabber.org/protocol/disco#items"); query.addElement("feature").addAttribute("var", "http://jabber.org/protocol/muc"); query.addElement("feature").addAttribute("var", "http://jabber.org/protocol/caps"); // Using the SHA-1 algorithm (...) final String verification = EntityCapabilitiesManager.generateVerHash( iq, "sha-1"); // the verification string result must be QgayPKawpkPSDYmwT/WM94uAlu0= assertEquals("QgayPKawpkPSDYmwT/WM94uAlu0=", verification); } /** * Tests the CAPS verification string generation based on the * "Complex Generation Example" provided in section 5.3 of XEP-0115 (version * 1.4 and later). */ @Test public void testComplexGenerationExample() throws Exception { // formulate the result stanza final IQ iq = new IQ(IQ.Type.result); iq.setFrom("nurse@capulet.lit/chamber"); iq.setTo("juliet@capulet.lit"); iq.setID("simpleexample1"); final Element query = iq.setChildElement("query", "http://jabber.org/protocol/disco#info"); query.addAttribute("node", "http://psi-im.org#q07IKJEyjvHSyhy//CH0CxmKi8w="); // Two identities: "client/pc/Psi" and "client/pc/" final Element identityA = query.addElement("identity"); identityA.addAttribute("category", "client"); identityA.addAttribute("type", "pc"); identityA.addAttribute("name", "Psi 0.11"); identityA.addAttribute("xml:lang", "en"); final Element identityB = query.addElement("identity"); identityB.addAttribute("category", "client"); identityB.addAttribute("type", "pc"); identityB.addAttribute("name", "\u03a8 0.11"); identityB.addAttribute("xml:lang", "el"); // the features: "http://jabber.org/protocol/caps", // http://jabber.org/protocol/disco#info", // "http://jabber.org/protocol/disco#items", // "http://jabber.org/protocol/muc". query.addElement("feature").addAttribute("var", "http://jabber.org/protocol/disco#info"); query.addElement("feature").addAttribute("var", "http://jabber.org/protocol/disco#items"); query.addElement("feature").addAttribute("var", "http://jabber.org/protocol/muc"); query.addElement("feature").addAttribute("var", "http://jabber.org/protocol/caps"); // extended service discovery forms final Element ext = query.addElement(QName.get("x", "jabber:x:data")); ext.addAttribute("type", "result"); final Element formField = ext.addElement("field"); formField.addAttribute("var", "FORM_TYPE"); formField.addAttribute("type", "hidden"); formField.addElement("value") .setText("urn:xmpp:dataforms:softwareinfo"); final Element ipField = ext.addElement("field"); ipField.addAttribute("var", "ip_version"); ipField.addElement("value").setText("ipv4"); ipField.addElement("value").setText("ipv6"); final Element osField = ext.addElement("field"); osField.addAttribute("var", "os"); osField.addElement("value").setText("Mac"); final Element osvField = ext.addElement("field"); osvField.addAttribute("var", "os_version"); osvField.addElement("value").setText("10.5.1"); final Element softwareField = ext.addElement("field"); softwareField.addAttribute("var", "software"); softwareField.addElement("value").setText("Psi"); final Element softwarevField = ext.addElement("field"); softwarevField.addAttribute("var", "software_version"); softwarevField.addElement("value").setText("0.11"); // Using the SHA-1 algorithm (...) final String verification = EntityCapabilitiesManager.generateVerHash( iq, "SHA-1"); // the verification string result must be q07IKJEyjvHSyhy//CH0CxmKi8w= assertEquals("q07IKJEyjvHSyhy//CH0CxmKi8w=", verification); } }