From 58dfd25a6477fda887e8040e174190eb7929381d Mon Sep 17 00:00:00 2001 From: Melvin Keskin Date: Sat, 1 Oct 2022 18:07:16 +0200 Subject: Implement XEP-0167: Jingle RTP Sessions Informational Messages (#460) --- tests/qxmppjingleiq/tst_qxmppjingleiq.cpp | 162 +++++++++++++++++++++++++----- 1 file changed, 139 insertions(+), 23 deletions(-) (limited to 'tests') diff --git a/tests/qxmppjingleiq/tst_qxmppjingleiq.cpp b/tests/qxmppjingleiq/tst_qxmppjingleiq.cpp index b245a21d..be9e3d4c 100644 --- a/tests/qxmppjingleiq/tst_qxmppjingleiq.cpp +++ b/tests/qxmppjingleiq/tst_qxmppjingleiq.cpp @@ -34,10 +34,11 @@ private slots: void testContentRtpFeedbackNegotiation(); void testSession(); void testTerminate(); + void testRtpSessionState_data(); + void testRtpSessionState(); void testAudioPayloadType(); void testVideoPayloadType(); void testPayloadTypeRtpFeedbackNegotiation(); - void testRinging(); }; void tst_QXmppJingleIq::testIsSdpParameter_data() @@ -701,6 +702,143 @@ void tst_QXmppJingleIq::testTerminate() serializePacket(session, xml); } +void tst_QXmppJingleIq::testRtpSessionState_data() +{ + QTest::addColumn("xml"); + QTest::addColumn("state"); + + QTest::newRow("active") + << QByteArrayLiteral("" + "" + "" + "" + "") + << QStringLiteral("active"); + QTest::newRow("hold") + << QByteArrayLiteral("" + "" + "" + "" + "") + << QStringLiteral("hold"); + QTest::newRow("unhold") + << QByteArrayLiteral("" + "" + "" + "" + "") + << QStringLiteral("unhold"); + QTest::newRow("mute") + << QByteArrayLiteral("" + "" + "" + "" + "") + << QStringLiteral("mute"); + QTest::newRow("unmute") + << QByteArrayLiteral("" + "" + "" + "" + "") + << QStringLiteral("unmute"); + QTest::newRow("ringing") + << QByteArrayLiteral("" + "" + "" + "" + "") + << QStringLiteral("ringing"); +} + +void tst_QXmppJingleIq::testRtpSessionState() +{ + QFETCH(QByteArray, xml); + QFETCH(QString, state); + + QXmppJingleIq iq1; + QVERIFY(!iq1.rtpSessionState()); + parsePacket(iq1, xml); + + const auto rtpSessionState1 = *iq1.rtpSessionState(); + if (state == QStringLiteral("active")) { + QVERIFY(std::holds_alternative(rtpSessionState1)); + } else if (state == QStringLiteral("hold")) { + QVERIFY(std::holds_alternative(rtpSessionState1)); + } else if (state == QStringLiteral("unhold")) { + QVERIFY(std::holds_alternative(rtpSessionState1)); + } else if (const auto isMute = state == QStringLiteral("mute"); isMute || state == QStringLiteral("unmute")) { + QVERIFY(std::holds_alternative(rtpSessionState1)); + + const auto stateMuting = std::get(rtpSessionState1); + QCOMPARE(stateMuting.isMute, isMute); + + if (isMute) { + QCOMPARE(stateMuting.creator, QXmppJingleIq::Initiator); + QCOMPARE(stateMuting.name, QStringLiteral("voice")); + } else { + QCOMPARE(stateMuting.creator, QXmppJingleIq::Responder); + QVERIFY(stateMuting.name.isEmpty()); + } + } else if (state == QStringLiteral("ringing")) { + QVERIFY(std::holds_alternative(rtpSessionState1)); + } + + serializePacket(iq1, xml); + + QXmppJingleIq iq2; + iq2.setType(QXmppIq::Set); + iq2.setId({}); + + if (state == QStringLiteral("active")) { + iq2.setRtpSessionState(QXmppJingleIq::RtpSessionStateActive()); + } else if (state == QStringLiteral("hold")) { + iq2.setRtpSessionState(QXmppJingleIq::RtpSessionStateHold()); + } else if (state == QStringLiteral("unhold")) { + iq2.setRtpSessionState(QXmppJingleIq::RtpSessionStateUnhold()); + } else if (const auto isMute = state == QStringLiteral("mute"); isMute || state == QStringLiteral("unmute")) { + QXmppJingleIq::RtpSessionStateMuting stateMuting; + stateMuting.isMute = isMute; + + if (isMute) { + stateMuting.creator = QXmppJingleIq::Initiator; + stateMuting.name = QStringLiteral("voice"); + } else { + stateMuting.creator = QXmppJingleIq::Responder; + } + + iq2.setRtpSessionState(stateMuting); + } else if (state == QStringLiteral("ringing")) { + iq2.setRtpSessionState(QXmppJingleIq::RtpSessionStateRinging()); + } + + const auto rtpSessionState2 = *iq2.rtpSessionState(); + if (state == QStringLiteral("active")) { + QVERIFY(std::holds_alternative(rtpSessionState2)); + } else if (state == QStringLiteral("hold")) { + QVERIFY(std::holds_alternative(rtpSessionState2)); + } else if (state == QStringLiteral("unhold")) { + QVERIFY(std::holds_alternative(rtpSessionState2)); + } else if (const auto isMute = state == QStringLiteral("mute"); isMute || state == QStringLiteral("unmute")) { + QVERIFY(std::holds_alternative(rtpSessionState2)); + + const auto stateMuting = std::get(rtpSessionState2); + QCOMPARE(stateMuting.isMute, isMute); + + if (isMute) { + QCOMPARE(stateMuting.creator, QXmppJingleIq::Initiator); + QCOMPARE(stateMuting.name, QStringLiteral("voice")); + } else { + QCOMPARE(stateMuting.creator, QXmppJingleIq::Responder); + QVERIFY(stateMuting.name.isEmpty()); + } + } else if (state == QStringLiteral("ringing")) { + QVERIFY(std::holds_alternative(rtpSessionState2)); + } + + serializePacket(iq2, xml); +} + void tst_QXmppJingleIq::testAudioPayloadType() { const QByteArray xml(R"()"); @@ -790,27 +928,5 @@ void tst_QXmppJingleIq::testPayloadTypeRtpFeedbackNegotiation() serializePacket(payload2, xml); } -void tst_QXmppJingleIq::testRinging() -{ - const QByteArray xml( - "" - "" - "" - "" - ""); - - QXmppJingleIq iq; - parsePacket(iq, xml); - QCOMPARE(iq.ringing(), true); - serializePacket(iq, xml); -} - QTEST_MAIN(tst_QXmppJingleIq) #include "tst_qxmppjingleiq.moc" -- cgit v1.2.3