add test fo receive and sending packets
This commit is contained in:
90
test/src/TestTinsNetworkCard.cpp
Normal file
90
test/src/TestTinsNetworkCard.cpp
Normal file
@@ -0,0 +1,90 @@
|
||||
#include "fakeit.hpp"
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
#include "tins/ethernetII.h"
|
||||
#include <tins/ip.h>
|
||||
#include <tins/ipv6.h>
|
||||
#include <tins/ip_address.h>
|
||||
#include <tins/ipv6_address.h>
|
||||
#include <tins/tcp.h>
|
||||
#include <tins/sniffer.h>
|
||||
#include "TinsNetworkInterfaceCard.h"
|
||||
|
||||
using namespace fakeit;
|
||||
|
||||
|
||||
namespace TestTinsNetworkInterfaceCard
|
||||
{
|
||||
Tins::PDU * currentInputPdu = nullptr;
|
||||
int foundPduCount;
|
||||
|
||||
struct MockPacketHandler : IPacketHandler
|
||||
{
|
||||
virtual bool handle(IN const Tins::PDU & pdu, IN IPacketHandler * callBackHandler = nullptr) override
|
||||
{
|
||||
const Tins::IP * ip1 = pdu.find_pdu<Tins::IP>();
|
||||
const Tins::IP * ip2 = currentInputPdu->find_pdu<Tins::IP>();
|
||||
if(ip1 != nullptr && (ip1->dst_addr() == ip2->dst_addr()))
|
||||
{
|
||||
foundPduCount++;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
TEST_CASE( "test send and receive Packet", "[TinsNetworkInterfaceCard_SendRec]" )
|
||||
{
|
||||
|
||||
SPtrTinsNetworkInterfaceCard ptrPacketSender = std::make_shared<TinsNetworkInterfaceCard>();
|
||||
SPtrTinsNetworkInterfaceCard ptrPacketSniffer = std::make_shared<TinsNetworkInterfaceCard>();
|
||||
SPtrIPacketHandler sptrMockHandler = std::make_shared<TestTinsNetworkInterfaceCard::MockPacketHandler>();
|
||||
Mock<IPacketHandler> mockHandler(*sptrMockHandler);
|
||||
TestTinsNetworkInterfaceCard::foundPduCount = 0;
|
||||
ptrPacketSniffer->getHandlerList().push_back(sptrMockHandler);
|
||||
Tins::EthernetII pkt = Tins::EthernetII("11:22:33:44:55:66", "66:55:44:33:22:11") / Tins::IP("1.2.3.4", "4.3.2.1") / Tins::TCP();
|
||||
TestTinsNetworkInterfaceCard::currentInputPdu = &pkt;
|
||||
std::thread sniffThread(&TinsNetworkInterfaceCard::startListen, ptrPacketSniffer.get());
|
||||
std::this_thread::sleep_for(std::chrono::seconds(2));
|
||||
ptrPacketSender->sendPacket(pkt);
|
||||
ptrPacketSender->sendPacket(pkt);
|
||||
ptrPacketSender->sendPacket(pkt);
|
||||
std::this_thread::sleep_for(std::chrono::seconds(2));
|
||||
ptrPacketSniffer->stopListen();
|
||||
ptrPacketSender->sendPacket(pkt);
|
||||
ptrPacketSender->sendPacket(pkt);
|
||||
ptrPacketSender->sendPacket(pkt);
|
||||
sniffThread.join();
|
||||
REQUIRE(TestTinsNetworkInterfaceCard::foundPduCount == 3);
|
||||
|
||||
std::thread sniffThread2(&TinsNetworkInterfaceCard::startListen, ptrPacketSniffer.get());
|
||||
std::this_thread::sleep_for(std::chrono::seconds(2));
|
||||
ptrPacketSniffer->sendPacket(pkt);
|
||||
ptrPacketSniffer->sendPacket(pkt);
|
||||
ptrPacketSniffer->sendPacket(pkt);
|
||||
std::this_thread::sleep_for(std::chrono::seconds(2));
|
||||
ptrPacketSniffer->stopListen();
|
||||
ptrPacketSniffer->sendPacket(pkt);
|
||||
ptrPacketSniffer->sendPacket(pkt);
|
||||
ptrPacketSniffer->sendPacket(pkt);
|
||||
sniffThread2.join();
|
||||
REQUIRE(TestTinsNetworkInterfaceCard::foundPduCount == 3);
|
||||
|
||||
std::thread sniffThread3(&TinsNetworkInterfaceCard::startListen, ptrPacketSniffer.get());
|
||||
std::this_thread::sleep_for(std::chrono::seconds(2));
|
||||
ptrPacketSniffer->sendPacket(pkt);
|
||||
ptrPacketSender->sendPacket(pkt);
|
||||
ptrPacketSniffer->sendPacket(pkt);
|
||||
std::this_thread::sleep_for(std::chrono::seconds(2));
|
||||
ptrPacketSniffer->stopListen();
|
||||
sniffThread3.join();
|
||||
REQUIRE(TestTinsNetworkInterfaceCard::foundPduCount == 4);
|
||||
/*REQUIRE(handler.handle(pkt, nullptr) == false);
|
||||
REQUIRE(handler.handle(pkt, &mockHandler.get()) == true);
|
||||
Verify(Method(mockHandler, handle)).Once();
|
||||
|
||||
pkt = Tins::EthernetII("11:22:33:44:55:66", "66:55:44:33:22:11") / Tins::IP("1.2.3.4", "4.3.2.1") / Tins::TCP();
|
||||
REQUIRE(handler.handle(pkt, &mockHandler.get()) == true);
|
||||
Verify(Method(mockHandler, handle)).Twice();*/
|
||||
}
|
||||
Reference in New Issue
Block a user