1
0
Fork 0

loopback test for Tx->Rx

This commit is contained in:
Kevin Matz 2023-05-15 11:29:22 -04:00
parent 216a08f100
commit 258910efe1
1 changed files with 57 additions and 1 deletions

View File

@ -25,6 +25,8 @@
#include <gtest/gtest.h>
#include <message.h>
#include <method.h>
#include <receiver.h>
#include <sender.h>
/// \cite Spec10 First example OSC-String
const uint8_t string1_data[] = {
@ -196,6 +198,8 @@ TEST(OSC, string_out)
EXPECT_EQ(memcmp(string2_data, buffer2, sizeof(buffer2)), 0) << "string_2 output mismatch";
}
/// \todo Test coverage for OSC Timestamps
TEST(OSC, tags_in)
{
@ -299,7 +303,6 @@ TEST(OSC, message_out)
uint8_t buffer2[sizeof(message2_data)];
auto stream1 = std::make_shared<bufferstream>(buffer1, sizeof(buffer1));
auto stream2 = std::make_shared<bufferstream>(buffer2, sizeof(buffer2));
message1.oStream(stream1);
message2.oStream(stream2);
@ -309,3 +312,56 @@ TEST(OSC, message_out)
EXPECT_EQ(memcmp(buffer1, message1_data, sizeof(buffer1)), 0) << "message 1 output mismatch";
EXPECT_EQ(memcmp(buffer2, message2_data, sizeof(buffer2)), 0) << "message 2 output mismatch";
}
TEST(OSC, loopback)
{
auto message1 = std::make_shared<OSC::Message>();
auto message2 = std::make_shared<OSC::Message>();
uint8_t buffer1[sizeof(message1_data)];
uint8_t buffer2[sizeof(message2_data)];
std::copy(std::begin(message1_data),std::end(message1_data), std::begin(buffer1));
std::copy(std::begin(message2_data),std::end(message2_data), std::begin(buffer2));
auto stream1 = std::make_shared<bufferstream>(buffer1, sizeof(buffer1));
auto stream2 = std::make_shared<bufferstream>(buffer2, sizeof(buffer2));
message1->iStream(stream1);
message2->iStream(stream2);
std::vector<std::string> hits;
auto echo = [](std::shared_ptr<OSC::Message> msg, const uint8_t *orig) {
auto buffer = std::vector<uint8_t>(msg->streamSize());
auto stream = std::make_shared<bufferstream>(buffer.data(), buffer.size());
msg->oStream(stream);
EXPECT_FALSE(stream->fail()) << "message stream failed";
EXPECT_EQ(memcmp(buffer.data(), orig, buffer.size()), 0) << "message output mismatch";
};
auto echo1 = [&echo, &hits](std::shared_ptr<OSC::Message> msg) {
hits.push_back(msg->address_pattern);
echo(msg, message1_data);
};
auto echo2 = [&echo, &hits](std::shared_ptr<OSC::Message> msg) {
hits.push_back(msg->address_pattern);
echo(msg, message2_data);
};
OSC::Receiver rx;
auto *method1 = new OSC::Method(new OSC::Method(new OSC::Method(rx.rootMethod(),
"oscillator"),
"4"),
"frequency");
auto *method2 = new OSC::Method(rx.rootMethod(), "foo");
auto token1 = method1->onTrigger(echo1);
auto token2 = method2->onTrigger(echo2);
OSC::Sender tx;
auto tokenSend = tx.setSender(std::bind(&OSC::Receiver::rxPacket, &rx, std::placeholders::_1));
hits.clear();
tx.send(message1);
ASSERT_EQ(hits.size(), 1) << "method hit mismatch";
EXPECT_STREQ(hits.front().c_str(), "/oscillator/4/frequency") << "method address mismatch";
hits.clear();
tx.send(std::shared_ptr<OSC::Message>(message2));
ASSERT_EQ(hits.size(), 1) << "method hit mismatch";
EXPECT_STREQ(hits.front().c_str(), "/foo") << "method address mismatch";
}