summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore8
-rwxr-xr-xautogen.sh73
-rw-r--r--configure.ac (renamed from configure.in)12
-rw-r--r--test/.gitignore8
-rw-r--r--test/Makefile36
-rw-r--r--test/Makefile.am34
-rw-r--r--test/test.cc15
-rw-r--r--test/test_amrwb.cc185
-rw-r--r--test/test_asc2bin.cc37
-rw-r--r--test/test_connectivity.cc122
-rw-r--r--test/test_init.cc48
-rw-r--r--test/test_opus.cc309
-rw-r--r--test/test_raw.cc138
-rw-r--r--test/test_rtp.cc121
-rw-r--r--test/test_srtp.cc83
15 files changed, 622 insertions, 607 deletions
diff --git a/.gitignore b/.gitignore
index b22fc36..cfcbe17 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,11 +22,3 @@ Makefile.in
*.lo
*.o
lrtp.pc
-test_amrwb
-test_connectivity
-test_init
-test_opus
-test_raw
-test_rtp
-test_srtp
-test_asc2bin \ No newline at end of file
diff --git a/autogen.sh b/autogen.sh
index 3e7a88f..298a369 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -1,71 +1,2 @@
-#!/bin/sh
-# Run this to generate all the initial makefiles, etc.
-# This was lifted from the Gimp, and adapted slightly by
-# Raph Levien, slightly hacked for xine by Daniel Caujolle-Bert.
-
-DIE=0
-
-PROG=lrtp
-
-# Check how echo works in this /bin/sh
-case `echo -n` in
--n) _echo_n= _echo_c='\c';;
-*) _echo_n=-n _echo_c=;;
-esac
-
-
-(autoconf --version) < /dev/null > /dev/null 2>&1 || {
- echo
- echo "You must have autoconf installed to compile $PROG."
- echo "Download the appropriate package for your distribution,"
- echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
- DIE=1
-}
-
-(libtool --version) < /dev/null > /dev/null 2>&1 || {
- echo
- echo "You must have libtool installed to compile $PROG."
- echo "Get ftp://ftp.gnu.org/pub/gnu/libtool-1.4.tar.gz"
- echo "(or a newer version if it is available)"
- DIE=1
-}
-
-(automake --version) < /dev/null > /dev/null 2>&1 || {
- echo
- echo "You must have automake installed to compile $PROG."
- echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz"
- echo "(or a newer version if it is available)"
- DIE=1
-}
-
-(aclocal --version) < /dev/null > /dev/null 2>&1 || {
- echo
- echo "**Error**: Missing aclocal. The version of automake"
- echo "installed doesn't appear recent enough."
- echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz"
- echo "(or a newer version if it is available)"
- DIE=1
-}
-
-if [ "$DIE" -eq 1 ]; then
- exit 1
-fi
-
-aclocalinclude="$ACLOCAL_FLAGS"; \
-(echo $_echo_n " + Running aclocal: $_echo_c"; \
- aclocal $aclocalinclude; \
- echo "done.") && \
-(echo $_echo_n " + Running libtoolize: $_echo_c"; \
- libtoolize --force --copy >/dev/null 2>&1; \
- echo "done.") && \
-(echo $_echo_n " + Running autoheader: $_echo_c"; \
- autoheader; \
- echo "done.") && \
-(echo $_echo_n " + Running automake: $_echo_c"; \
- automake --gnu --add-missing --copy; \
- echo "done.") && \
-(echo $_echo_n " + Running autoconf: $_echo_c"; \
- autoconf; \
- echo "done.")
-
-rm -f config.cache
+#!/bin/sh -e
+${AUTORECONF:-autoreconf} -fiv
diff --git a/configure.in b/configure.ac
index 537aa37..52c6481 100644
--- a/configure.in
+++ b/configure.ac
@@ -35,6 +35,17 @@ if test x$with_crypto == xyes; then
fi
dnl ======================
+dnl Check if tests should be built.
+dnl ======================
+AC_ARG_WITH(test,
+ [ --with-test build tests (default=no)],
+ [],
+ [with_test=no])
+if test x$with_test == xyes; then
+ AM_PATH_CPPUNIT(1.9.6)
+fi
+
+dnl ======================
dnl Check for srtp library
dnl ======================
tmp_CXXFLAGS="$CXXFLAGS"
@@ -70,5 +81,6 @@ AC_STDC_HEADERS
AC_OUTPUT(
Makefile
src/Makefile
+ test/Makefile
lrtp.pc)
diff --git a/test/.gitignore b/test/.gitignore
new file mode 100644
index 0000000..ee4d4d1
--- /dev/null
+++ b/test/.gitignore
@@ -0,0 +1,8 @@
+result_*.xml
+amrwb
+asc2bin
+opus
+raw
+init
+rtp
+srtp \ No newline at end of file
diff --git a/test/Makefile b/test/Makefile
deleted file mode 100644
index 82fc79f..0000000
--- a/test/Makefile
+++ /dev/null
@@ -1,36 +0,0 @@
-CFLAGS=`cppunit-config --cflags`
-LIBS=`cppunit-config --libs`
-
-all: connectivity amrwb init rtp srtp opus raw
-
-connectivity:
- g++ -g test_$@.cc -L../src/.libs -llrtp -I../src -o test_$@
- LD_LIBRARY_PATH=../src/.libs ./test_$@
-
-amrwb:
- g++ -g test_$@.cc -L../src/.libs -llrtp -lm -I../src -o test_$@
- LD_LIBRARY_PATH=../src/.libs ./test_$@
-
-opus:
- g++ -g test_$@.cc -L../src/.libs -llrtp -lm -I../src -lopus -lao -o test_$@
- LD_LIBRARY_PATH=../src/.libs ./test_$@
-
-init:
- g++ -g test_$@.cc -L../src/.libs -llrtp -I../src -o test_$@
- LD_LIBRARY_PATH=../src/.libs ./test_$@
-
-raw:
- g++ -g test_$@.cc -L../src/.libs -llrtp -I../src -o test_$@
- LD_LIBRARY_PATH=../src/.libs ./test_$@
-
-rtp:
- g++ -g test_$@.cc ../src/rtp.cc -o test_$@
- ./test_$@
-
-srtp:
- g++ -g -DUSE_CRYPTO test_$@.cc ../src/rtp.cc ../src/srtp.cc ../src/asc2bin.cc -lsrtp -o test_$@
- ./test_$@
-
-asc2bin:
- g++ ${CFLAGS} ${LIBS} -g test.cc test_$@.cc -o test_$@
- ./test_$@
diff --git a/test/Makefile.am b/test/Makefile.am
new file mode 100644
index 0000000..e5c60bf
--- /dev/null
+++ b/test/Makefile.am
@@ -0,0 +1,34 @@
+TESTS = amrwb opus init rtp srtp raw asc2bin
+
+check_PROGRAMS = $(TESTS)
+
+amrwb_CXXFLAGS = $(CPPUNIT_CFLAGS) -DOUTPUT=\"amrwb\" -I../src
+amrwb_LDFLAGS = $(CPPUNIT_LIBS) -L../src/.libs/ -llrtp
+amrwb_SOURCES = test.cc test_amrwb.cc
+
+opus_CXXFLAGS = $(CPPUNIT_CFLAGS) -DOUTPUT=\"opus\" -I../src
+opus_LDFLAGS = $(CPPUNIT_LIBS) -L../src/.libs/ -llrtp -lopus -lao
+opus_SOURCES = test.cc test_opus.cc
+
+init_CXXFLAGS = $(CPPUNIT_CFLAGS) -DOUTPUT=\"init\" -I../src
+init_LDFLAGS = $(CPPUNIT_LIBS) -L../src/.libs/ -llrtp
+init_SOURCES = test.cc test_init.cc
+
+rtp_CXXFLAGS = $(CPPUNIT_CFLAGS) -DOUTPUT=\"rtp\" -I../src
+rtp_LDFLAGS = $(CPPUNIT_LIBS) -L../src/.libs/ -llrtp
+rtp_SOURCES = test.cc test_rtp.cc
+
+srtp_CXXFLAGS = $(CPPUNIT_CFLAGS) -DOUTPUT=\"srtp\" -I../src
+srtp_LDFLAGS = $(CPPUNIT_LIBS) -L../src/.libs/ -llrtp
+srtp_SOURCES = test.cc test_srtp.cc
+
+raw_CXXFLAGS = $(CPPUNIT_CFLAGS) -DOUTPUT=\"raw\" -I../src
+raw_LDFLAGS = $(CPPUNIT_LIBS) -L../src/.libs/ -llrtp
+raw_SOURCES = test.cc test_raw.cc
+
+asc2bin_CXXFLAGS = $(CPPUNIT_CFLAGS) -DOUTPUT=\"asc2bin\" -I../src
+asc2bin_LDFLAGS = $(CPPUNIT_LIBS)
+asc2bin_SOURCES = test.cc test_asc2bin.cc
+
+clean-local:
+ -rm -f result_*.xml
diff --git a/test/test.cc b/test/test.cc
index 171a578..7830e2c 100644
--- a/test/test.cc
+++ b/test/test.cc
@@ -1,7 +1,11 @@
-#include <cppunit/CompilerOutputter.h>
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+//#include <cppunit/CompilerOutputter.h>
+#include <cppunit/XmlOutputter.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/ui/text/TestRunner.h>
+#include <fstream>
+
int main(int argc, char* argv[])
{
// Get the top level suite from the registry
@@ -11,12 +15,15 @@ int main(int argc, char* argv[])
CppUnit::TextUi::TestRunner runner;
runner.addTest( suite );
- // Change the default outputter to a compiler error format outputter
- runner.setOutputter( new CppUnit::CompilerOutputter( &runner.result(),
- std::cerr ) );
+ std::ofstream myfile;
+ myfile.open("result_"OUTPUT".xml");
+ runner.setOutputter(new CppUnit::XmlOutputter(&runner.result(), myfile));
+
// Run the tests.
bool wasSucessful = runner.run();
+ myfile.close();
+
// Return error code 1 if the one of test failed.
return wasSucessful ? 0 : 1;
}
diff --git a/test/test_amrwb.cc b/test/test_amrwb.cc
index cf5a5a6..adefda1 100644
--- a/test/test_amrwb.cc
+++ b/test/test_amrwb.cc
@@ -25,6 +25,8 @@
* License along with lrtp; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <cppunit/extensions/HelperMacros.h>
+
#include <lrtp.h>
#include <stdio.h>
@@ -32,31 +34,11 @@
#include <string>
#include <vector>
-#include <math.h>
-#include <opus/opus.h>
-#include <limits.h>
-#include <ao/ao.h>
-
#define KEY "123456789012345678901234567890123456789012345678901234567890"
#define SSRC 1234567890
-#define FS 8000
-
-#define F1 440
-#define AF1 0.3
-
-#define F2 500
-#define AF2 0.7
-
-void dump(const char *title, const char *buf, size_t size)
-{
- printf("%12s: ", title);
- for(int i = 0; i < size; i++) {
- if(i % 8 == 0) printf(" ");
- printf("%02x ", (unsigned char)*buf++);
- }
- printf("\n");
-}
+#define PKG_SIZE (16*1024)
+#define NUM_PKGS 10
// Frame sizes based on frame type index:
static const int wb_frame_size[16] = {
@@ -64,92 +46,117 @@ static const int wb_frame_size[16] = {
60, 5, -1, -1, -1, -1, -1, 0
};
-int main()
+class test_amrwb_class : public CppUnit::TestFixture
{
- std::vector<std::string> packets;
- unsigned int csrc = 42;
+ CPPUNIT_TEST_SUITE(test_amrwb_class);
+ CPPUNIT_TEST(test_amrwb_0);
+ CPPUNIT_TEST(test_amrwb_1);
+ CPPUNIT_TEST(test_amrwb_2);
+ CPPUNIT_TEST(test_amrwb_3);
+ CPPUNIT_TEST(test_amrwb_4);
+ CPPUNIT_TEST(test_amrwb_5);
+ CPPUNIT_TEST(test_amrwb_6);
+ CPPUNIT_TEST(test_amrwb_7);
+ CPPUNIT_TEST(test_amrwb_8);
+ CPPUNIT_TEST_SUITE_END();
+
+public:
+ void setUp() {}
+ void tearDown() {}
+
+ void test_amrwb(int frame_type_index) {
+ std::vector<std::string> packets;
+ unsigned int csrc = 42;
- int frame_type_index = 8;
+ int sent = 0;
- printf("========== Encode ==========\n");
+ size_t num_frames = NUM_PKGS;
+ size_t framesize = wb_frame_size[frame_type_index] * num_frames;
- { // Encode
- struct lrtp_t *lrtp = lrtp_init(KEY, SSRC);
+ { // Encode
+ struct lrtp_t *lrtp = lrtp_init(KEY, SSRC);
- struct lrtp_profile_t *profile =
- lrtp_create_profile(lrtp, PROFILE_AMRWB, csrc,
- OPTION_AMRWB_FRAME_TYPE_INDEX, frame_type_index,
- OPTION_END);
+ struct lrtp_profile_t *profile =
+ lrtp_create_profile(lrtp, PROFILE_AMRWB, csrc,
+ OPTION_AMRWB_FRAME_TYPE_INDEX, frame_type_index,
+ OPTION_END);
- char packet[16*1024];
- size_t packetsize = sizeof(packet);
+ char packet[PKG_SIZE];
+ size_t packetsize = sizeof(packet);
- int cnt = 0;
+ char cnt = 0;
- for(int i = 0; i < 10; i++) {
+ for(int i = 0; i < NUM_PKGS; i++) {
+ char frame[wb_frame_size[frame_type_index] * num_frames];
- size_t num_frames = 10;
- char frame[wb_frame_size[frame_type_index] * num_frames];
- size_t framesize = wb_frame_size[frame_type_index] * num_frames;
+ for(int i = 0; i < framesize; i++) frame[i] = cnt++;
- for(int i = 0; i < framesize; i++) frame[i] = cnt++;
+ int timestamp = 0;
- int timestamp = 0;
-
- int ret = lrtp_enqueue_frame(profile, frame, framesize);
- while( (ret = lrtp_pack(lrtp, packet, sizeof(packet))) != 0) {
- std::string p;
- p.append(packet, ret);
- packets.push_back(p);
+ int ret = lrtp_enqueue_frame(profile, frame, framesize);
+ while( (ret = lrtp_pack(lrtp, packet, sizeof(packet))) != 0) {
+ std::string p;
+ p.append(packet, ret);
+ packets.push_back(p);
+ }
}
- }
-
- lrtp_destroy_profile(lrtp, csrc);
- lrtp_close(lrtp);
- }
- printf("========== Decode ==========\n");
+ lrtp_destroy_profile(lrtp, csrc);
+ lrtp_close(lrtp);
+ }
- { // Decode
- struct lrtp_t *lrtp = lrtp_init(KEY, SSRC);
+ { // Decode
+ struct lrtp_t *lrtp = lrtp_init(KEY, SSRC);
- struct lrtp_profile_t *profile =
- lrtp_create_profile(lrtp, PROFILE_AMRWB, csrc,
- OPTION_AMRWB_FRAME_TYPE_INDEX, frame_type_index,
- OPTION_END);
+ struct lrtp_profile_t *profile =
+ lrtp_create_profile(lrtp, PROFILE_AMRWB, csrc,
+ OPTION_AMRWB_FRAME_TYPE_INDEX, frame_type_index,
+ OPTION_END);
- char frame[16*1024];
- size_t framesize = sizeof(frame);
+ char frame[16*1024];
- int cnt = 0;
-
- std::vector<std::string>::iterator i = packets.begin();
- while(i != packets.end()) {
- size_t packetsize = i->size();
- printf("unpack sz: %d\n", packetsize);
- const char *packet = i->data();
- unsigned int ts;
-
- framesize = sizeof(frame);
-
- lrtp_unpack(lrtp, packet, packetsize);
- int ret;
- while((ret = lrtp_dequeue_frame(lrtp, frame, framesize, &csrc, &ts)) != 0) {
- printf("Got %d bytes, csrc %d, ts: %d\n", ret, csrc, ts);
-
- printf("cnt:\n");
- for(int i = 0; i < ret; i++) {
- printf("%02x ", (unsigned char)frame[i]);
+ char cnt = 0;
+ int total = 0;
+
+ std::vector<std::string>::iterator i = packets.begin();
+ while(i != packets.end()) {
+ size_t packetsize = i->size();
+ const char *packet = i->data();
+ unsigned int ts;
+
+ lrtp_unpack(lrtp, packet, packetsize);
+ int ret;
+ while((ret = lrtp_dequeue_frame(lrtp, frame, sizeof(frame), &csrc, &ts))
+ != 0) {
+ int err = 0;
+ for(int i = 0; i < ret; i++) {
+ err += abs(frame[i] - cnt);
+ cnt++;
+ total++;
+ }
+ CPPUNIT_ASSERT_EQUAL(0, err);
}
- printf("\n");
+
+ i++;
}
- i++;
- }
+ CPPUNIT_ASSERT_EQUAL((int)(framesize * NUM_PKGS), total);
- lrtp_destroy_profile(lrtp, csrc);
- lrtp_close(lrtp);
- }
+ lrtp_destroy_profile(lrtp, csrc);
+ lrtp_close(lrtp);
+ }
+ }
+
+ void test_amrwb_0() { test_amrwb(0); }
+ void test_amrwb_1() { test_amrwb(1); }
+ void test_amrwb_2() { test_amrwb(2); }
+ void test_amrwb_3() { test_amrwb(3); }
+ void test_amrwb_4() { test_amrwb(4); }
+ void test_amrwb_5() { test_amrwb(5); }
+ void test_amrwb_6() { test_amrwb(6); }
+ void test_amrwb_7() { test_amrwb(7); }
+ void test_amrwb_8() { test_amrwb(8); }
+};
- return 0;
-}
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION(test_amrwb_class);
diff --git a/test/test_asc2bin.cc b/test/test_asc2bin.cc
index 38010bf..1663c70 100644
--- a/test/test_asc2bin.cc
+++ b/test/test_asc2bin.cc
@@ -1,3 +1,30 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set et sw=2 ts=2: */
+/***************************************************************************
+ * test_asc2bin.cc
+ *
+ * Mon Sep 2 14:02:16 CEST 2013
+ * Copyright 2013 Bent Bisballe Nyeng
+ * deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ * This file is part of lrtp.
+ *
+ * lrtp is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * lrtp is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with lrtp; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
#include <cppunit/extensions/HelperMacros.h>
#include "../src/asc2bin.h"
@@ -5,11 +32,11 @@
static int g_i = -1;
-class test_asc2bin : public CppUnit::TestFixture
+class test_asc2bin_class : public CppUnit::TestFixture
{
- CPPUNIT_TEST_SUITE(test_asc2bin);
+ CPPUNIT_TEST_SUITE(test_asc2bin_class);
CPPUNIT_TEST(test_asc2nibble);
- CPPUNIT_TEST(test_asc2bin_);
+ CPPUNIT_TEST(test_asc2bin);
CPPUNIT_TEST_SUITE_END();
public:
@@ -42,7 +69,7 @@ public:
CPPUNIT_ASSERT_EQUAL(asc2nibble('F'), 0xf);
}
- void test_asc2bin_() {
+ void test_asc2bin() {
char val[32] = {};
const char h[] = "0123456789abcdefABCDEF0000000000";
char ref[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
@@ -62,4 +89,4 @@ public:
};
// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION(test_asc2bin);
+CPPUNIT_TEST_SUITE_REGISTRATION(test_asc2bin_class);
diff --git a/test/test_connectivity.cc b/test/test_connectivity.cc
deleted file mode 100644
index e115748..0000000
--- a/test/test_connectivity.cc
+++ /dev/null
@@ -1,122 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set et sw=2 ts=2: */
-/***************************************************************************
- * test_init.cc
- *
- * Mon Sep 2 14:02:16 CEST 2013
- * Copyright 2013 Bent Bisballe Nyeng
- * deva@aasimon.org
- ****************************************************************************/
-
-/*
- * This file is part of lrtp.
- *
- * lrtp is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * lrtp is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with lrtp; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include <lrtp.h>
-
-#include <stdio.h>
-
-#include <string>
-#include <vector>
-
-#define KEY "123456789012345678901234567890123456789012345678901234567890"
-#define SSRC 1234567890
-
-void dump(const char *title, const char *buf, size_t size)
-{
- printf("%12s: ", title);
- for(int i = 0; i < size; i++) {
- if(i % 8 == 0) printf(" ");
- printf("%02x ", (unsigned char)*buf++);
- }
- printf("\n");
-}
-
-int main()
-{
- char frame[5];
- int pkg_size = 4;
-
- std::vector<std::string> packets;
- unsigned int csrc = 42;
-
- { // Encode
- struct lrtp_t *lrtp = lrtp_init(KEY, SSRC);
-
- struct lrtp_profile_t *profile =
- lrtp_create_profile(lrtp, PROFILE_RAW, csrc,
- OPTION_RAW_PKG_SIZE, pkg_size,
- OPTION_END);
-
- char packet[16*1024];
- size_t size = sizeof(packet);
-
- for(unsigned int ts = 0; ts < 8; ts++) {
- int ret = 0;
- ret = lrtp_enqueue_frame(profile, frame, sizeof(frame));
- while( (ret = lrtp_pack(lrtp, packet, sizeof(packet))) != 0) {
- std::string p;
- p.append(packet, ret);
- packets.push_back(p);
- dump("pkg", packet, ret);
- }
- }
-
- lrtp_destroy_profile(lrtp, csrc);
-
- lrtp_close(lrtp);
- }
-
- { // Decode
- struct lrtp_t *lrtp = lrtp_init(KEY, SSRC);
-
- struct lrtp_profile_t *profile =
- lrtp_create_profile(lrtp, PROFILE_RAW, csrc,
- OPTION_RAW_PKG_SIZE, pkg_size,
- OPTION_END);
-
- char frame[16*1024];
- size_t framesize = sizeof(frame);
-
- int cnt = 0;
-
- std::vector<std::string>::iterator i = packets.begin();
- while(i != packets.end()) {
- size_t packetsize = i->size();
- printf("unpack sz: %d\n", packetsize);
- const char *packet = i->data();
- unsigned int ts;
-
- framesize = sizeof(frame);
-
- lrtp_unpack(lrtp, packet, packetsize);
- int ret;
- while((ret = lrtp_dequeue_frame(lrtp, frame, framesize, &csrc, &ts))
- != 0) {
- printf("Got %d bytes, csrc %d, ts: %d\n", ret, csrc, ts);
- dump("pkg", frame, ret);
- }
-
- i++;
- }
-
- lrtp_destroy_profile(lrtp, csrc);
- lrtp_close(lrtp);
- }
-
- return 0;
-}
-
diff --git a/test/test_init.cc b/test/test_init.cc
index 97ecd30..3281183 100644
--- a/test/test_init.cc
+++ b/test/test_init.cc
@@ -25,6 +25,8 @@
* License along with lrtp; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <cppunit/extensions/HelperMacros.h>
+
#include <lrtp.h>
#include <stdio.h>
@@ -32,32 +34,34 @@
#define KEY "123456789012345678901234567890123456789012345678901234567890"
#define SSRC 1234567890
-void dump(const char *title, const char *buf, size_t size)
-{
- printf("%12s: ", title);
- for(int i = 0; i < size; i++) {
- if(i % 8 == 0) printf(" ");
- printf("%02x ", (unsigned char)*buf++);
- }
- printf("\n");
-}
-
-int main()
+class test_init_class : public CppUnit::TestFixture
{
- char frame[] = "foo";
+ CPPUNIT_TEST_SUITE(test_init_class);
+ CPPUNIT_TEST(test_init);
+ CPPUNIT_TEST_SUITE_END();
+
+public:
+ void setUp() {}
+ void tearDown() {}
+
+ void test_init() {
+ struct lrtp_t *lrtp = lrtp_init(KEY, SSRC);
- struct lrtp_t *lrtp = lrtp_init(KEY, SSRC);
+ CPPUNIT_ASSERT(lrtp);
- unsigned int csrc = 42;
- struct lrtp_profile_t *profile =
- lrtp_create_profile(lrtp, PROFILE_RAW, csrc,
- OPTION_RAW_PKG_SIZE, sizeof(frame),
- OPTION_END);
+ unsigned int csrc = 42;
+ struct lrtp_profile_t *profile =
+ lrtp_create_profile(lrtp, PROFILE_RAW, csrc,
+ OPTION_RAW_PKG_SIZE, 100,
+ OPTION_END);
- lrtp_destroy_profile(lrtp, csrc);
+ CPPUNIT_ASSERT(profile);
- lrtp_close(lrtp);
+ lrtp_destroy_profile(lrtp, csrc);
- return 0;
-}
+ lrtp_close(lrtp);
+ }
+};
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION(test_init_class);
diff --git a/test/test_opus.cc b/test/test_opus.cc
index 9e41a42..1d55d5a 100644
--- a/test/test_opus.cc
+++ b/test/test_opus.cc
@@ -25,6 +25,8 @@
* License along with lrtp; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <cppunit/extensions/HelperMacros.h>
+
#include <lrtp.h>
#include <stdio.h>
@@ -98,186 +100,189 @@ private:
ao_device *device;
};
-int main()
+void get_samples(double x, short *r, short *l)
{
- size_t channels = 2;
- size_t ms[] = { 120, 240, 480, 960, 1920, 2880 };
-
- std::vector<std::string> packets;
- unsigned int csrc = 42;
-
- double sin_x = 0;
- size_t ts = 0;
-
- printf("========== Encode ==========\n");
-
- { // Encode
- struct lrtp_t *lrtp = lrtp_init(KEY, SSRC);
-
- struct lrtp_profile_t *profile =
- lrtp_create_profile(lrtp, PROFILE_OPUS, csrc,
- //OPTION_RAW_PKG_SIZE, pkg_size,
- OPTION_END);
-
- char packet[16*1024];
- size_t packetsize = sizeof(packet);
-
- int err;
- OpusEncoder *opus = opus_encoder_create(FS, channels,
- OPUS_APPLICATION_AUDIO, &err);
- printf("Opus create err: %d\n", err);
-
- opus_encoder_ctl(opus, OPUS_SET_BITRATE(32000));// [500;512000]
- opus_encoder_ctl(opus, OPUS_SET_COMPLEXITY(10)); // [0;10]
- opus_encoder_ctl(opus, OPUS_SET_SIGNAL(OPUS_AUTO));
- //opus_encoder_ctl(opus, OPUS_SET_MAX_BANDWIDTH(OPUS_BANDWIDTH_NARROWBAND));
-
- int cnt = 0;
- size_t timestamp = 0;
- size_t idx = 0;
- for(unsigned int ts = 0; ts < FS / 10; ts++) {
- printf("packet #%d\n", ts);
-
- printf("idx: %d\n", idx);
- size_t pcmsize = ms[idx] / (48000.0 / FS); // Number of samples pr channel
- short *pcm = new short[100000/*pcmsize * channels*/];
- for(int i = 0 ; i < pcmsize; i++) {
- sin_x++;
-
- if((int)sin_x % FS == 0) {
- idx++;// = rand() % (sizeof(ms)/sizeof(size_t));
- idx = idx % (sizeof(ms)/sizeof(size_t));
- }
+ double amp1 = sin((2 * M_PI / (double)FS)* x * AF1) * SHRT_MAX;
+ double amp2 = sin((2 * M_PI / (double)FS)* x * AF2) * SHRT_MAX;
- double amp1 = sin((2*M_PI/(double)FS)*(double)sin_x * AF1) * SHRT_MAX;
- double amp2 = sin((2*M_PI/(double)FS)*(double)sin_x * AF2) * SHRT_MAX;
-
- pcm[i*2] = (short)(sin(2*M_PI/FS*(double)sin_x * F1) * amp1);
- pcm[i*2+1] = (short)(sin(2*M_PI/FS*(double)sin_x * F2) * amp2);
- }
-
- // Master timestamp is sample number in 48kHz (Opus RFC states this)
- timestamp += pcmsize * 48000 / FS;
-
- // size_t pcmsize = pcmsize * channels * sizeof(short);
+ *r = (short)(sin(2 * M_PI / FS * x * F1) * amp1);
+ *l = 0;//(short)(sin(2 * M_PI / FS * x * F2) * amp2);
+}
- char frame[pcmsize];
- int framesize = sizeof(frame);
- framesize = opus_encode(opus, pcm, pcmsize,
- (unsigned char*)frame, framesize);
+class test_opus_class : public CppUnit::TestFixture
+{
+ CPPUNIT_TEST_SUITE(test_opus_class);
+ CPPUNIT_TEST(test_opus);
+ CPPUNIT_TEST_SUITE_END();
- if(framesize < 0) {
- printf("Opus error: %s\n", opus_strerror(framesize));
- }
+public:
+ void setUp() {}
+ void tearDown() {}
- printf("Opus Packet: %d bytes compressed to %d bytes\n",
- channels * pcmsize * sizeof(short), framesize);
+ void test_opus() {
+ size_t channels = 2;
+ size_t ms[] = { 120, 240, 480, 960, 1920, 2880 };
- int ret = lrtp_enqueue_frame(profile, frame, framesize);
- while( (ret = lrtp_pack(lrtp, packet, sizeof(packet))) != 0) {
- std::string p;
- p.append(packet, ret);
- packets.push_back(p);
- }
+ std::vector<std::string> packets;
+ unsigned int csrc = 42;
+
+ size_t ts = 0;
- delete[] pcm;
- }
+ int sent = 0;
- opus_encoder_destroy(opus);
- lrtp_destroy_profile(lrtp, csrc);
- lrtp_close(lrtp);
- }
+ { // Encode
+ struct lrtp_t *lrtp = lrtp_init(KEY, SSRC);
- printf("========== Decode ==========\n");
+ struct lrtp_profile_t *profile =
+ lrtp_create_profile(lrtp, PROFILE_OPUS, csrc,
+ //OPTION_RAW_PKG_SIZE, pkg_size,
+ OPTION_END);
- { // Decode
- struct lrtp_t *lrtp = lrtp_init(KEY, SSRC);
-
- struct lrtp_profile_t *profile =
- lrtp_create_profile(lrtp, PROFILE_OPUS, csrc,
- //OPTION_RAW_PKG_SIZE, pkg_size,
- OPTION_END);
+ char packet[16*1024];
+ size_t packetsize = sizeof(packet);
+
+ int err;
+ OpusEncoder *opus = opus_encoder_create(FS, channels,
+ OPUS_APPLICATION_AUDIO, &err);
+ CPPUNIT_ASSERT_EQUAL(0, err);
+
+ opus_encoder_ctl(opus, OPUS_SET_BITRATE(32000));// [500;512000]
+ opus_encoder_ctl(opus, OPUS_SET_COMPLEXITY(10)); // [0;10]
+ opus_encoder_ctl(opus, OPUS_SET_SIGNAL(OPUS_AUTO));
+ //opus_encoder_ctl(opus, OPUS_SET_MAX_BANDWIDTH(OPUS_BANDWIDTH_NARROWBAND));
+
+ double sin_x = 0;
+
+ int cnt = 0;
+ size_t timestamp = 0;
+ size_t idx = 0;
+ for(unsigned int ts = 0; ts < FS / 10; ts++) {
+ //printf("packet #%d\n", ts);
+
+ //printf("idx: %d\n", idx);
+ size_t pcmsize = ms[idx] / (48000.0 / FS); // Number of samples pr channel
+ sent += pcmsize;
+ short *pcm = new short[100000/*pcmsize * channels*/];
+ for(int i = 0 ; i < pcmsize; i++) {
+ sin_x++;
+
+ if((int)sin_x % FS == 0) {
+ idx++;// = rand() % (sizeof(ms)/sizeof(size_t));
+ idx = idx % (sizeof(ms)/sizeof(size_t));
+ }
+
+ get_samples(sin_x, &pcm[i*2], &pcm[i*2+1]);
+ }
- int err;
- OpusDecoder *opus = opus_decoder_create(FS, channels, &err);
- printf("Opus create err: %d\n", err);
+ // Master timestamp is sample number in 48kHz (Opus RFC states this)
+ timestamp += pcmsize * 48000 / FS;
- int idx = (sizeof(ms)/sizeof(size_t)) - 1;
- printf("idx: %d\n", idx);
+ // size_t pcmsize = pcmsize * channels * sizeof(short);
- Audio audio;
+ char frame[pcmsize];
+ int framesize = sizeof(frame);
+ framesize = opus_encode(opus, pcm, pcmsize,
+ (unsigned char*)frame, framesize);
- char frame[16*1024];
-
- int cnt = 0;
- std::vector<std::string>::iterator i = packets.begin();
- while(i != packets.end()) {
- size_t packetsize = i->size();
- const char *packet = i->data();
- unsigned int ts;
-
- // printf("unpack sz: %d - %p\n", packetsize, packet);
-
- lrtp_unpack(lrtp, packet, packetsize);
- int n = 0;
- int ret;
- while((ret = lrtp_dequeue_frame(lrtp, frame, sizeof(frame), &csrc, &ts))
- != 0) {
- size_t pcmsize = 16*1024;//ms[idx] / (48000 / FS);
- short *pcm = new short[pcmsize * channels];
- //printf("pcmsize %d\n", pcmsize); fflush(stdout);
- int res = opus_decode(opus, (const unsigned char*)frame, ret,
- pcm, pcmsize, 0);
-
- // printf("Decompressed %d bytes\n", res);
- n += res;
- // pcmsize = res * channels * sizeof(short);
-
- audio.play((char *)pcm, res * channels * sizeof(short));
+ if(framesize < 0) {
+ printf("Opus error: %s\n", opus_strerror(framesize));
+ }
+ /*
+ printf("Opus Packet: %d bytes compressed to %d bytes\n",
+ channels * pcmsize * sizeof(short), framesize);
+ */
+ int ret = lrtp_enqueue_frame(profile, frame, framesize);
+ while( (ret = lrtp_pack(lrtp, packet, sizeof(packet))) != 0) {
+ std::string p;
+ p.append(packet, ret);
+ packets.push_back(p);
+ }
delete[] pcm;
}
- printf("ratio: %d => %d\n", packetsize, n * channels);
-
- i++;
+ opus_encoder_destroy(opus);
+ lrtp_destroy_profile(lrtp, csrc);
+ lrtp_close(lrtp);
}
+ { // Decode
+ struct lrtp_t *lrtp = lrtp_init(KEY, SSRC);
- /*
+ struct lrtp_profile_t *profile =
+ lrtp_create_profile(lrtp, PROFILE_OPUS, csrc,
+ //OPTION_RAW_PKG_SIZE, pkg_size,
+ OPTION_END);
- std::vector<std::string>::iterator i = packets.begin();
- while(i != packets.end()) {
- size_t packetsize = i->size();
- printf("unpack sz: %d\n", packetsize);
- const char *packet = i->data();
- unsigned int ts;
+ int err;
+ OpusDecoder *opus = opus_decoder_create(FS, channels, &err);
+ CPPUNIT_ASSERT_EQUAL(0, err);
- framesize = sizeof(frame);
+ int idx = (sizeof(ms)/sizeof(size_t)) - 1;
+ //printf("idx: %d\n", idx);
- lrtp_unpack(lrtp, packet, packetsize, frame, &framesize, &csrc, &ts);
- printf("Got %d bytes, csrc %d, ts: %d\n", framesize, csrc, ts);
+ //Audio audio;
- size_t pcmsize = 16*1024;//ms[idx] / (48000 / FS);
- short *pcm = new short[pcmsize * channels];
- printf("pcmsize %d\n", pcmsize); fflush(stdout);
- int res = opus_decode(opus, (const unsigned char*)frame, framesize,
- pcm, pcmsize, 0);
- framesize = sizeof(frame);
+ char frame[16*1024];
+
+ double sin_x = 0;
+
+ int cnt = 0;
+ std::vector<std::string>::iterator i = packets.begin();
+ while(i != packets.end()) {
+ size_t packetsize = i->size();
+ const char *packet = i->data();
+ unsigned int ts;
+
+ // printf("unpack sz: %d - %p\n", packetsize, packet);
+
+ lrtp_unpack(lrtp, packet, packetsize);
+ int n = 0;
+ int ret;
+ while((ret = lrtp_dequeue_frame(lrtp, frame, sizeof(frame), &csrc, &ts))
+ != 0) {
+ size_t pcmsize = 16*1024;//ms[idx] / (48000 / FS);
+ short *pcm = new short[pcmsize * channels];
+ //printf("pcmsize %d\n", pcmsize); fflush(stdout);
+ int res = opus_decode(opus, (const unsigned char*)frame, ret,
+ pcm, pcmsize, 0);
+
+ //printf("Decompressed %d samples\n", res);
+ n += res;
+ // pcmsize = res * channels * sizeof(short);
+
+ int errl = 0;
+ int errr = 0;
+ for(int i = 0; i < res; i++) {
+ short left;
+ short right;
+ get_samples(sin_x, &left, &right);
+ //printf("%d\t%d\n", left, pcm[2 * i]);
+ //printf("%d\t%d\n", right, pcm[2 * i + 1]);
+ errl += abs(left - pcm[2 * i]);
+ errr += abs(right - pcm[2 * i + 1]);
+ sin_x++;
+ }
+ //printf("err: %d\t%d\n", errl, errr);
+ // CPPUNIT_ASSERT_EQUAL(0, errl / (res * 40000));
+ // CPPUNIT_ASSERT_EQUAL(0, errr / (res * 40000));
+ //audio.play((char *)pcm, res * channels * sizeof(short));
+
+ delete[] pcm;
+ }
- printf("Decompressed %d bytes\n", res);
- // pcmsize = res * channels * sizeof(short);
+ i++;
+ }
- audio.play((char *)pcm, res * channels * sizeof(short));
+ CPPUNIT_ASSERT(sent); // Fail if no data was sent.
+ CPPUNIT_ASSERT_EQUAL(sent, (int)sin_x);
- delete[] pcm;
- i++;
+ opus_decoder_destroy(opus);
+ lrtp_destroy_profile(lrtp, csrc);
+ lrtp_close(lrtp);
}
- */
- opus_decoder_destroy(opus);
- lrtp_destroy_profile(lrtp, csrc);
- lrtp_close(lrtp);
}
+};
- return 0;
-}
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION(test_opus_class);
diff --git a/test/test_raw.cc b/test/test_raw.cc
new file mode 100644
index 0000000..d3910d3
--- /dev/null
+++ b/test/test_raw.cc
@@ -0,0 +1,138 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set et sw=2 ts=2: */
+/***************************************************************************
+ * test_init.cc
+ *
+ * Mon Sep 2 14:02:16 CEST 2013
+ * Copyright 2013 Bent Bisballe Nyeng
+ * deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ * This file is part of lrtp.
+ *
+ * lrtp is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * lrtp is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with lrtp; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <lrtp.h>
+
+#include <stdio.h>
+
+#include <string>
+#include <vector>
+
+#define KEY "123456789012345678901234567890123456789012345678901234567890"
+#define SSRC 1234567890
+
+class test_conn_class : public CppUnit::TestFixture
+{
+ CPPUNIT_TEST_SUITE(test_conn_class);
+ CPPUNIT_TEST(test_raw);
+ CPPUNIT_TEST_SUITE_END();
+
+public:
+ void setUp() {}
+ void tearDown() {}
+
+ void test_raw() {
+ char frame[5];
+ int pkg_size = 4;
+
+ std::vector<std::string> packets;
+ unsigned int csrc = 42;
+
+ { // Encode
+ struct lrtp_t *lrtp = lrtp_init(KEY, SSRC);
+
+ struct lrtp_profile_t *profile =
+ lrtp_create_profile(lrtp, PROFILE_RAW, csrc,
+ OPTION_RAW_PKG_SIZE, pkg_size,
+ OPTION_END);
+
+ char num = 0;
+
+ char packet[16*1024];
+ size_t size = sizeof(packet);
+
+ for(unsigned int ts = 0; ts < 8; ts++) {
+
+ for(int i = 0; i < sizeof(frame); i++) frame[i] = num++;
+
+ int ret = 0;
+ ret = lrtp_enqueue_frame(profile, frame, sizeof(frame));
+ while( (ret = lrtp_pack(lrtp, packet, sizeof(packet))) != 0) {
+ std::string p;
+ p.append(packet, ret);
+ packets.push_back(p);
+ //dump("pkg", packet, ret);
+ }
+ }
+
+ lrtp_destroy_profile(lrtp, csrc);
+
+ lrtp_close(lrtp);
+ }
+
+ { // Decode
+ struct lrtp_t *lrtp = lrtp_init(KEY, SSRC);
+
+ struct lrtp_profile_t *profile =
+ lrtp_create_profile(lrtp, PROFILE_RAW, csrc,
+ OPTION_RAW_PKG_SIZE, pkg_size,
+ OPTION_END);
+
+ char frame[16*1024];
+ size_t framesize = sizeof(frame);
+
+ int cnt = 0;
+
+ char num = 0;
+
+ std::vector<std::string>::iterator i = packets.begin();
+ while(i != packets.end()) {
+ size_t packetsize = i->size();
+ // printf("unpack sz: %d\n", packetsize);
+ const char *packet = i->data();
+ unsigned int ts;
+
+ framesize = sizeof(frame);
+
+ lrtp_unpack(lrtp, packet, packetsize);
+ int ret;
+ while((ret = lrtp_dequeue_frame(lrtp, frame, framesize, &csrc, &ts))
+ != 0) {
+ //printf("Got %d bytes, csrc %d, ts: %d\n", ret, csrc, ts);
+
+ int err = 0;
+ for(int i = 0; i < ret; i++) {
+ err += abs(frame[i] - num++);
+ }
+ CPPUNIT_ASSERT_EQUAL(0, err);
+
+ //dump("pkg", frame, ret);
+ }
+
+ i++;
+ }
+
+ lrtp_destroy_profile(lrtp, csrc);
+ lrtp_close(lrtp);
+ }
+ }
+};
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION(test_conn_class);
diff --git a/test/test_rtp.cc b/test/test_rtp.cc
index b3ef80d..489cd42 100644
--- a/test/test_rtp.cc
+++ b/test/test_rtp.cc
@@ -25,88 +25,93 @@
* License along with lrtp; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "../src/rtp.h"
+#include <cppunit/extensions/HelperMacros.h>
-#include <stdio.h>
+#include "../src/rtp.h"
-void dump(RTP &rtp, const char *title)
+class test_rtp_class : public CppUnit::TestFixture
{
- char buf[16 * 1024];
+ CPPUNIT_TEST_SUITE(test_rtp_class);
+ CPPUNIT_TEST(test_rtp);
+ CPPUNIT_TEST_SUITE_END();
- unsigned char *p = (unsigned char *)buf;
- size_t s = rtp.packet(buf, sizeof(buf));
+public:
+ void setUp() {}
+ void tearDown() {}
- printf("%12s: ", title);
- for(int i = 0; i < s; i++) {
- if(i % 8 == 0) printf(" ");
- printf("%02x ", *p++);
- }
- printf("\n");
-}
+ void test_rtp() {
+ RTP rtp;
+ //dump(rtp, "Clean");
-int main()
-{
- RTP rtp;
- dump(rtp, "Clean");
+ rtp.setMarker(true);
+ //dump(rtp, "mark");
+
+ char payload[] = { 0x01, 0x02, 0x03 };
+ rtp.setPayload(payload, sizeof(payload));
+ //dump(rtp, "Payload[6*f]");
- rtp.setMarker(true);
- dump(rtp, "mark");
+ rtp.setPadding(5);
+ //dump(rtp, "Padding(5)");
- char payload[] = { 0xff, 0xff, 0xff };
- rtp.setPayload(payload, sizeof(payload));
- dump(rtp, "Payload[6*f]");
+ rtp.setPadding(0);
+ //dump(rtp, "Padding(0)");
- rtp.setPadding(5);
- dump(rtp, "Padding(5)");
+ rtp.setPadding(3);
+ //dump(rtp, "Padding(3)");
- rtp.setPadding(0);
- dump(rtp, "Padding(0)");
+ rtp.setMarker(true);
+ //dump(rtp, "mark");
- rtp.setPadding(3);
- dump(rtp, "Padding(3)");
+ rtp.setPayloadType(1);
+ //dump(rtp, "pt(1)");
- rtp.setMarker(true);
- dump(rtp, "mark");
+ rtp.setPayloadType(0x7f);
+ //dump(rtp, "pt(7f)");
- rtp.setPayloadType(1);
- dump(rtp, "pt(1)");
+ rtp.setPayloadType(2);
+ //dump(rtp, "pt(2)");
- rtp.setPayloadType(0x7f);
- dump(rtp, "pt(7f)");
+ rtp.addCSrc(1);
+ //dump(rtp, "CSrc[1]");
- rtp.setPayloadType(2);
- dump(rtp, "pt(2)");
+ rtp.removeCSrc(1);
+ //dump(rtp, "CSrc[-]");
- rtp.addCSrc(1);
- dump(rtp, "CSrc[1]");
+ rtp.addCSrc(2);
+ rtp.addCSrc(4);
+ //dump(rtp, "CSrc[2,4]");
- rtp.removeCSrc(1);
- dump(rtp, "CSrc[-]");
+ rtp.removeCSrc(2);
+ //dump(rtp, "CSrc[2]");
- rtp.addCSrc(2);
- rtp.addCSrc(4);
- dump(rtp, "CSrc[2,4]");
+ rtp.setSeq(0x0102);
+ //dump(rtp, "seq");
- rtp.removeCSrc(2);
- dump(rtp, "CSrc[2]");
+ rtp.setTimestamp(0x03040506);
+ //dump(rtp, "ts");
- rtp.setSeq(0x0102);
- dump(rtp, "seq");
+ rtp.setSSrc(0x0708090a);
+ //dump(rtp, "ssrc");
- rtp.setTimestamp(0x03040506);
- dump(rtp, "ts");
+ char buf[MAX_RTP_PACKET_SIZE];
+ size_t sz = rtp.packet(buf, sizeof(buf));
- rtp.setSSrc(0x0708090a);
- dump(rtp, "ssrc");
+ RTP rtp2;
+ rtp2.fromPacket(buf, sz);
- char buf[MAX_RTP_PACKET_SIZE];
- size_t sz = rtp.packet(buf, sizeof(buf));
+ char buf2[MAX_RTP_PACKET_SIZE];
+ size_t sz2 = rtp2.packet(buf2, sizeof(buf2));
- RTP rtp2;
- rtp2.fromPacket(buf, sz);
+ CPPUNIT_ASSERT_EQUAL(sz, sz2);
- dump(rtp2, "fromPacket");
+ int err = 0;
+ for(int i = 0; i < sz; i++) {
+ err += abs(buf[i] - buf2[i]);
+ }
+ CPPUNIT_ASSERT_EQUAL(0, err);
- return 0;
-}
+ }
+};
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION(test_rtp_class);
diff --git a/test/test_srtp.cc b/test/test_srtp.cc
index 962c18f..c7b82e5 100644
--- a/test/test_srtp.cc
+++ b/test/test_srtp.cc
@@ -25,6 +25,8 @@
* License along with lrtp; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <cppunit/extensions/HelperMacros.h>
+
#include <stdio.h>
#include "../src/rtp.h"
@@ -33,55 +35,56 @@
#define KEY "123456789012345678901234567890123456789012345678901234567890"
#define SSRC 1234567890
-void dump(const char *title, const char *buf, size_t size)
-{
- printf("%12s: ", title);
- for(int i = 0; i < size; i++) {
- if(i % 8 == 0) printf(" ");
- printf("%02x ", (unsigned char)*buf++);
- }
- printf("\n");
-}
-
-int main()
+class test_srtp_class : public CppUnit::TestFixture
{
- RTP rtp;
- rtp.setSSrc(SSRC);
+ CPPUNIT_TEST_SUITE(test_srtp_class);
+ CPPUNIT_TEST(test_srtp);
+ CPPUNIT_TEST_SUITE_END();
+
+public:
+ void setUp() {}
+ void tearDown() {}
+
+ void test_srtp() {
+ RTP rtp;
+ rtp.setSSrc(SSRC);
+
+ char payload[] = { 0xde, 0xad, 0xbe, 0xef };
+ rtp.setPayload(payload, sizeof(payload));
- char payload[] = { 0xde, 0xad, 0xbe, 0xef };
- rtp.setPayload(payload, sizeof(payload));
+ char buf[MAX_RTP_PACKET_SIZE];
+ size_t sz = rtp.packet(buf, sizeof(buf));
- char buf[MAX_RTP_PACKET_SIZE];
- size_t sz = rtp.packet(buf, sizeof(buf));
+ //dump("Vanilla", buf, sz);
- dump("Vanilla", buf, sz);
+ {
+ SRTP srtp(KEY, rtp.SSrc());
+ sz = srtp.encrypt(buf, sz);
+ }
- {
- SRTP srtp(KEY, rtp.SSrc());
- sz = srtp.encrypt(buf, sz);
- }
+ //dump("Encrypted", buf, sz);
- dump("Encrypted", buf, sz);
+ {
+ SRTP srtp(KEY, rtp.SSrc());
+ sz = srtp.decrypt(buf, sz);
+ }
- {
- SRTP srtp(KEY, rtp.SSrc());
- sz = srtp.decrypt(buf, sz);
- }
+ //dump("Decrypted", buf, sz);
+ //printf("Compare:\n");
+ char buf0[MAX_RTP_PACKET_SIZE];
+ size_t sz0 = rtp.packet(buf0, sizeof(buf0));
- dump("Decrypted", buf, sz);
+ CPPUNIT_ASSERT_EQUAL(sz, sz0);
- printf("Compare:\n");
- char buf0[MAX_RTP_PACKET_SIZE];
- size_t sz0 = rtp.packet(buf0, sizeof(buf0));
- if(sz0 != sz) printf("Sizes differ (%d %d)...\n", sz0, sz);
- unsigned int sum = 0;
- for(int i = 0; i < sz0; i++) {
- sum += abs(buf0[i] - buf[i]);
- }
- if(sum) printf("NOT EQUAL! diff = %d\n", sum);
- else printf("Vanilla == Decrypted\n");
+ int err = 0;
+ for(int i = 0; i < sz0; i++) {
+ err += abs(buf0[i] - buf[i]);
+ }
- return 0;
-}
+ CPPUNIT_ASSERT_EQUAL(0, err);
+ }
+};
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION(test_srtp_class);