version 0.0.1
This commit is contained in:
292
test/PacketDissection/PacketContainer_test.cpp
Normal file
292
test/PacketDissection/PacketContainer_test.cpp
Normal file
@@ -0,0 +1,292 @@
|
||||
#include <catch2/catch.hpp>
|
||||
|
||||
#include <boost/log/trivial.hpp>
|
||||
#include <rte_mbuf.h>
|
||||
|
||||
#include "Definitions.hpp"
|
||||
#include "PacketDissection/PacketContainer.hpp"
|
||||
#include "PacketDissection/PacketInfo.hpp"
|
||||
#include "PacketDissection/PacketInfoCreator.hpp"
|
||||
#include "PacketDissection/PacketInfoIpv4Icmp.hpp"
|
||||
#include "PacketDissection/PacketInfoIpv4Tcp.hpp"
|
||||
#include "PacketDissection/PacketInfoIpv4Udp.hpp"
|
||||
#include "PacketDissection/PacketInfoIpv6Icmp.hpp"
|
||||
#include "PacketDissection/PacketInfoIpv6Tcp.hpp"
|
||||
#include "PacketDissection/PacketInfoIpv6Udp.hpp"
|
||||
|
||||
TEST_CASE("PacketContainer", "[]") {
|
||||
// === I N I T === //
|
||||
uint16_t inside_port = 0;
|
||||
uint16_t outside_port = 1;
|
||||
struct rte_mempool mbuf_pool_struct;
|
||||
struct rte_mempool* mbuf_pool = &mbuf_pool_struct;
|
||||
CHECK(mbuf_pool != nullptr);
|
||||
|
||||
PacketContainer* pkt_container =
|
||||
new PacketContainer(mbuf_pool, inside_port, outside_port, 0, 0);
|
||||
CHECK(pkt_container != nullptr);
|
||||
|
||||
// === S E C T I O N S == //
|
||||
SECTION("get_empty_packet", "[]") {
|
||||
|
||||
SECTION("default", "[]") {
|
||||
CHECK(pkt_container->get_number_of_polled_packets() == 0);
|
||||
CHECK(pkt_container->get_total_number_of_packets() == 0);
|
||||
|
||||
PacketInfo* pkt_info = pkt_container->get_empty_packet();
|
||||
CHECK(pkt_info != nullptr);
|
||||
CHECK(pkt_info->get_mbuf() != nullptr);
|
||||
CHECK(pkt_info->get_type() == IPv4TCP);
|
||||
|
||||
CHECK(pkt_container->get_total_number_of_packets() >=
|
||||
pkt_container->get_number_of_polled_packets());
|
||||
CHECK(pkt_container->get_total_number_of_packets() == 1);
|
||||
CHECK(pkt_container->get_number_of_polled_packets() == 0);
|
||||
}
|
||||
|
||||
SECTION("IPv4TCP", "[]") {
|
||||
CHECK(pkt_container->get_number_of_polled_packets() == 0);
|
||||
CHECK(pkt_container->get_total_number_of_packets() == 0);
|
||||
|
||||
PacketInfo* pkt_info = pkt_container->get_empty_packet(IPv4TCP);
|
||||
CHECK(pkt_info != nullptr);
|
||||
CHECK(pkt_info->get_mbuf() != nullptr);
|
||||
CHECK(pkt_info->get_type() == IPv4TCP);
|
||||
|
||||
CHECK(pkt_container->get_total_number_of_packets() >=
|
||||
pkt_container->get_number_of_polled_packets());
|
||||
CHECK(pkt_container->get_total_number_of_packets() == 1);
|
||||
CHECK(pkt_container->get_number_of_polled_packets() == 0);
|
||||
}
|
||||
}
|
||||
|
||||
SECTION("create more packets than burst size", "[]") {
|
||||
|
||||
SECTION("fill till BURST_SIZE", "[]") {
|
||||
for (int i = 0; i < BURST_SIZE; ++i) {
|
||||
PacketInfo* pkt_info = pkt_container->get_empty_packet();
|
||||
CHECK(pkt_info != nullptr);
|
||||
}
|
||||
|
||||
CHECK(pkt_container->get_total_number_of_packets() == BURST_SIZE);
|
||||
}
|
||||
|
||||
SECTION("fill till BURST_SIZE + 1", "[]") {
|
||||
for (int i = 0; i < BURST_SIZE + 1; ++i) {
|
||||
PacketInfo* pkt_info = pkt_container->get_empty_packet();
|
||||
CHECK(pkt_info != nullptr);
|
||||
}
|
||||
|
||||
CHECK(pkt_container->get_total_number_of_packets() ==
|
||||
BURST_SIZE + 1);
|
||||
}
|
||||
|
||||
CHECK(pkt_container->get_total_number_of_packets() >=
|
||||
pkt_container->get_number_of_polled_packets());
|
||||
}
|
||||
|
||||
SECTION("get_packet_at_index", "[]") {
|
||||
|
||||
SECTION("general", "[]") {
|
||||
// add empty packet
|
||||
PacketInfo* pkt_info_0 = pkt_container->get_empty_packet();
|
||||
CHECK(pkt_container->get_number_of_polled_packets() == 0);
|
||||
CHECK(pkt_container->get_total_number_of_packets() == 1);
|
||||
|
||||
PacketInfo* pkt_info_1 = pkt_container->get_packet_at_index(
|
||||
pkt_container->get_total_number_of_packets() - 1);
|
||||
CHECK(pkt_info_0 == pkt_info_1);
|
||||
CHECK(pkt_info_1 != nullptr);
|
||||
CHECK(pkt_info_1->get_mbuf() != nullptr);
|
||||
CHECK(pkt_info_1->get_type() == IPv4TCP);
|
||||
|
||||
CHECK(pkt_container->get_total_number_of_packets() >=
|
||||
pkt_container->get_number_of_polled_packets());
|
||||
CHECK_NOTHROW(pkt_container->get_packet_at_index(
|
||||
pkt_container->get_total_number_of_packets() - 1));
|
||||
CHECK_THROWS(pkt_container->get_packet_at_index(
|
||||
pkt_container->get_total_number_of_packets()));
|
||||
}
|
||||
|
||||
SECTION("test out of bounds error", "[]") {
|
||||
for (int i = 0; i < int(BURST_SIZE / 2); ++i) {
|
||||
pkt_container->get_empty_packet();
|
||||
}
|
||||
|
||||
CHECK(pkt_container->get_total_number_of_packets() ==
|
||||
int(BURST_SIZE / 2));
|
||||
|
||||
for (int i = 0; i < int(BURST_SIZE / 2); ++i) {
|
||||
CHECK_NOTHROW(pkt_container->get_packet_at_index(i));
|
||||
}
|
||||
|
||||
for (int i = int(BURST_SIZE / 2); i < BURST_SIZE; ++i) {
|
||||
CHECK_THROWS(pkt_container->get_packet_at_index(i));
|
||||
}
|
||||
|
||||
CHECK_THROWS(pkt_container->get_packet_at_index(
|
||||
pkt_container->get_total_number_of_packets()));
|
||||
CHECK_NOTHROW(pkt_container->get_packet_at_index(
|
||||
pkt_container->get_total_number_of_packets() - 1));
|
||||
}
|
||||
}
|
||||
|
||||
SECTION("take_packet and add_packet", "[]") {
|
||||
|
||||
PacketInfo* pkt_info_0 = pkt_container->get_empty_packet();
|
||||
CHECK(pkt_container->get_number_of_polled_packets() == 0);
|
||||
CHECK(pkt_container->get_total_number_of_packets() == 1);
|
||||
|
||||
PacketInfo* pkt_info_1 = pkt_container->take_packet(0);
|
||||
CHECK(pkt_info_0 == pkt_info_1);
|
||||
CHECK(pkt_info_1 != nullptr);
|
||||
CHECK(pkt_info_1->get_mbuf() != nullptr);
|
||||
CHECK(pkt_container->get_packet_at_index(0) == nullptr);
|
||||
CHECK(pkt_container->get_total_number_of_packets() == 1);
|
||||
CHECK(pkt_container->get_total_number_of_packets() >=
|
||||
pkt_container->get_number_of_polled_packets());
|
||||
|
||||
pkt_container->add_packet(pkt_info_1);
|
||||
CHECK(pkt_container->get_total_number_of_packets() >=
|
||||
pkt_container->get_number_of_polled_packets());
|
||||
CHECK(pkt_container->get_number_of_polled_packets() == 0);
|
||||
CHECK(pkt_container->get_total_number_of_packets() == 2);
|
||||
CHECK(pkt_container->get_packet_at_index(1) == pkt_info_1);
|
||||
CHECK(pkt_container->get_packet_at_index(0) == nullptr);
|
||||
}
|
||||
|
||||
SECTION("drop_packet", "[]") {
|
||||
|
||||
SECTION("default") {
|
||||
PacketInfo* pkt_info_0 = pkt_container->get_empty_packet();
|
||||
CHECK(pkt_container->get_number_of_polled_packets() == 0);
|
||||
CHECK(pkt_container->get_total_number_of_packets() == 1);
|
||||
|
||||
pkt_container->drop_packet(0);
|
||||
CHECK(pkt_container->get_total_number_of_packets() >=
|
||||
pkt_container->get_number_of_polled_packets());
|
||||
CHECK(pkt_container->get_number_of_polled_packets() == 0);
|
||||
CHECK(pkt_container->get_total_number_of_packets() == 1);
|
||||
CHECK(pkt_container->get_packet_at_index(0) == nullptr);
|
||||
|
||||
CHECK_NOTHROW(pkt_container->drop_packet(0));
|
||||
CHECK(pkt_container->get_number_of_polled_packets() == 0);
|
||||
CHECK(pkt_container->get_total_number_of_packets() == 1);
|
||||
CHECK(pkt_container->get_packet_at_index(0) == nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
SECTION("poll_packets", "[]") {
|
||||
|
||||
CHECK(pkt_container->get_number_of_polled_packets() == 0);
|
||||
CHECK(pkt_container->get_total_number_of_packets() == 0);
|
||||
|
||||
uint16_t nb_pkts_polled;
|
||||
pkt_container->poll_packets(nb_pkts_polled);
|
||||
CHECK(pkt_container->get_number_of_polled_packets() > 0);
|
||||
CHECK(pkt_container->get_total_number_of_packets() ==
|
||||
pkt_container->get_number_of_polled_packets());
|
||||
CHECK(nb_pkts_polled == pkt_container->get_number_of_polled_packets());
|
||||
|
||||
CHECK_NOTHROW(pkt_container->get_packet_at_index(nb_pkts_polled - 1));
|
||||
PacketInfo* pkt_info =
|
||||
pkt_container->get_packet_at_index(nb_pkts_polled - 1);
|
||||
CHECK(pkt_info != nullptr);
|
||||
CHECK(pkt_info->get_mbuf() != nullptr);
|
||||
}
|
||||
|
||||
SECTION("send_packets", "[]") {
|
||||
|
||||
SECTION("do not drop") {
|
||||
SECTION("send created packets") {
|
||||
PacketInfo* pkt_info = pkt_container->get_empty_packet();
|
||||
CHECK(pkt_container->get_number_of_polled_packets() == 0);
|
||||
CHECK(pkt_container->get_total_number_of_packets() == 1);
|
||||
}
|
||||
|
||||
SECTION("send polled packets") {
|
||||
uint16_t nb_polled_pkts;
|
||||
pkt_container->poll_packets(nb_polled_pkts);
|
||||
|
||||
CHECK(nb_polled_pkts > 0);
|
||||
}
|
||||
|
||||
SECTION("send polled and created packets") {
|
||||
uint16_t nb_polled_pkts;
|
||||
pkt_container->poll_packets(nb_polled_pkts);
|
||||
CHECK(nb_polled_pkts > 0);
|
||||
|
||||
PacketInfo* pkt_info = pkt_container->get_empty_packet();
|
||||
CHECK(pkt_container->get_total_number_of_packets() >
|
||||
pkt_container->get_number_of_polled_packets());
|
||||
}
|
||||
|
||||
pkt_container->send_packets();
|
||||
CHECK(pkt_container->get_number_of_polled_packets() == 0);
|
||||
CHECK(pkt_container->get_total_number_of_packets() == 0);
|
||||
}
|
||||
|
||||
SECTION("drop and send created packets") {
|
||||
|
||||
const int PKTS_TO_POLL = 4;
|
||||
int nb_pkts_to_drop = -1;
|
||||
|
||||
for (int i = 0; i < PKTS_TO_POLL; ++i) {
|
||||
pkt_container->get_empty_packet();
|
||||
}
|
||||
|
||||
CHECK(pkt_container->get_total_number_of_packets() >
|
||||
pkt_container->get_number_of_polled_packets());
|
||||
CHECK(pkt_container->get_total_number_of_packets() == PKTS_TO_POLL);
|
||||
|
||||
SECTION("drop first packet") {
|
||||
nb_pkts_to_drop = 1;
|
||||
CHECK(pkt_container->get_nb_mbufs_in_mbuf_arr()[0] ==
|
||||
PKTS_TO_POLL);
|
||||
CHECK(pkt_container->get_nb_pkts_dropped() == 0);
|
||||
pkt_container->drop_packet(0);
|
||||
CHECK(pkt_container->get_nb_pkts_dropped() == 1);
|
||||
}
|
||||
|
||||
SECTION("drop second packet") {
|
||||
nb_pkts_to_drop = 1;
|
||||
CHECK(pkt_container->get_nb_mbufs_in_mbuf_arr()[0] ==
|
||||
PKTS_TO_POLL);
|
||||
CHECK(pkt_container->get_nb_pkts_dropped() == 0);
|
||||
pkt_container->drop_packet(1);
|
||||
CHECK(pkt_container->get_nb_pkts_dropped() == 1);
|
||||
}
|
||||
|
||||
SECTION("drop second and third packet") {
|
||||
nb_pkts_to_drop = 2;
|
||||
CHECK(pkt_container->get_nb_mbufs_in_mbuf_arr()[0] ==
|
||||
PKTS_TO_POLL);
|
||||
CHECK(pkt_container->get_nb_pkts_dropped() == 0);
|
||||
pkt_container->drop_packet(1);
|
||||
pkt_container->drop_packet(2);
|
||||
CHECK(pkt_container->get_nb_pkts_dropped() == 2);
|
||||
}
|
||||
|
||||
SECTION("drop last packet") {
|
||||
nb_pkts_to_drop = 1;
|
||||
CHECK(pkt_container->get_nb_mbufs_in_mbuf_arr()[0] ==
|
||||
PKTS_TO_POLL);
|
||||
CHECK(pkt_container->get_nb_pkts_dropped() == 0);
|
||||
pkt_container->drop_packet(PKTS_TO_POLL - 1);
|
||||
CHECK(pkt_container->get_nb_pkts_dropped() == 1);
|
||||
}
|
||||
|
||||
pkt_container->reorder_mbuf_arrays();
|
||||
CHECK(pkt_container->get_nb_mbufs_in_mbuf_arr()[0] ==
|
||||
PKTS_TO_POLL - nb_pkts_to_drop);
|
||||
|
||||
pkt_container->send_packets();
|
||||
CHECK(pkt_container->get_number_of_polled_packets() == 0);
|
||||
CHECK(pkt_container->get_total_number_of_packets() == 0);
|
||||
}
|
||||
}
|
||||
|
||||
// === D E L E T E O B J E C T S === //
|
||||
delete pkt_container;
|
||||
pkt_container = nullptr;
|
||||
}
|
||||
132
test/PacketDissection/PacketInfo_test.cpp
Normal file
132
test/PacketDissection/PacketInfo_test.cpp
Normal file
@@ -0,0 +1,132 @@
|
||||
#include "ConfigurationManagement/Configurator.hpp"
|
||||
#include "Initializer.hpp"
|
||||
#include "PacketDissection/PacketInfo.hpp"
|
||||
#include "PacketDissection/PacketInfoCreator.hpp"
|
||||
#include "PacketDissection/PacketInfoIpv4Icmp.hpp"
|
||||
#include "PacketDissection/PacketInfoIpv4Tcp.hpp"
|
||||
#include "PacketDissection/PacketInfoIpv4Udp.hpp"
|
||||
#include <catch2/catch.hpp>
|
||||
#include <iostream>
|
||||
|
||||
TEST_CASE("Creation","[]")
|
||||
{
|
||||
|
||||
SECTION("PacketInfo","[]"){
|
||||
PacketInfo pkt_inf;
|
||||
rte_mbuf* mbuf;
|
||||
//REQUIRE_NOTHROW(pkt_inf.set_mbuf(mbuf));
|
||||
//REQUIRE_NOTHROW(nbuf = pkt_inf.get_mbuf());
|
||||
//CHECK(mbuf == nbuf);
|
||||
CHECK(pkt_inf.get_type() == NONE);
|
||||
}
|
||||
|
||||
SECTION("Creation: IPv4ICMP", "[]") {
|
||||
// PacketInfoIpv4Icmp* pkt_inf =
|
||||
// static_cast<PacketInfoIpv4Icmp*>(PacketInfoCreator::create_pkt_info(IPv4ICMP));
|
||||
PacketInfoIpv4Icmp pkt_inf;
|
||||
CHECK(pkt_inf.get_type() == IPv4ICMP);
|
||||
// pkt_inf->set_mbuf(mbuf);
|
||||
// struct rte_ipv4_hdr* ip_hdr = rte_pktmbuf_mtod_offset(mbuf, struct
|
||||
// rte_ipv4_hdr*, 0); REQUIRE_NOTHROW(pkt_inf->set_ip_hdr(ip_hdr));
|
||||
// struct rte_icmp_hdr* l4_header = rte_pktmbuf_mtod_offset(mbuf, struct
|
||||
// rte_icmp_hdr*, 20);
|
||||
// REQUIRE_NOTHROW(pkt_inf->set_icmp_hdr(l4_header)); uint32_t num;
|
||||
// CHECK_NOTHROW(num= pkt_inf->get_dst_ip());
|
||||
// CHECK_NOTHROW(num= pkt_inf->get_src_ip());
|
||||
// CHECK_NOTHROW(num= pkt_inf->get_packet_size());
|
||||
// CHECK_NOTHROW(num= pkt_inf->get_payload_size());
|
||||
}
|
||||
|
||||
SECTION("Creation: IPv4TCP", "[]") {
|
||||
// PacketInfoIpv4Tcp* pkt_inf =
|
||||
// static_cast<PacketInfoIpv4Tcp*>(PacketInfoCreator::create_pkt_info(IPv4TCP));
|
||||
PacketInfoIpv4Tcp pkt_inf;
|
||||
CHECK(pkt_inf.get_type() == IPv4TCP);
|
||||
// pkt_inf->set_mbuf(mbuf);
|
||||
// struct rte_ipv4_hdr* ip_hdr = rte_pktmbuf_mtod_offset(mbuf, struct
|
||||
// rte_ipv4_hdr*, 0); REQUIRE_NOTHROW(pkt_inf->set_ip_hdr(ip_hdr));
|
||||
// struct rte_tcp_hdr* l4_header = rte_pktmbuf_mtod_offset(mbuf, struct
|
||||
// rte_tcp_hdr*, 20); REQUIRE_NOTHROW(pkt_inf->set_tcp_hdr(l4_header));
|
||||
// uint32_t num;
|
||||
// uint32_t num2;
|
||||
// CHECK_NOTHROW(num= pkt_inf->get_dst_ip());
|
||||
// CHECK_NOTHROW(num= pkt_inf->get_src_ip());
|
||||
// CHECK_NOTHROW(num= pkt_inf->get_packet_size());
|
||||
// CHECK_NOTHROW(num= pkt_inf->get_payload_size());
|
||||
// CHECK_NOTHROW(num= pkt_inf->get_dst_port());
|
||||
// CHECK_NOTHROW(num= pkt_inf->get_src_port());
|
||||
// CHECK_NOTHROW(num= pkt_inf->get_flags());
|
||||
// CHECK_NOTHROW(num= pkt_inf->get_window_size());
|
||||
// CHECK_NOTHROW(pkt_inf->set_ack_num(num));
|
||||
// CHECK_NOTHROW(num2= pkt_inf->get_ack_num());
|
||||
// CHECK(num == num2);
|
||||
// CHECK_NOTHROW(pkt_inf->set_seq_num(num));
|
||||
// CHECK_NOTHROW(num = pkt_inf->get_seq_num());
|
||||
// CHECK(num == num2);
|
||||
}
|
||||
|
||||
SECTION("Creation: IPv4UDP", "[]") {
|
||||
// PacketInfoIpv4Udp* pkt_inf =
|
||||
// static_cast<PacketInfoIpv4Udp*>(PacketInfoCreator::create_pkt_info(IPv4UDP));
|
||||
PacketInfoIpv4Udp pkt_inf;
|
||||
CHECK(pkt_inf.get_type() == IPv4UDP);
|
||||
// pkt_inf->set_mbuf(mbuf);
|
||||
// struct rte_ipv4_hdr* ip_hdr = rte_pktmbuf_mtod_offset(mbuf, struct
|
||||
// rte_ipv4_hdr*, 0); REQUIRE_NOTHROW(pkt_inf->set_ip_hdr(ip_hdr));
|
||||
// struct rte_udp_hdr* l4_header = rte_pktmbuf_mtod_offset(mbuf, struct
|
||||
// rte_udp_hdr*, 20); REQUIRE_NOTHROW(pkt_inf->set_udp_hdr(l4_header));
|
||||
// uint32_t num;
|
||||
// CHECK_NOTHROW(num= pkt_inf->get_dst_ip());
|
||||
// CHECK_NOTHROW(num= pkt_inf->get_src_ip());
|
||||
// CHECK_NOTHROW(num= pkt_inf->get_packet_size());
|
||||
// CHECK_NOTHROW(num= pkt_inf->get_payload_size());
|
||||
// CHECK_NOTHROW(num= pkt_inf->get_dst_port());
|
||||
// CHECK_NOTHROW(num= pkt_inf->get_src_port());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("Transformation", "[]") {
|
||||
|
||||
SECTION("keeping Type", "[]") {
|
||||
PacketInfo* pkt_inf;
|
||||
// pkt_inf = PacketInfoCreator::create_pkt_info(IPv4ICMP);
|
||||
pkt_inf = new PacketInfoIpv4Icmp;
|
||||
PacketInfoIpv4Icmp* pkt_inf_icmp;
|
||||
pkt_inf_icmp = static_cast<PacketInfoIpv4Icmp*>(pkt_inf);
|
||||
CHECK(pkt_inf_icmp->get_type() == IPv4ICMP);
|
||||
|
||||
// PacketInfoCreator::create_pkt_info(IPv4TCP)
|
||||
pkt_inf = new PacketInfoIpv4Tcp;
|
||||
PacketInfoIpv4Tcp* pkt_inf_tcp;
|
||||
pkt_inf_tcp = static_cast<PacketInfoIpv4Tcp*>(pkt_inf);
|
||||
CHECK(pkt_inf_tcp->get_type() == IPv4TCP);
|
||||
|
||||
// PacketInfoCreator::create_pkt_info(IPv4UDP)
|
||||
pkt_inf = new PacketInfoIpv4Udp;
|
||||
PacketInfoIpv4Udp* pkt_inf_udp;
|
||||
pkt_inf_udp = static_cast<PacketInfoIpv4Udp*>(pkt_inf);
|
||||
CHECK(pkt_inf_udp->get_type() == IPv4UDP);
|
||||
|
||||
// PacketInfoCreator::create_pkt_info(NONE)
|
||||
pkt_inf = new PacketInfo;
|
||||
CHECK(pkt_inf->get_type() == NONE);
|
||||
|
||||
PacketInfo* pkt_inf_arr[5];
|
||||
pkt_inf_arr[0] = pkt_inf_icmp;
|
||||
pkt_inf_arr[1] = pkt_inf_tcp;
|
||||
pkt_inf_arr[2] = pkt_inf_udp;
|
||||
pkt_inf_arr[3] = pkt_inf;
|
||||
CHECK(pkt_inf_arr[0]->get_type() == IPv4ICMP);
|
||||
CHECK(pkt_inf_arr[1]->get_type() == IPv4TCP);
|
||||
CHECK(pkt_inf_arr[2]->get_type() == IPv4UDP);
|
||||
CHECK(pkt_inf_arr[3]->get_type() == NONE);
|
||||
|
||||
// clean up
|
||||
delete pkt_inf;
|
||||
delete pkt_inf_icmp;
|
||||
delete pkt_inf_tcp;
|
||||
delete pkt_inf_udp;
|
||||
delete pkt_inf_arr;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user