blob: b4137180fb7ead8f5116a3ed3bb888b1d6d3528e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.vysper.xml.fragment.XMLElementVerifier;
import org.apache.vysper.xmpp.server.SessionState;
import org.apache.vysper.xmpp.server.XMPPVersion;
import org.apache.vysper.xmpp.server.response.ServerResponses;
import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.stanza.StanzaBuilder;
/**
* test session initiation bevahior
*/
public class ProtocolInitiatedTestCase extends AbstractProtocolStateTestCase {
public void testProcessClientCanonicalStreamOpeningResponse() {
sessionContext.setXMLLang("fr");
openClientSession();
Stanza recordedResponse = sessionContext.getNextRecordedResponse();
XMLElementVerifier responseVerifier = recordedResponse.getVerifier();
assertTrue(responseVerifier.nameEquals("stream"));
assertTrue(responseVerifier.attributeEquals(NamespaceURIs.XML, "lang", "fr"));
assertTrue("initiated => started", sessionContext.getState() == SessionState.STARTED);
}
public void testProcessClientStreamOpeningResponse_XMLLang_fr() {
sessionContext.setSessionState(getDefaultState());
// french in, french returned
checkLanguage("fr");
}
@Override
protected SessionState getDefaultState() {
return SessionState.INITIATED;
}
public void testProcessClientStreamOpeningResponse_XMLLang_null() {
sessionContext.setSessionState(getDefaultState());
// no lang in, no lang returned
checkLanguage(null);
}
public void testProcessClientStreamOpeningResponse_XMLLang_enUS() {
sessionContext.setSessionState(getDefaultState());
// US-english in, US-english returned
checkLanguage("en_US");
}
protected void openClientSession() {
sessionContext.setSessionState(getDefaultState());
Stanza stanza = new ServerResponses().getStreamOpener(true, testFrom, sessionContext.getXMLLang(),
XMPPVersion.VERSION_1_0, null).build();
protocolWorker.processStanza(sessionContext.getServerRuntimeContext(), sessionContext, stanza,
sessionStateHolder);
}
public void testProcessClientStreamOpeningResponse_Version_1_0() {
sessionContext.setSessionState(getDefaultState());
XMPPVersion versionSent = XMPPVersion.VERSION_1_0;
Stanza response = getVersionResponse(versionSent);
XMLElementVerifier responseVerifier = response.getVerifier();
assertTrue(responseVerifier.attributeEquals("version", XMPPVersion.VERSION_1_0.toString()));
assertTrue(responseVerifier.attributePresent("id"));
assertFalse("no error", responseVerifier.subElementPresent("error"));
}
public void testProcessClientStreamOpeningResponse_NoVersion() {
sessionContext.setSessionState(getDefaultState());
XMPPVersion versionSent = null;
Stanza response = getVersionResponse(versionSent);
XMLElementVerifier responseVerifier = response.getVerifier();
assertFalse(responseVerifier.attributePresent("version"));
assertFalse("no error", responseVerifier.subElementPresent("error"));
}
public void testProcessClientStreamOpeningResponse_Version_1_1() {
sessionContext.setSessionState(getDefaultState());
XMPPVersion versionSent = new XMPPVersion(1, 1);
Stanza response = getVersionResponse(versionSent);
XMLElementVerifier responseVerifier = response.getVerifier();
assertTrue(responseVerifier.attributeEquals("version", XMPPVersion.VERSION_1_0.toString()));
assertFalse("no error", responseVerifier.subElementPresent("error"));
}
protected static class IllegalXMPPVersion extends XMPPVersion {
protected String versionString;
public IllegalXMPPVersion(String version) {
versionString = version;
}
@Override
public String toString() {
return versionString;
}
}
public void testProcessClientStreamOpeningResponse_IllegalVersion() {
sessionContext.setSessionState(getDefaultState());
XMPPVersion versionSent = new IllegalXMPPVersion("IllV1.0");
Stanza response = getVersionResponse(versionSent);
XMLElementVerifier responseVerifier = response.getVerifier();
assertTrue(responseVerifier.nameEquals("error"));
assertTrue("error", responseVerifier.subElementPresent(StreamErrorCondition.UNSUPPORTED_VERSION.value()));
}
public void testProcessClientStreamOpeningResponse_Version_2_0() {
sessionContext.setSessionState(getDefaultState());
XMPPVersion versionSent = new XMPPVersion(2, 0);
Stanza response = getVersionResponse(versionSent);
XMLElementVerifier responseVerifier = response.getVerifier();
assertTrue(responseVerifier.nameEquals("error"));
assertTrue("error", responseVerifier.subElementPresent(StreamErrorCondition.UNSUPPORTED_VERSION.value()));
}
protected Stanza getVersionResponse(XMPPVersion versionSent) {
Stanza stanza = new ServerResponses().getStreamOpener(true, testFrom, null, versionSent, null).build();
protocolWorker.processStanza(sessionContext.getServerRuntimeContext(), sessionContext, stanza,
sessionStateHolder);
return sessionContext.getNextRecordedResponse();
}
public void testProcessClientStreamOpeningResponse_MissingMainNamespace() {
// we do not supply "http://etherx.jabber.org/streams"
StanzaBuilder stanzaBuilder = new StanzaBuilder("stream").declareNamespace("", NamespaceURIs.JABBER_CLIENT)
.addAttribute(NamespaceURIs.XML, "lang", "en_UK").addAttribute("version",
XMPPVersion.VERSION_1_0.toString());
protocolWorker.processStanza(sessionContext.getServerRuntimeContext(), sessionContext, stanzaBuilder.build(),
sessionStateHolder);
Stanza response = sessionContext.getNextRecordedResponse();
XMLElementVerifier responseVerifier = response.getVerifier();
assertTrue(responseVerifier.nameEquals("error"));
assertTrue("error", responseVerifier.subElementPresent(StreamErrorCondition.INVALID_NAMESPACE.value()));
}
public void testDontAcceptIQStanzaWhileNotAuthenticated() {
skeleton_testDontAcceptIQStanzaWhileNotAuthenticated();
}
public void testDontAcceptArbitraryStanzaWhileNotAuthenticated() {
skeleton_testDontAcceptArbitraryStanzaWhileNotAuthenticated();
}
}