#include <ableton/discovery/v1/Messages.hpp>
#include <ableton/test/CatchWrapper.hpp>
#include <array>
namespace ableton
{
namespace discovery
{
namespace v1
{
namespace
{
using NodeId = uint8_t;
}
TEST_CASE("ParseEmptyBuffer", "[Messages]")
{
const std::array<char, 0> buffer{};
auto result = parseMessageHeader<NodeId>(begin(buffer), end(buffer));
CHECK(kInvalid == result.first.messageType);
CHECK(begin(buffer) == result.second);
}
TEST_CASE("ParseTruncatedMessageHeader", "[Messages]")
{
const std::array<char, 10> truncated = {
{'_', 'a', 's', 'd', 'p', '_', 'v', 1, 'x', 'y'}};
const auto result = parseMessageHeader<NodeId>(begin(truncated), end(truncated));
CHECK(kInvalid == result.first.messageType);
const auto consumedBytes = (begin(truncated) != result.second);
CHECK_FALSE(consumedBytes);
}
TEST_CASE("MissingProtocolHeader", "[Messages]")
{
const std::array<char, 32> zeros{};
auto result = parseMessageHeader<NodeId>(begin(zeros), end(zeros));
CHECK(kInvalid == result.first.messageType);
CHECK(begin(zeros) == result.second);
}
TEST_CASE("RoundtripAliveNoPayload", "[Messages]")
{
std::array<char, 32> buffer{};
const uint8_t ident = 1;
const auto endAlive = aliveMessage(ident, 5, makePayload(), begin(buffer));
const auto result = parseMessageHeader<NodeId>(begin(buffer), endAlive);
CHECK(endAlive == result.second);
CHECK(kAlive == result.first.messageType);
CHECK(5 == result.first.ttl);
CHECK(ident == result.first.ident);
}
} } }