mirror of
https://github.com/mfontanini/libtins
synced 2026-01-23 02:35:57 +01:00
Added ICMP and SNAP tests.
This commit is contained in:
224
tests/src/icmp.cpp
Normal file
224
tests/src/icmp.cpp
Normal file
@@ -0,0 +1,224 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
#include <stdint.h>
|
||||
#include "icmp.h"
|
||||
#include "utils.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace Tins;
|
||||
|
||||
class ICMPTest : public testing::Test {
|
||||
public:
|
||||
static const uint8_t expected_packets[][8];
|
||||
static const uint32_t expected_packet_count;
|
||||
|
||||
void test_equals(const ICMP &icmp1, const ICMP &icmp2);
|
||||
};
|
||||
|
||||
const uint8_t ICMPTest::expected_packets[][8] = {
|
||||
{'\x08', '\x01', '\xad', '{', 'V', '\xd1', '\xf3', '\xb1' },
|
||||
{'\x0c', '\x00', 't', '\xff', '\x7f', '\x00', '\x00', '\x00'}
|
||||
};
|
||||
const uint32_t ICMPTest::expected_packet_count = 1;
|
||||
|
||||
|
||||
TEST_F(ICMPTest, DefaultConstructor) {
|
||||
ICMP icmp;
|
||||
EXPECT_EQ(icmp.code(), 0);
|
||||
EXPECT_EQ(icmp.type(), ICMP::ECHO_REQUEST);
|
||||
EXPECT_EQ(icmp.id(), 0);
|
||||
EXPECT_EQ(icmp.check(), 0);
|
||||
EXPECT_EQ(icmp.gateway(), 0);
|
||||
EXPECT_EQ(icmp.mtu(), 0);
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, FlagConstructor) {
|
||||
ICMP icmp(ICMP::ECHO_REPLY);
|
||||
EXPECT_EQ(icmp.type(), ICMP::ECHO_REPLY);
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, Code) {
|
||||
ICMP icmp;
|
||||
icmp.code(0x7a);
|
||||
EXPECT_EQ(icmp.code(), 0x7a);
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, Id) {
|
||||
ICMP icmp;
|
||||
icmp.id(0x7af1);
|
||||
EXPECT_EQ(icmp.id(), 0x7af1);
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, Sequence) {
|
||||
ICMP icmp;
|
||||
icmp.sequence(0x7af1);
|
||||
EXPECT_EQ(icmp.sequence(), 0x7af1);
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, Type) {
|
||||
ICMP icmp;
|
||||
icmp.type(ICMP::ECHO_REPLY);
|
||||
EXPECT_EQ(icmp.type(), ICMP::ECHO_REPLY);
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, Checksum) {
|
||||
ICMP icmp;
|
||||
icmp.check(0x31fd);
|
||||
EXPECT_EQ(icmp.check(), 0x31fd);
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, Gateway) {
|
||||
ICMP icmp;
|
||||
icmp.gateway(0x31fdb5cd);
|
||||
EXPECT_EQ(icmp.gateway(), 0x31fdb5cd);
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, MTU) {
|
||||
ICMP icmp;
|
||||
icmp.mtu(0x7af1);
|
||||
EXPECT_EQ(icmp.mtu(), 0x7af1);
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, Pointer) {
|
||||
ICMP icmp;
|
||||
icmp.pointer(0xf1);
|
||||
EXPECT_EQ(icmp.pointer(), 0xf1);
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, SetEchoRequest) {
|
||||
ICMP icmp;
|
||||
icmp.set_echo_request(0x7af1, 0x123f);
|
||||
EXPECT_EQ(icmp.type(), ICMP::ECHO_REQUEST);
|
||||
EXPECT_EQ(icmp.id(), 0x7af1);
|
||||
EXPECT_EQ(icmp.sequence(), 0x123f);
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, SetEchoReply) {
|
||||
ICMP icmp;
|
||||
icmp.set_echo_reply(0x7af1, 0x123f);
|
||||
EXPECT_EQ(icmp.type(), ICMP::ECHO_REPLY);
|
||||
EXPECT_EQ(icmp.id(), 0x7af1);
|
||||
EXPECT_EQ(icmp.sequence(), 0x123f);
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, SetInfoRequest) {
|
||||
ICMP icmp;
|
||||
icmp.set_info_request(0x7af1, 0x123f);
|
||||
EXPECT_EQ(icmp.type(), ICMP::INFO_REQUEST);
|
||||
EXPECT_EQ(icmp.id(), 0x7af1);
|
||||
EXPECT_EQ(icmp.sequence(), 0x123f);
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, SetInfoReply) {
|
||||
ICMP icmp;
|
||||
icmp.set_info_reply(0x7af1, 0x123f);
|
||||
EXPECT_EQ(icmp.type(), ICMP::INFO_REPLY);
|
||||
EXPECT_EQ(icmp.id(), 0x7af1);
|
||||
EXPECT_EQ(icmp.sequence(), 0x123f);
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, SetDestinationUnreachable) {
|
||||
ICMP icmp;
|
||||
icmp.set_dest_unreachable();
|
||||
EXPECT_EQ(icmp.type(), ICMP::DEST_UNREACHABLE);
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, SetTimeExceeded) {
|
||||
ICMP icmp;
|
||||
icmp.set_time_exceeded(true);
|
||||
EXPECT_EQ(icmp.type(), ICMP::TIME_EXCEEDED);
|
||||
EXPECT_EQ(icmp.code(), 0);
|
||||
icmp.set_time_exceeded(false);
|
||||
EXPECT_EQ(icmp.type(), ICMP::TIME_EXCEEDED);
|
||||
EXPECT_EQ(icmp.code(), 1);
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, SetParamProblem) {
|
||||
ICMP icmp;
|
||||
icmp.set_param_problem(true, 0x4f);
|
||||
EXPECT_EQ(icmp.type(), ICMP::PARAM_PROBLEM);
|
||||
EXPECT_EQ(icmp.code(), 0);
|
||||
EXPECT_EQ(icmp.pointer(), 0x4f);
|
||||
|
||||
icmp.set_param_problem(false);
|
||||
EXPECT_EQ(icmp.type(), ICMP::PARAM_PROBLEM);
|
||||
EXPECT_EQ(icmp.code(), 1);
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, SetSourceQuench) {
|
||||
ICMP icmp;
|
||||
icmp.set_source_quench();
|
||||
EXPECT_EQ(icmp.type(), ICMP::SOURCE_QUENCH);
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, SetRedirect) {
|
||||
ICMP icmp;
|
||||
icmp.set_redirect(0x3d, 0xf1dc);
|
||||
EXPECT_EQ(icmp.type(), ICMP::REDIRECT);
|
||||
EXPECT_EQ(icmp.code(), 0x3d);
|
||||
EXPECT_EQ(icmp.gateway(), 0xf1dc);
|
||||
}
|
||||
|
||||
void ICMPTest::test_equals(const ICMP &icmp1, const ICMP &icmp2) {
|
||||
EXPECT_EQ(icmp1.type(), icmp2.type());
|
||||
EXPECT_EQ(icmp1.code(), icmp2.code());
|
||||
EXPECT_EQ(icmp1.gateway(), icmp2.gateway());
|
||||
EXPECT_EQ(icmp1.id(), icmp2.id());
|
||||
EXPECT_EQ(icmp1.sequence(), icmp2.sequence());
|
||||
EXPECT_EQ(icmp1.pointer(), icmp2.pointer());
|
||||
EXPECT_EQ(icmp1.mtu(), icmp2.mtu());
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, ClonePDU) {
|
||||
ICMP icmp1;
|
||||
icmp1.set_echo_request(0x34ab, 0x12f7);
|
||||
|
||||
ICMP *icmp2 = static_cast<ICMP*>(icmp1.clone_pdu());
|
||||
test_equals(icmp1, *icmp2);
|
||||
delete icmp2;
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, Serialize) {
|
||||
ICMP icmp1;
|
||||
icmp1.set_echo_request(0x34ab, 0x12f7);
|
||||
|
||||
uint32_t size;
|
||||
uint8_t *buffer = icmp1.serialize(size);
|
||||
ASSERT_TRUE(buffer);
|
||||
|
||||
ICMP icmp2(icmp1);
|
||||
uint32_t size2;
|
||||
uint8_t *buffer2 = icmp2.serialize(size2);
|
||||
ASSERT_EQ(size, size2);
|
||||
EXPECT_TRUE(memcmp(buffer, buffer2, size) == 0);
|
||||
delete[] buffer;
|
||||
delete[] buffer2;
|
||||
}
|
||||
|
||||
TEST_F(ICMPTest, ConstructorFromBuffer) {
|
||||
for(unsigned i(0); i < expected_packet_count; ++i) {
|
||||
ICMP icmp1(expected_packets[i], sizeof(expected_packets[i]));
|
||||
uint32_t size;
|
||||
uint8_t *buffer = icmp1.serialize(size);
|
||||
|
||||
switch(i) {
|
||||
case 0:
|
||||
EXPECT_EQ(icmp1.type(), ICMP::ECHO_REQUEST);
|
||||
EXPECT_EQ(icmp1.code(), 1);
|
||||
EXPECT_EQ(icmp1.id(), 0x56d1);
|
||||
EXPECT_EQ(icmp1.sequence(), 0xf3b1);
|
||||
break;
|
||||
case 1:
|
||||
EXPECT_EQ(icmp1.type(), ICMP::PARAM_PROBLEM);
|
||||
EXPECT_EQ(icmp1.code(), 0);
|
||||
EXPECT_EQ(icmp1.pointer(), 0x7f);
|
||||
break;
|
||||
}
|
||||
|
||||
ICMP icmp2(buffer, size);
|
||||
test_equals(icmp1, icmp2);
|
||||
|
||||
delete[] buffer;
|
||||
}
|
||||
}
|
||||
128
tests/src/snap.cpp
Normal file
128
tests/src/snap.cpp
Normal file
@@ -0,0 +1,128 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
#include <stdint.h>
|
||||
#include "snap.h"
|
||||
#include "utils.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace Tins;
|
||||
|
||||
class SNAPTest : public testing::Test {
|
||||
public:
|
||||
static const uint8_t expected_packet[];
|
||||
|
||||
void test_equals(const SNAP &snap1, const SNAP &snap2);
|
||||
};
|
||||
|
||||
const uint8_t SNAPTest::expected_packet[] = {'\xaa', '\xaa', '\x03', '\x00', '\x00', '\x00', 'z', '\xb1'};
|
||||
|
||||
TEST_F(SNAPTest, DefaultConstructor) {
|
||||
SNAP snap;
|
||||
EXPECT_EQ(snap.pdu_type(), PDU::SNAP);
|
||||
EXPECT_EQ(snap.dsap(), 0xaa);
|
||||
EXPECT_EQ(snap.ssap(), 0xaa);
|
||||
EXPECT_EQ(snap.eth_type(), 0);
|
||||
EXPECT_EQ(snap.poll(), 0);
|
||||
EXPECT_EQ(snap.org_code(), 0);
|
||||
EXPECT_EQ(snap.id(), 3);
|
||||
}
|
||||
|
||||
TEST_F(SNAPTest, CopyConstructor) {
|
||||
SNAP snap1;
|
||||
snap1.eth_type(0xfab1);
|
||||
snap1.org_code(0xfab1c3);
|
||||
snap1.poll(0x1);
|
||||
snap1.id(0x1);
|
||||
SNAP snap2(snap1);
|
||||
test_equals(snap1, snap2);
|
||||
}
|
||||
|
||||
TEST_F(SNAPTest, CopyAssignmentOperator) {
|
||||
SNAP snap1;
|
||||
snap1.eth_type(0xfab1);
|
||||
snap1.org_code(0xfab1c3);
|
||||
snap1.poll(0x1);
|
||||
snap1.id(0x1);
|
||||
SNAP snap2 = snap1;
|
||||
test_equals(snap1, snap2);
|
||||
}
|
||||
|
||||
TEST_F(SNAPTest, Id) {
|
||||
SNAP snap;
|
||||
snap.id(0x1);
|
||||
EXPECT_EQ(snap.id(), 0x1);
|
||||
}
|
||||
|
||||
TEST_F(SNAPTest, Poll) {
|
||||
SNAP snap;
|
||||
snap.poll(0x1);
|
||||
EXPECT_EQ(snap.poll(), 0x1);
|
||||
}
|
||||
|
||||
TEST_F(SNAPTest, OrgCode) {
|
||||
SNAP snap;
|
||||
snap.org_code(0xfab1c3);
|
||||
EXPECT_EQ(snap.org_code(), 0xfab1c3);
|
||||
}
|
||||
|
||||
TEST_F(SNAPTest, EthType) {
|
||||
SNAP snap;
|
||||
snap.eth_type(0xfab1);
|
||||
EXPECT_EQ(snap.eth_type(), 0xfab1);
|
||||
}
|
||||
|
||||
TEST_F(SNAPTest, Serialize) {
|
||||
SNAP snap1;
|
||||
snap1.eth_type(0xfab1);
|
||||
snap1.org_code(0xfab1c3);
|
||||
snap1.poll(0x1);
|
||||
snap1.id(0x1);
|
||||
|
||||
uint32_t size;
|
||||
uint8_t *buffer = snap1.serialize(size);
|
||||
ASSERT_TRUE(buffer);
|
||||
|
||||
SNAP snap2(snap1);
|
||||
uint32_t size2;
|
||||
uint8_t *buffer2 = snap2.serialize(size2);
|
||||
ASSERT_EQ(size, size2);
|
||||
EXPECT_TRUE(memcmp(buffer, buffer2, size) == 0);
|
||||
delete[] buffer;
|
||||
delete[] buffer2;
|
||||
}
|
||||
|
||||
TEST_F(SNAPTest, ClonePDU) {
|
||||
SNAP snap1;
|
||||
snap1.eth_type(0xfab1);
|
||||
snap1.org_code(0xfab1c3);
|
||||
snap1.poll(0x1);
|
||||
snap1.id(0x1);
|
||||
SNAP *snap2 = static_cast<SNAP*>(snap1.clone_pdu());
|
||||
ASSERT_TRUE(snap2);
|
||||
test_equals(snap1, *snap2);
|
||||
|
||||
delete snap2;
|
||||
}
|
||||
|
||||
TEST_F(SNAPTest, ConstructorFromBuffer) {
|
||||
SNAP snap1(expected_packet, sizeof(expected_packet));
|
||||
uint32_t size;
|
||||
uint8_t *buffer = snap1.serialize(size);
|
||||
|
||||
EXPECT_EQ(snap1.id(), 3);
|
||||
EXPECT_EQ(snap1.dsap(), 0xaa);
|
||||
EXPECT_EQ(snap1.ssap(), 0xaa);
|
||||
EXPECT_EQ(snap1.eth_type(), 0x7ab1);
|
||||
|
||||
SNAP snap2(buffer, size);
|
||||
test_equals(snap1, snap2);
|
||||
delete[] buffer;
|
||||
}
|
||||
|
||||
void SNAPTest::test_equals(const SNAP &snap1, const SNAP &snap2) {
|
||||
EXPECT_EQ(snap1.dsap(), snap2.dsap());
|
||||
EXPECT_EQ(snap1.ssap(), snap2.ssap());
|
||||
EXPECT_EQ(snap1.id(), snap2.id());
|
||||
EXPECT_EQ(snap1.eth_type(), snap2.eth_type());
|
||||
}
|
||||
Reference in New Issue
Block a user