blob: 338b214f6ba28061e5527e988c2188e7a2e2b26d [file] [log] [blame]
#include "slp.hpp"
#include "slp_meta.hpp"
#include <gtest/gtest.h>
/* 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Version | Function-ID | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length, contd.|O|F|R| reserved |Next Ext Offset|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Extension Offset, contd.| XID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Language Tag Length | Language Tag \
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
TEST(parseHeaderTest, BasicGoodPath)
{
// Basic buffer with valid Function-ID
slp::buffer testData{0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
slp::Message req;
int rc = slp::SUCCESS;
std::tie(rc, req) = slp::parser::internal::parseHeader(testData);
EXPECT_EQ(rc, 0);
}
TEST(parseHeaderTest, InvalidBufferSize)
{
// 1 byte too small
slp::buffer testData{0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
slp::Message req;
int rc = slp::SUCCESS;
std::tie(rc, req) = slp::parser::internal::parseHeader(testData);
EXPECT_NE(rc, 0);
}
TEST(parseHeaderTest, ValidLangTagLength)
{
// Language Tag Length that is valid
slp::buffer testData{0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00};
slp::Message req;
int rc = slp::SUCCESS;
std::tie(rc, req) = slp::parser::internal::parseHeader(testData);
EXPECT_EQ(rc, 0);
}
TEST(parseHeaderTest, InvalidLangTagLength)
{
// Language Tag Length that is too big
slp::buffer testData{0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00};
slp::Message req;
int rc = slp::SUCCESS;
std::tie(rc, req) = slp::parser::internal::parseHeader(testData);
EXPECT_NE(rc, 0);
}