| /*********************************************************************** |
| * 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 junit.framework.TestCase; |
| |
| import org.apache.vysper.xml.fragment.XMLElementVerifier; |
| import org.apache.vysper.xmpp.addressing.Entity; |
| import org.apache.vysper.xmpp.addressing.EntityImpl; |
| import org.apache.vysper.xmpp.delivery.StanzaReceiverRelay; |
| import org.apache.vysper.xmpp.modules.core.base.BaseStreamStanzaDictionary; |
| import org.apache.vysper.xmpp.server.DefaultServerRuntimeContext; |
| import org.apache.vysper.xmpp.server.SessionState; |
| import org.apache.vysper.xmpp.server.TestSessionContext; |
| import org.apache.vysper.xmpp.stanza.Stanza; |
| import org.apache.vysper.xmpp.stanza.StanzaBuilder; |
| import org.apache.vysper.xmpp.stanza.StanzaErrorCondition; |
| |
| /** |
| * test basic behavior of ProtocolWorker.aquireStanza() |
| */ |
| public class ProtocolWorkerStateAwarenessTestCase extends TestCase { |
| private ProtocolWorker protocolWorker; |
| |
| private TestSessionContext sessionContext; |
| |
| private SessionStateHolder sessionStateHolder; |
| |
| @Override |
| protected void setUp() throws Exception { |
| super.setUp(); |
| |
| protocolWorker = new ProtocolWorker(); |
| sessionStateHolder = new SessionStateHolder(); |
| Entity serverEnitity = new EntityImpl(null, "vysper-server.org", null); |
| StanzaReceiverRelay receiverRelay = new StanzaReceiverRelay(); |
| DefaultServerRuntimeContext serverRuntimeContext = new DefaultServerRuntimeContext(serverEnitity, receiverRelay); |
| receiverRelay.setServerRuntimeContext(serverRuntimeContext); |
| serverRuntimeContext.addDictionary(new BaseStreamStanzaDictionary()); |
| sessionStateHolder = new SessionStateHolder(); |
| sessionContext = new TestSessionContext(serverRuntimeContext, sessionStateHolder); |
| } |
| |
| public void testNotAcceptRegularStanzaBeyondAuthenticatedState_IQ() throws Exception { |
| |
| StanzaBuilder stanzaBuilder = new StanzaBuilder("iq", NamespaceURIs.JABBER_CLIENT); |
| stanzaBuilder.addAttribute("id", "1"); |
| stanzaBuilder.addAttribute("type", "get"); |
| Stanza stanza = stanzaBuilder.build(); |
| |
| assertNotAuthorized(stanza); |
| } |
| |
| public void testNotAcceptRegularStanzaBeyondAuthenticatedState_Presence() throws Exception { |
| |
| StanzaBuilder stanzaBuilder = new StanzaBuilder("presence", NamespaceURIs.JABBER_CLIENT); |
| // TODO? add more presence specifics |
| Stanza stanza = stanzaBuilder.build(); |
| |
| assertNotAuthorized(stanza); |
| } |
| |
| public void testNotAcceptRegularStanzaBeyondAuthenticatedState_Message() throws Exception { |
| |
| StanzaBuilder stanzaBuilder = new StanzaBuilder("message", NamespaceURIs.JABBER_CLIENT); |
| // TODO? add more message specifics |
| Stanza stanza = stanzaBuilder.build(); |
| |
| assertNotAuthorized(stanza); |
| } |
| |
| private void assertNotAuthorized(Stanza stanza) throws Exception { |
| SessionState[] allStates = SessionState.values(); |
| for (SessionState state : allStates) { |
| if (state == SessionState.AUTHENTICATED) |
| continue; // skip allowed state |
| |
| setUp(); |
| |
| sessionStateHolder.setState(state); |
| protocolWorker.processStanza(sessionContext.getServerRuntimeContext(), sessionContext, stanza, |
| sessionStateHolder); |
| |
| Stanza response = sessionContext.getNextRecordedResponse(); |
| XMLElementVerifier xmlElementVerifier = response.getVerifier(); |
| |
| // RFC3920/4.3: response must be "not-authorized" |
| assertTrue("error stanza", xmlElementVerifier.nameEquals("error")); |
| assertTrue("error stanza not-authorized", xmlElementVerifier |
| .subElementPresent(StanzaErrorCondition.NOT_AUTHORIZED.value())); |
| assertTrue("writer had been closed", sessionContext.isClosed()); |
| assertEquals("session closed", SessionState.CLOSED, sessionContext.getState()); |
| } |
| } |
| |
| } |