loopback test for Tx->Rx
This commit is contained in:
parent
216a08f100
commit
258910efe1
|
@ -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";
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue