summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/Parser/PayloadParsers/UnitTest/JingleParserTest.cpp')
-rw-r--r--Swiften/Parser/PayloadParsers/UnitTest/JingleParserTest.cpp115
1 files changed, 115 insertions, 0 deletions
diff --git a/Swiften/Parser/PayloadParsers/UnitTest/JingleParserTest.cpp b/Swiften/Parser/PayloadParsers/UnitTest/JingleParserTest.cpp
index 8719a5d..18f38b2 100644
--- a/Swiften/Parser/PayloadParsers/UnitTest/JingleParserTest.cpp
+++ b/Swiften/Parser/PayloadParsers/UnitTest/JingleParserTest.cpp
@@ -15,6 +15,8 @@
#include <Swiften/Elements/StreamInitiationFileInfo.h>
#include <Swiften/Elements/JingleFileTransferReceived.h>
#include <Swiften/Elements/JingleFileTransferHash.h>
+//#include <Swiften/Elements/RTPPayloadType.h>
+#include <Swiften/Elements/JingleRTPDescription.h>
#include <Swiften/Base/DateTime.h>
#include <Swiften/Base/Log.h>
@@ -41,6 +43,10 @@ class JingleParserTest : public CppUnit::TestFixture {
CPPUNIT_TEST(testParse_Xep0260_Example1);
CPPUNIT_TEST(testParse_Xep0260_Example3);
+
+ CPPUNIT_TEST(testParse_Xep0167_Example1);
+ CPPUNIT_TEST(testParse_Xep0167_Example48);
+
CPPUNIT_TEST_SUITE_END();
public:
@@ -704,6 +710,115 @@ class JingleParserTest : public CppUnit::TestFixture {
CPPUNIT_ASSERT_EQUAL(8257606, candidate.priority);
CPPUNIT_ASSERT_EQUAL(JingleS5BTransportPayload::Candidate::DirectType, candidate.type);
}
+
+ // http://xmpp.org/extensions/xep-0167.html#example-1
+ void testParse_Xep0167_Example1() {
+ PayloadsParserTester parser;
+ CPPUNIT_ASSERT(parser.parse(
+ "<jingle action=\"session-initiate\""
+ " initiator=\"romeo@montague.lit/orchard\""
+ " sid=\"a73sjjvkla37jfea\""
+ " xmlns=\"urn:xmpp:jingle:1\">"
+ "<content creator=\"initiator\" name=\"voice\">"
+ "<description media=\"audio\" xmlns=\"urn:xmpp:jingle:apps:rtp:1\">"
+ "<payload-type clockrate=\"16000\" id=\"96\" name=\"speex\"/>"
+ "<payload-type id=\"18\" name=\"G729\"/>"
+ "<payload-type channels=\"2\" clockrate=\"16000\" id=\"103\" name=\"L16\"/>"
+ "</description>"
+ //"<transport [...] >"
+ "</content>"
+ "</jingle>"
+ ));
+
+ JinglePayload::ref jingle = parser.getPayload<JinglePayload>();
+ CPPUNIT_ASSERT(jingle);
+ CPPUNIT_ASSERT_EQUAL(JinglePayload::SessionInitiate, jingle->getAction());
+ CPPUNIT_ASSERT_EQUAL(JID("romeo@montague.lit/orchard"), jingle->getInitiator());
+ CPPUNIT_ASSERT_EQUAL(std::string("a73sjjvkla37jfea"), jingle->getSessionID());
+
+ JingleContentPayload::ref content = jingle->getPayload<JingleContentPayload>();
+ CPPUNIT_ASSERT(content);
+ CPPUNIT_ASSERT_EQUAL(std::string("voice"), content->getName());
+
+ JingleRTPDescription::ref desc = content->getDescription<JingleRTPDescription>();
+ CPPUNIT_ASSERT(desc);
+ CPPUNIT_ASSERT_EQUAL(JingleRTPDescription::Audio, desc->getMedia());
+
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), desc->getPayloadTypes().size());
+
+ const RTPPayloadType& payloadType1 = desc->getPayloadTypes()[0];
+ CPPUNIT_ASSERT_EQUAL(static_cast<boost::uint32_t>(16000), payloadType1.getClockrate());
+ CPPUNIT_ASSERT_EQUAL(static_cast<boost::uint8_t>(96), payloadType1.getID());
+ CPPUNIT_ASSERT_EQUAL(std::string("speex"), payloadType1.getName());
+
+ const RTPPayloadType& payloadType2 = desc->getPayloadTypes()[1];
+ CPPUNIT_ASSERT_EQUAL(static_cast<boost::uint8_t>(18), payloadType2.getID());
+ CPPUNIT_ASSERT_EQUAL(std::string("G729"), payloadType2.getName());
+
+ const RTPPayloadType& payloadType3 = desc->getPayloadTypes()[2];
+ CPPUNIT_ASSERT_EQUAL(static_cast<boost::uint32_t>(2), payloadType3.getChannels());
+ CPPUNIT_ASSERT_EQUAL(static_cast<boost::uint32_t>(16000), payloadType3.getClockrate());
+ CPPUNIT_ASSERT_EQUAL(static_cast<boost::uint8_t>(103), payloadType3.getID());
+ CPPUNIT_ASSERT_EQUAL(std::string("L16"), payloadType3.getName());
+ }
+
+ // http://xmpp.org/extensions/xep-0167.html#example-48
+ void testParse_Xep0167_Example48() {
+ PayloadsParserTester parser;
+ CPPUNIT_ASSERT(parser.parse(
+ "<jingle action=\"content-accept\""
+ " initiator=\"romeo@montague.lit/orchard\""
+ " sid=\"a73sjjvkla37jfea\""
+ " xmlns=\"urn:xmpp:jingle:1\">"
+ "<content creator=\"initiator\" name=\"webcam\">"
+ "<description media=\"video\" xmlns=\"urn:xmpp:jingle:apps:rtp:1\">"
+ "<payload-type clockrate=\"90000\" id=\"98\" name=\"theora\">"
+ "<parameter name=\"configuration\" value=\"somebase16string\"/>"
+ "<parameter name=\"delivery-method\" value=\"inline\"/>"
+ "<parameter name=\"height\" value=\"600\"/>"
+ "<parameter name=\"sampling\" value=\"YCbCr-4:2:2\"/>"
+ "<parameter name=\"width\" value=\"800\"/>"
+ "</payload-type>"
+ "<bandwidth type=\"AS\">128</bandwidth>"
+ "</description>"
+ //"<transport xmlns=\"urn:xmpp:jingle:transports:ice-udp:0\"/>"
+ "</content>"
+ "</jingle>"
+ ));
+
+ JinglePayload::ref jingle = parser.getPayload<JinglePayload>();
+ CPPUNIT_ASSERT(jingle);
+ CPPUNIT_ASSERT_EQUAL(JinglePayload::ContentAccept, jingle->getAction());
+ CPPUNIT_ASSERT_EQUAL(JID("romeo@montague.lit/orchard"), jingle->getInitiator());
+ CPPUNIT_ASSERT_EQUAL(std::string("a73sjjvkla37jfea"), jingle->getSessionID());
+
+ JingleContentPayload::ref content = jingle->getPayload<JingleContentPayload>();
+ CPPUNIT_ASSERT(content);
+ CPPUNIT_ASSERT_EQUAL(std::string("webcam"), content->getName());
+
+ JingleRTPDescription::ref desc = content->getDescription<JingleRTPDescription>();
+ CPPUNIT_ASSERT(desc);
+ CPPUNIT_ASSERT_EQUAL(JingleRTPDescription::Video, desc->getMedia());
+
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), desc->getPayloadTypes().size());
+
+ const RTPPayloadType& payloadType = desc->getPayloadTypes()[0];
+ CPPUNIT_ASSERT_EQUAL(static_cast<boost::uint32_t>(90000), payloadType.getClockrate());
+ CPPUNIT_ASSERT_EQUAL(static_cast<boost::uint8_t>(98), payloadType.getID());
+ CPPUNIT_ASSERT_EQUAL(std::string("theora"), payloadType.getName());
+
+ RTPPayloadType::ParameterMap params = payloadType.getParameters(); // Explicit copy for easy testing
+ CPPUNIT_ASSERT_EQUAL(params["configuration"], std::string("somebase16string"));
+ CPPUNIT_ASSERT_EQUAL(params["delivery-method"], std::string("inline"));
+ CPPUNIT_ASSERT_EQUAL(params["height"], std::string("600"));
+ CPPUNIT_ASSERT_EQUAL(params["sampling"], std::string("YCbCr-4:2:2"));
+ CPPUNIT_ASSERT_EQUAL(params["width"], std::string("800"));
+
+ std::string type, value;
+ desc->getBandwidth(type, value);
+ CPPUNIT_ASSERT_EQUAL(std::string("AS"), type);
+ CPPUNIT_ASSERT_EQUAL(std::string("128"), value);
+ }
};
CPPUNIT_TEST_SUITE_REGISTRATION(JingleParserTest);