aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMelvin Keskin <melvo@olomono.de>2022-09-27 22:27:20 +0200
committerLinus Jahn <lnj@kaidan.im>2022-10-01 19:50:31 +0200
commit1814f67c9a41eb750a56fdccd28843b53be17b0d (patch)
tree6b224b53f6fae15609752c4d30c1eb3b155b5efe /tests
parent58646ad17d331f980fa1e03e3831fadea847c2b2 (diff)
downloadqxmpp-1814f67c9a41eb750a56fdccd28843b53be17b0d.tar.gz
Implement XEP-0294: Jingle RTP Header Extensions Negotiation stanzas
Diffstat (limited to 'tests')
-rw-r--r--tests/qxmppjingleiq/tst_qxmppjingleiq.cpp171
1 files changed, 171 insertions, 0 deletions
diff --git a/tests/qxmppjingleiq/tst_qxmppjingleiq.cpp b/tests/qxmppjingleiq/tst_qxmppjingleiq.cpp
index be9e3d4c..aaa6822d 100644
--- a/tests/qxmppjingleiq/tst_qxmppjingleiq.cpp
+++ b/tests/qxmppjingleiq/tst_qxmppjingleiq.cpp
@@ -24,6 +24,11 @@ private slots:
void testIsRtpFeedbackInterval_data();
void testIsRtpFeedbackInterval();
void testRtpFeedbackInterval();
+ void testIsRtpHeaderExtensionProperty_data();
+ void testIsRtpHeaderExtensionProperty();
+ void testRtpHeaderExtensionProperty();
+ void testRtpHeaderExtensionPropertyWithSenders();
+ void testRtpHeaderExtensionPropertyWithParameters();
void testCandidate();
void testContent();
void testContentFingerprint();
@@ -32,6 +37,7 @@ private slots:
void testContentSdpFingerprint();
void testContentSdpParameters();
void testContentRtpFeedbackNegotiation();
+ void testContentRtpHeaderExtensionsNegotiation();
void testSession();
void testTerminate();
void testRtpSessionState_data();
@@ -229,6 +235,115 @@ void tst_QXmppJingleIq::testRtpFeedbackInterval()
serializePacket(interval2, xml);
}
+void tst_QXmppJingleIq::testIsRtpHeaderExtensionProperty_data()
+{
+ QTest::addColumn<QByteArray>("xml");
+ QTest::addColumn<bool>("isValid");
+
+ QTest::newRow("valid")
+ << QByteArrayLiteral("<rtp-hdrext xmlns=\"urn:xmpp:jingle:apps:rtp:rtp-hdrext:0\"/>")
+ << true;
+ QTest::newRow("invalidTag")
+ << QByteArrayLiteral("<invalid xmlns=\"urn:xmpp:jingle:apps:rtp:rtp-hdrext:0\"/>")
+ << false;
+ QTest::newRow("invalidNamespace")
+ << QByteArrayLiteral("<rtp-hdrext xmlns=\"invalid\"/>")
+ << false;
+}
+
+void tst_QXmppJingleIq::testIsRtpHeaderExtensionProperty()
+{
+ QFETCH(QByteArray, xml);
+ QFETCH(bool, isValid);
+
+ QCOMPARE(QXmppJingleRtpHeaderExtensionProperty::isJingleRtpHeaderExtensionProperty(xmlToDom(xml)), isValid);
+}
+
+void tst_QXmppJingleIq::testRtpHeaderExtensionProperty()
+{
+ const QByteArray xml("<rtp-hdrext xmlns=\"urn:xmpp:jingle:apps:rtp:rtp-hdrext:0\" id=\"1\" uri=\"urn:ietf:params:rtp-hdrext:toffset\"/>");
+
+ QXmppJingleRtpHeaderExtensionProperty property1;
+ QCOMPARE(property1.id(), 0);
+ QVERIFY(property1.uri().isEmpty());
+ QCOMPARE(property1.senders(), QXmppJingleRtpHeaderExtensionProperty::Both);
+
+ parsePacket(property1, xml);
+ QCOMPARE(property1.id(), 1);
+ QCOMPARE(property1.uri(), QStringLiteral("urn:ietf:params:rtp-hdrext:toffset"));
+ QCOMPARE(property1.senders(), QXmppJingleRtpHeaderExtensionProperty::Both);
+
+ serializePacket(property1, xml);
+
+ QXmppJingleRtpHeaderExtensionProperty property2;
+ property2.setId(1);
+ property2.setUri(QStringLiteral("urn:ietf:params:rtp-hdrext:toffset"));
+ property2.setSenders(QXmppJingleRtpHeaderExtensionProperty::Both);
+
+ QCOMPARE(property1.id(), 1);
+ QCOMPARE(property1.uri(), QStringLiteral("urn:ietf:params:rtp-hdrext:toffset"));
+ QCOMPARE(property1.senders(), QXmppJingleRtpHeaderExtensionProperty::Both);
+
+ serializePacket(property2, xml);
+}
+
+void tst_QXmppJingleIq::testRtpHeaderExtensionPropertyWithSenders()
+{
+ const QByteArray xml("<rtp-hdrext xmlns=\"urn:xmpp:jingle:apps:rtp:rtp-hdrext:0\" id=\"1\" uri=\"urn:ietf:params:rtp-hdrext:toffset\" senders=\"initiator\"/>");
+
+ QXmppJingleRtpHeaderExtensionProperty property1;
+
+ parsePacket(property1, xml);
+ QCOMPARE(property1.senders(), QXmppJingleRtpHeaderExtensionProperty::Initiator);
+
+ serializePacket(property1, xml);
+
+ QXmppJingleRtpHeaderExtensionProperty property2;
+ property2.setId(1);
+ property2.setUri(QStringLiteral("urn:ietf:params:rtp-hdrext:toffset"));
+ property2.setSenders(QXmppJingleRtpHeaderExtensionProperty::Initiator);
+
+ QCOMPARE(property1.senders(), QXmppJingleRtpHeaderExtensionProperty::Initiator);
+
+ serializePacket(property2, xml);
+}
+
+void tst_QXmppJingleIq::testRtpHeaderExtensionPropertyWithParameters()
+{
+ const QByteArray xml(
+ "<rtp-hdrext xmlns=\"urn:xmpp:jingle:apps:rtp:rtp-hdrext:0\" id=\"1\" uri=\"urn:ietf:params:rtp-hdrext:toffset\">"
+ "<parameter name=\"test-name-1\"/>"
+ "<parameter name=\"test-name-2\"/>"
+ "</rtp-hdrext>");
+
+ QXmppJingleRtpHeaderExtensionProperty property1;
+
+ parsePacket(property1, xml);
+ QCOMPARE(property1.parameters().size(), 2);
+ QCOMPARE(property1.parameters().at(0).name(), QStringLiteral("test-name-1"));
+ QCOMPARE(property1.parameters().at(1).name(), QStringLiteral("test-name-2"));
+
+ serializePacket(property1, xml);
+
+ QXmppJingleRtpHeaderExtensionProperty property2;
+ property2.setId(1);
+ property2.setUri(QStringLiteral("urn:ietf:params:rtp-hdrext:toffset"));
+
+ QXmppSdpParameter parameter1;
+ parameter1.setName(QStringLiteral("test-name-1"));
+
+ QXmppSdpParameter parameter2;
+ parameter2.setName(QStringLiteral("test-name-2"));
+
+ property2.setParameters({ parameter1, parameter2 });
+
+ QCOMPARE(property2.parameters().size(), 2);
+ QCOMPARE(property2.parameters().at(0).name(), QStringLiteral("test-name-1"));
+ QCOMPARE(property2.parameters().at(1).name(), QStringLiteral("test-name-2"));
+
+ serializePacket(property2, xml);
+}
+
void tst_QXmppJingleIq::testCandidate()
{
const QByteArray xml(
@@ -641,6 +756,62 @@ void tst_QXmppJingleIq::testContentRtpFeedbackNegotiation()
serializePacket(content2, xml);
}
+void tst_QXmppJingleIq::testContentRtpHeaderExtensionsNegotiation()
+{
+ const QByteArray xml(
+ "<content creator=\"initiator\" name=\"voice\">"
+ "<description xmlns=\"urn:xmpp:jingle:apps:rtp:1\">"
+ "<rtp-hdrext xmlns=\"urn:xmpp:jingle:apps:rtp:rtp-hdrext:0\" id=\"1\" uri=\"urn:ietf:params:rtp-hdrext:toffset\"/>"
+ "<rtp-hdrext xmlns=\"urn:xmpp:jingle:apps:rtp:rtp-hdrext:0\" id=\"2\" uri=\"urn:ietf:params:rtp-hdrext:ntp-64\"/>"
+ "<extmap-allow-mixed xmlns=\"urn:xmpp:jingle:apps:rtp:rtp-hdrext:0\"/>"
+ "<payload-type id=\"96\" name=\"speex\"/>"
+ "</description>"
+ "</content>");
+
+ QXmppJingleIq::Content content1;
+ QVERIFY(content1.rtpHeaderExtensionProperties().isEmpty());
+ QVERIFY(!content1.isRtpHeaderExtensionMixingAllowed());
+ parsePacket(content1, xml);
+
+ const auto rtpHeaderExtensionProperties1 = content1.rtpHeaderExtensionProperties();
+ QCOMPARE(rtpHeaderExtensionProperties1.size(), 2);
+ QCOMPARE(rtpHeaderExtensionProperties1[0].id(), 1);
+ QCOMPARE(rtpHeaderExtensionProperties1[1].id(), 2);
+
+ QVERIFY(content1.isRtpHeaderExtensionMixingAllowed());
+
+ serializePacket(content1, xml);
+
+ QXmppJingleRtpHeaderExtensionProperty rtpHeaderExtensionProperty1;
+ rtpHeaderExtensionProperty1.setId(1);
+ rtpHeaderExtensionProperty1.setUri(QStringLiteral("urn:ietf:params:rtp-hdrext:toffset"));
+
+ QXmppJingleRtpHeaderExtensionProperty rtpHeaderExtensionProperty2;
+ rtpHeaderExtensionProperty2.setId(2);
+ rtpHeaderExtensionProperty2.setUri(QStringLiteral("urn:ietf:params:rtp-hdrext:ntp-64"));
+
+
+ QXmppJinglePayloadType payloadType;
+ payloadType.setId(96);
+ payloadType.setName(QStringLiteral("speex"));
+
+ QXmppJingleIq::Content content2;
+ content2.setCreator(QStringLiteral("initiator"));
+ content2.setName(QStringLiteral("voice"));
+ content2.addPayloadType(payloadType);
+ content2.setRtpHeaderExtensionProperties({ rtpHeaderExtensionProperty1, rtpHeaderExtensionProperty2 });
+ content2.setRtpHeaderExtensionMixingAllowed(true);
+
+ const auto rtpHeaderExtensionProperties2 = content2.rtpHeaderExtensionProperties();
+ QCOMPARE(rtpHeaderExtensionProperties2.size(), 2);
+ QCOMPARE(rtpHeaderExtensionProperties2[0].id(), 1);
+ QCOMPARE(rtpHeaderExtensionProperties2[1].id(), 2);
+
+ QVERIFY(content2.isRtpHeaderExtensionMixingAllowed());
+
+ serializePacket(content2, xml);
+}
+
void tst_QXmppJingleIq::testSession()
{
const QByteArray xml(