blob: 619e25ddc6831c2c29d7d75301a4bffe79138480 [file] [log] [blame]
/***********************************************************************
* Copyright (c) 2006-2007 The Apache Software Foundation. *
* 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.apache.vysper.xmpp.protocol;
import java.util.ArrayList;
import junit.framework.TestCase;
import org.apache.vysper.xml.fragment.Attribute;
import org.apache.vysper.xml.fragment.XMLFragment;
import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.addressing.EntityImpl;
import org.apache.vysper.xmpp.modules.core.base.BaseStreamStanzaDictionary;
import org.apache.vysper.xmpp.modules.core.base.handler.IQHandler;
import org.apache.vysper.xmpp.modules.core.base.handler.MessageHandler;
import org.apache.vysper.xmpp.modules.core.base.handler.TestIQHandler;
import org.apache.vysper.xmpp.modules.core.im.handler.PresenceHandler;
import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.stanza.StanzaBuilder;
/**
*/
public class StanzaHandlerLookupTestCase extends TestCase {
private static final Entity SERVER_ENTITY = EntityImpl.parseUnchecked("vysper.org");
private static final Entity SUBDOMAIN_ENTITY = EntityImpl.parseUnchecked("sub.vysper.org");
public void testDictionaryHierarchy() {
NamespaceHandlerDictionary upperNamespaceHandlerDictionary = new NamespaceHandlerDictionary("testNSURI1");
CallTestStanzaHandler upperStanzaHandler = new CallTestStanzaHandler("testDictionaryHierarchy", "testNSURI1");
upperNamespaceHandlerDictionary.register(upperStanzaHandler);
NamespaceHandlerDictionary lowerNamespaceHandlerDictionary = new NamespaceHandlerDictionary("testNSURI2");
CallTestStanzaHandler lowerStanzaHandler = new CallTestStanzaHandler("testDictionaryHierarchy", "testNSURI2");
lowerNamespaceHandlerDictionary.register(lowerStanzaHandler);
StanzaHandlerLookup stanzaHandlerLookup = initStanzaHandlerLookup();
stanzaHandlerLookup.addDictionary(upperNamespaceHandlerDictionary);
stanzaHandlerLookup.addDictionary(lowerNamespaceHandlerDictionary);
Stanza nonExistingStanza = new Stanza("testNSURI", "testDictionaryHierarchyNotExist", null,
new ArrayList<Attribute>(), new ArrayList<XMLFragment>());
StanzaHandler handler = stanzaHandlerLookup.getHandler(nonExistingStanza);
assertNull("handler not found", handler);
Stanza existingStanzaNS1 = new Stanza("testNSURI1", "testDictionaryHierarchy", null,
new ArrayList<Attribute>(), new ArrayList<XMLFragment>());
handler = stanzaHandlerLookup.getHandler(existingStanzaNS1);
assertNotNull("handler found in dict1", handler);
assertTrue("verify got called", ((CallTestStanzaHandler) handler).isVerifyCalled());
assertNotSame("lower not found", lowerStanzaHandler, handler);
assertSame("upper found", upperStanzaHandler, handler);
Stanza existingStanzaNS2 = new Stanza("testNSURI2", "testDictionaryHierarchy", null,
new ArrayList<Attribute>(), new ArrayList<XMLFragment>());
handler = stanzaHandlerLookup.getHandler(existingStanzaNS2);
assertTrue("verify got called", ((CallTestStanzaHandler) handler).isVerifyCalled());
assertNotNull("handler found in dict2", handler);
assertSame("lower found", lowerStanzaHandler, handler);
assertNotSame("upper not found", upperStanzaHandler, handler);
}
public void testLookupCoreHandlerClientNS() {
StanzaHandlerLookup stanzaHandlerLookup = initStanzaHandlerLookup();
stanzaHandlerLookup.addDictionary(new BaseStreamStanzaDictionary());
Stanza stanza = new StanzaBuilder("iq", NamespaceURIs.JABBER_CLIENT).build();
StanzaHandler handler = stanzaHandlerLookup.getHandler(stanza);
assertNotNull("handler found", handler);
assertTrue("iq handler found", handler instanceof IQHandler);
}
private StanzaHandlerLookup initStanzaHandlerLookup() {
return new StanzaHandlerLookup(null);
}
public void testLookupCoreHandlerServerNS() {
StanzaHandlerLookup stanzaHandlerLookup = initStanzaHandlerLookup();
stanzaHandlerLookup.addDictionary(new BaseStreamStanzaDictionary());
Stanza stanza = new StanzaBuilder("iq", NamespaceURIs.JABBER_SERVER).build();
StanzaHandler handler = stanzaHandlerLookup.getHandler(stanza);
assertNotNull("handler found", handler);
assertTrue("iq handler found", handler instanceof IQHandler);
}
public void testLookupCoreHandlerWrongNamespace() {
StanzaHandlerLookup stanzaHandlerLookup = initStanzaHandlerLookup();
stanzaHandlerLookup.addDictionary(new BaseStreamStanzaDictionary());
Stanza stanza = new StanzaBuilder("iq", "arbitraryNamespace").build();
StanzaHandler handler = stanzaHandlerLookup.getHandler(stanza);
assertTrue("iq handler with arbitrary namespace not found", handler instanceof IQHandler);
}
public void testLookupPresenceHandler() {
StanzaHandlerLookup stanzaHandlerLookup = initStanzaHandlerLookup();
stanzaHandlerLookup.addDictionary(new BaseStreamStanzaDictionary());
Stanza stanza = new StanzaBuilder("presence", NamespaceURIs.JABBER_CLIENT).build();
StanzaHandler handler = stanzaHandlerLookup.getHandler(stanza);
assertNotNull("handler found", handler);
assertTrue("iq handler found", handler instanceof PresenceHandler);
}
public void testLookupMessageHandler() {
StanzaHandlerLookup stanzaHandlerLookup = initStanzaHandlerLookup();
stanzaHandlerLookup.addDictionary(new BaseStreamStanzaDictionary());
Stanza stanza = new StanzaBuilder("message", NamespaceURIs.JABBER_CLIENT).build();
StanzaHandler handler = stanzaHandlerLookup.getHandler(stanza);
assertNotNull("handler found", handler);
assertTrue("iq handler found", handler instanceof MessageHandler);
}
public void testLookupSpecializedIQHandler() {
StanzaHandlerLookup stanzaHandlerLookup = initStanzaHandlerLookup();
stanzaHandlerLookup.addDictionary(new BaseStreamStanzaDictionary());
NamespaceHandlerDictionary testDictionary = new NamespaceHandlerDictionary("test:namespace:OK");
testDictionary.register(new TestIQHandler("testOK", "test:namespace:OK"));
stanzaHandlerLookup.addDictionary(testDictionary);
Stanza stanza = buildStanza("testOK", "test:namespace:FAIL");
StanzaHandler handler = stanzaHandlerLookup.getHandler(stanza);
assertTrue("handler not found for NS", handler instanceof ServiceUnavailableStanzaErrorHandler);
stanza = buildStanza("testFAIL", "test:namespace:OK");
handler = stanzaHandlerLookup.getHandler(stanza);
assertTrue("handler not found for name", handler instanceof ServiceUnavailableStanzaErrorHandler);
stanza = buildStanza("testOK", "test:namespace:OK");
handler = stanzaHandlerLookup.getHandler(stanza);
assertNotNull("handler found", handler);
assertTrue("test handler", TestIQHandler.class.equals(handler.getClass()));
}
private Stanza buildStanza(String name, String namespaceURI) {
return buildStanza(name, namespaceURI, null);
}
private Stanza buildStanza(String name, String namespaceURI, String to) {
StanzaBuilder stanzaBuilder = new StanzaBuilder("iq", NamespaceURIs.JABBER_CLIENT);
stanzaBuilder.addAttribute("id", "1");
stanzaBuilder.addAttribute("type", "get");
if (to != null) {
stanzaBuilder.addAttribute("to", to);
}
stanzaBuilder.startInnerElement(name, namespaceURI).endInnerElement();
Stanza stanza = stanzaBuilder.build();
return stanza;
}
}