diff options
Diffstat (limited to 'Swiften/Parser/PayloadParsers/UnitTest/JingleParserTest.cpp')
-rw-r--r-- | Swiften/Parser/PayloadParsers/UnitTest/JingleParserTest.cpp | 115 |
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); |