263 lines
12 KiB
Java
263 lines
12 KiB
Java
/**
|
|
*
|
|
* Copyright 2017 Paul Schaub
|
|
*
|
|
* 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.smackx.jingle.component;
|
|
|
|
import static junit.framework.TestCase.assertEquals;
|
|
import static junit.framework.TestCase.assertFalse;
|
|
import static junit.framework.TestCase.assertNotNull;
|
|
import static junit.framework.TestCase.assertNull;
|
|
import static junit.framework.TestCase.assertTrue;
|
|
|
|
import org.jivesoftware.smack.DummyConnection;
|
|
import org.jivesoftware.smack.test.util.SmackTestSuite;
|
|
import org.jivesoftware.smackx.bytestreams.BytestreamSession;
|
|
import org.jivesoftware.smackx.jingle.JingleManager;
|
|
import org.jivesoftware.smackx.jingle.element.JingleAction;
|
|
import org.jivesoftware.smackx.jingle.element.JingleContentDescriptionElement;
|
|
import org.jivesoftware.smackx.jingle.element.JingleContentDescriptionInfoElement;
|
|
import org.jivesoftware.smackx.jingle.element.JingleContentElement;
|
|
import org.jivesoftware.smackx.jingle.element.JingleElement;
|
|
import org.jivesoftware.smackx.jingle.element.JingleReasonElement;
|
|
import org.jivesoftware.smackx.jingle.transport.jingle_ibb.JingleIBBTransport;
|
|
import org.jivesoftware.smackx.jingle.transport.jingle_ibb.element.JingleIBBTransportElement;
|
|
import org.jivesoftware.smackx.jingle.util.Role;
|
|
|
|
import org.junit.Test;
|
|
import org.jxmpp.jid.FullJid;
|
|
import org.jxmpp.jid.impl.JidCreate;
|
|
import org.jxmpp.stringprep.XmppStringprepException;
|
|
|
|
public class JingleSessionTest extends SmackTestSuite {
|
|
|
|
@Test
|
|
public void jingleSessionTest() throws XmppStringprepException {
|
|
DummyConnection dummyConnection = new DummyConnection();
|
|
FullJid alice = JidCreate.fullFrom("alice@wonderland.lit/test123");
|
|
FullJid madHatter = JidCreate.fullFrom("mad@hat.net/cat");
|
|
|
|
JingleManager jingleManager = JingleManager.getInstanceFor(dummyConnection);
|
|
|
|
JingleSession session = new JingleSession(jingleManager, alice, madHatter, Role.initiator, "WeReAlLmAdHeRe");
|
|
|
|
assertEquals(alice, session.getInitiator());
|
|
assertEquals(madHatter, session.getResponder());
|
|
assertEquals(alice, session.getOurJid());
|
|
assertEquals(madHatter, session.getPeer());
|
|
|
|
assertEquals(0, session.getContents().size());
|
|
assertEquals("WeReAlLmAdHeRe", session.getSessionId());
|
|
assertEquals(jingleManager, session.getJingleManager());
|
|
}
|
|
|
|
@Test(expected = IllegalStateException.class)
|
|
public void getSoleContentThrowingTest() {
|
|
JingleSession session = new JingleSession(JingleManager.getInstanceFor(new DummyConnection()), null, null, Role.initiator, null);
|
|
assertTrue(session.isInitiator());
|
|
assertFalse(session.isResponder());
|
|
JingleContent c1 = new JingleContent(JingleContentElement.Creator.initiator, JingleContentElement.Senders.initiator);
|
|
JingleContent c2 = new JingleContent(JingleContentElement.Creator.initiator, JingleContentElement.Senders.initiator);
|
|
session.addContent(c1);
|
|
assertEquals(c1, session.getContent(c1.getName()));
|
|
session.addContent(c2);
|
|
assertEquals(c2, session.getContent(c2.getName()));
|
|
|
|
session.getSoleContentOrThrow();
|
|
}
|
|
|
|
@Test
|
|
public void getSoleContentTest() {
|
|
JingleSession session = new JingleSession(JingleManager.getInstanceFor(new DummyConnection()), null, null, Role.responder, null);
|
|
assertTrue(session.isResponder());
|
|
assertFalse(session.isInitiator());
|
|
assertNull(session.getSoleContentOrThrow());
|
|
JingleContent c1 = new JingleContent(JingleContentElement.Creator.initiator, JingleContentElement.Senders.initiator);
|
|
assertNull(c1.getParent());
|
|
session.addContent(c1);
|
|
assertEquals(session, c1.getParent());
|
|
|
|
assertEquals(c1, session.getSoleContentOrThrow());
|
|
}
|
|
|
|
@Test
|
|
public void createSessionAcceptTest() throws XmppStringprepException {
|
|
FullJid initiator = JidCreate.fullFrom("initiator@server.tld/res");
|
|
FullJid responder = JidCreate.fullFrom("responder@server.tld/res");
|
|
JingleManager manager = JingleManager.getInstanceFor(new DummyConnection());
|
|
JingleSession session = new JingleSession(manager, initiator, responder, Role.initiator, "sessionId");
|
|
|
|
JingleContent content = new JingleContent(JingleContentElement.Creator.initiator, JingleContentElement.Senders.initiator);
|
|
|
|
JingleIBBTransport transport = new JingleIBBTransport("streamId", (short) 1024);
|
|
content.setTransport(transport);
|
|
|
|
JingleDescription<?> description = new JingleDescription<JingleContentDescriptionElement>() {
|
|
public static final String NAMESPACE = "urn:xmpp:jingle:apps:stub:0";
|
|
|
|
@Override
|
|
public JingleContentDescriptionElement getElement() {
|
|
return new JingleContentDescriptionElement(null) {
|
|
@Override
|
|
public String getNamespace() {
|
|
return NAMESPACE;
|
|
}
|
|
};
|
|
}
|
|
|
|
@Override
|
|
public JingleElement handleDescriptionInfo(JingleContentDescriptionInfoElement info) {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public void onBytestreamReady(BytestreamSession bytestreamSession) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public String getNamespace() {
|
|
return NAMESPACE;
|
|
}
|
|
|
|
@Override
|
|
public void handleContentTerminate(JingleReasonElement.Reason reason) {
|
|
|
|
}
|
|
};
|
|
content.setDescription(description);
|
|
|
|
session.addContent(content);
|
|
|
|
JingleElement sessionElement = session.createSessionInitiate();
|
|
assertNotNull(sessionElement);
|
|
assertEquals("sessionId", sessionElement.getSid());
|
|
assertEquals(initiator, sessionElement.getInitiator());
|
|
assertNull(sessionElement.getResponder());
|
|
assertEquals(JingleAction.session_initiate, sessionElement.getAction());
|
|
JingleContentElement contentElement = sessionElement.getSoleContentOrThrow();
|
|
assertNotNull(contentElement);
|
|
assertEquals(content.getName(), contentElement.getName());
|
|
assertEquals(content.getCreator(), contentElement.getCreator());
|
|
assertEquals(content.getSenders(), contentElement.getSenders());
|
|
assertEquals(0, content.getTransportBlacklist().size());
|
|
assertEquals(content.getElement().toXML(null).toString(), contentElement.toXML(null).toString());
|
|
|
|
JingleIBBTransportElement transportElement = (JingleIBBTransportElement) contentElement.getTransport();
|
|
assertNotNull(transportElement);
|
|
assertEquals(transport.getBlockSize(), transportElement.getBlockSize());
|
|
assertEquals(transport.getStreamId(), transportElement.getStreamId());
|
|
assertEquals(transport.getNamespace(), transportElement.getNamespace());
|
|
assertEquals(transport.getElement().toXML(null).toString(), transportElement.toXML(null).toString());
|
|
|
|
JingleContentDescriptionElement descriptionElement = contentElement.getDescription();
|
|
assertNotNull(descriptionElement);
|
|
assertEquals(description.getNamespace(), descriptionElement.getNamespace());
|
|
assertEquals(description.getElement().toXML(null).toString(), descriptionElement.toXML(null).toString());
|
|
|
|
assertNull(contentElement.getSecurity());
|
|
assertTrue(content.isSending());
|
|
assertFalse(content.isReceiving());
|
|
}
|
|
|
|
@Test(expected = IllegalArgumentException.class)
|
|
public void duplicateContentAddTest() throws XmppStringprepException {
|
|
FullJid initiator = JidCreate.fullFrom("initiator@server.tld/res");
|
|
FullJid responder = JidCreate.fullFrom("responder@server.tld/res");
|
|
JingleManager manager = JingleManager.getInstanceFor(new DummyConnection());
|
|
JingleSession session = new JingleSession(manager, initiator, responder, Role.initiator, "sessionId");
|
|
|
|
JingleContent content1 = new JingleContent(JingleContentElement.Creator.initiator, JingleContentElement.Senders.initiator);
|
|
JingleContent content2 = new JingleContent(null, null, null, content1.getName(), null, JingleContentElement.Creator.initiator, JingleContentElement.Senders.initiator);
|
|
|
|
session.addContent(content1);
|
|
session.addContent(content2);
|
|
}
|
|
|
|
@Test(expected = IllegalStateException.class)
|
|
public void sessionInitiateThrowsAsResponderTest() {
|
|
JingleSession session = new JingleSession(JingleManager.getInstanceFor(new DummyConnection()),
|
|
null, null, Role.responder, "session");
|
|
session.createSessionInitiate();
|
|
}
|
|
|
|
@Test
|
|
public void sessionAcceptTest() throws XmppStringprepException {
|
|
FullJid initiator = JidCreate.fullFrom("initiator@server.tld/res");
|
|
FullJid responder = JidCreate.fullFrom("responder@server.tld/res");
|
|
JingleManager manager = JingleManager.getInstanceFor(new DummyConnection());
|
|
JingleSession session = new JingleSession(manager, initiator, responder, Role.responder, "sessionId");
|
|
|
|
JingleContent content = new JingleContent(JingleContentElement.Creator.initiator, JingleContentElement.Senders.initiator);
|
|
|
|
JingleIBBTransport transport = new JingleIBBTransport("streamId", (short) 1024);
|
|
content.setTransport(transport);
|
|
|
|
JingleDescription<?> description = new JingleDescription<JingleContentDescriptionElement>() {
|
|
public static final String NAMESPACE = "urn:xmpp:jingle:apps:stub:0";
|
|
|
|
@Override
|
|
public JingleContentDescriptionElement getElement() {
|
|
return new JingleContentDescriptionElement(null) {
|
|
@Override
|
|
public String getNamespace() {
|
|
return NAMESPACE;
|
|
}
|
|
};
|
|
}
|
|
|
|
@Override
|
|
public JingleElement handleDescriptionInfo(JingleContentDescriptionInfoElement info) {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public void onBytestreamReady(BytestreamSession bytestreamSession) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public String getNamespace() {
|
|
return NAMESPACE;
|
|
}
|
|
|
|
@Override
|
|
public void handleContentTerminate(JingleReasonElement.Reason reason) {
|
|
|
|
}
|
|
};
|
|
content.setDescription(description);
|
|
|
|
session.addContent(content);
|
|
|
|
JingleElement accept = session.createSessionAccept();
|
|
assertNotNull(accept);
|
|
assertEquals(JingleAction.session_accept, accept.getAction());
|
|
assertNull(accept.getInitiator());
|
|
assertEquals(session.getResponder(), accept.getResponder());
|
|
assertEquals(1, accept.getContents().size());
|
|
assertEquals(content.getName(), accept.getSoleContentOrThrow().getName());
|
|
assertFalse(content.isSending());
|
|
assertTrue(content.isReceiving());
|
|
}
|
|
|
|
@Test(expected = IllegalStateException.class)
|
|
public void sessionAcceptThrowsAsInitiatorTest() {
|
|
JingleSession session = new JingleSession(JingleManager.getInstanceFor(new DummyConnection()),
|
|
null, null, Role.initiator, "session");
|
|
session.createSessionAccept();
|
|
}
|
|
}
|