write testmain

This commit is contained in:
stubbfel
2017-05-27 01:33:17 +02:00
parent 008f67e1f1
commit d202fdc778
10 changed files with 270 additions and 24 deletions

111
test/src/TestMain.cpp Normal file
View File

@@ -0,0 +1,111 @@
#include "Main_t.h"
#include <fakeit.hpp>
#include <chrono>
#include "pdutypeforwardpackethandler.h"
#include "ArpToNdpPacketHandler.h"
#include "Icmp4ToIcmp6PacketHandler.h"
#include "Icmp6ToIcmp4PacketHandler.h"
#include "Ip4ToIp6PacketHandler.h"
#include "Ip6ToIp4PacketHandler.h"
#include "IpVersionRouter.h"
#include "TinsNetworkInterfaceCard.h"
#include <tins/ip_address.h>
#include <tins/ipv6_address.h>
#include <thread>
#include <json/json.h>
#include <json/value.h>
#include <fstream>
TEST_CASE( "test main setup", "[test_main]" )
{
std::ifstream config_doc("test_config.json", std::ifstream::binary);
Json::Value root;
config_doc >> root;
const Json::Value natpairs = root;
SPtrIPacketHandlerList routerList;
std::vector<std::thread *> threadPool;
for (Json::Value natpair : natpairs)
{
const std::string pairname = natpair["name"].asString();
REQUIRE(pairname == "foo");
const Json::Value natPairItems = natpair["items"];
SPtrTinsNetworkInterfaceCard ipv4Netcard;
SPtrTinsNetworkInterfaceCard ipv6Netcard;
Tins::IPv6Address prefix;
for (Json::Value natPairItem : natPairItems)
{
const std::string itemname = natPairItem["nic-name"].asString();
REQUIRE(itemname == "lo");
const int itemtype = natPairItem["type"].asInt();
bool result = itemtype == 4 || itemtype == 6;
REQUIRE(result);
if (itemtype == 6)
{
REQUIRE(natPairItem["prefix"].asString() == "42::");
}
const std::string netcardName = natPairItem["nic-name"].asString();
SPtrTinsNetworkInterfaceCard netcard = std::make_shared<TinsNetworkInterfaceCard>(netcardName);
switch (itemtype)
{
case 4:
ipv4Netcard = netcard;
break;
case 6:
ipv6Netcard = netcard;
prefix = natPairItem["prefix"].asString();
break;
default:
return;
}
}
SPtrIPacketHandler ip4ToIp6Handler = std::make_shared<Ip4ToIp6PacketHandler>(prefix);
SPtrIPacketHandler ip6ToIp4Handler = std::make_shared<Ip6ToIp4PacketHandler>();
SPtrIPacketHandler icmp4ToIcmp6Handler = std::make_shared<Icmp4ToIcmp6PacketHandler>(prefix);
SPtrIPacketHandler icmp6ToIcmp4Handler = std::make_shared<Icmp6ToIcmp4PacketHandler>();
SPtrIPacketHandler arpToNdpHandler = std::make_shared<ArpToNdpPacketHandler>(prefix);
SPtrIRouter router = std::make_shared<IpVersionRouter>(ipv4Netcard, ipv6Netcard);
SPtrPduTypeForwardPacketHandler nat4to6ForwardHandler = std::make_shared<PduTypeForwardPacketHandler>(router);
nat4to6ForwardHandler->getHandlerQueue().push_back(PduTypeHandlerMapEntry(Tins::PDU::ARP, arpToNdpHandler));
nat4to6ForwardHandler->getHandlerQueue().push_back(PduTypeHandlerMapEntry(Tins::PDU::ICMP, icmp4ToIcmp6Handler));
nat4to6ForwardHandler->getHandlerQueue().push_back(PduTypeHandlerMapEntry(Tins::PDU::IP, ip4ToIp6Handler));
SPtrPduTypeForwardPacketHandler nat6to4ForwardHandler = std::make_shared<PduTypeForwardPacketHandler>(router);
nat6to4ForwardHandler->getHandlerQueue().push_back(PduTypeHandlerMapEntry(Tins::PDU::ICMPv6, icmp6ToIcmp4Handler));
nat6to4ForwardHandler->getHandlerQueue().push_back(PduTypeHandlerMapEntry(Tins::PDU::IPv6, ip6ToIp4Handler));
ipv4Netcard->getHandlerList().push_back(nat4to6ForwardHandler);
ipv6Netcard->getHandlerList().push_back(nat6to4ForwardHandler);
std::thread * ipv4Thread = new std::thread(&TinsNetworkInterfaceCard::startListen, ipv4Netcard.get());
std::thread * ipv6Thread = new std::thread(&TinsNetworkInterfaceCard::startListen, ipv6Netcard.get());
routerList.push_back(router);
threadPool.push_back(ipv4Thread);
threadPool.push_back(ipv6Thread);
}
std::this_thread::sleep_for(std::chrono::seconds(2));
for (SPtrIPacketHandler routerHandle : routerList)
{
IpVersionRouter * versionRouter = dynamic_cast<IpVersionRouter *>(routerHandle.get());
if (versionRouter == nullptr)
{
continue;
}
versionRouter->getIpv4Card().stopListen();
versionRouter->getIpv6Card().stopListen();
}
for (std::thread * ptrThread : threadPool)
{
ptrThread->join();
delete ptrThread;
}
routerList.clear();
threadPool.clear();
}

View File

@@ -37,8 +37,8 @@ namespace TestTinsNetworkInterfaceCard
TEST_CASE( "test send and receive Packet", "[TinsNetworkInterfaceCard_SendRec]" )
{
SPtrTinsNetworkInterfaceCard ptrPacketSender = std::make_shared<TinsNetworkInterfaceCard>();
SPtrTinsNetworkInterfaceCard ptrPacketSniffer = std::make_shared<TinsNetworkInterfaceCard>();
SPtrTinsNetworkInterfaceCard ptrPacketSender = std::make_shared<TinsNetworkInterfaceCard>(Tins::IPv4Address("127.0.0.1"));
SPtrTinsNetworkInterfaceCard ptrPacketSniffer = std::make_shared<TinsNetworkInterfaceCard>(Tins::IPv4Address("127.0.0.1"));
SPtrIPacketHandler sptrMockHandler = std::make_shared<TestTinsNetworkInterfaceCard::MockPacketHandler>();
Mock<IPacketHandler> mockHandler(*sptrMockHandler);
TestTinsNetworkInterfaceCard::foundPduCount = 0;

32
test/src/test_config.json Normal file
View File

@@ -0,0 +1,32 @@
[
{
"name" : "foo",
"items":
[
{
"nic-name": "lo",
"type": 4
},
{
"nic-name": "lo",
"type": 6,
"prefix": "42::"
}
]
},
{
"name" : "foo",
"items":
[
{
"nic-name": "lo",
"type": 4
},
{
"nic-name": "lo",
"type": 6,
"prefix": "42::"
}
]
}
]