From 131d57e80818362ffa19c08331602ec9d42404f1 Mon Sep 17 00:00:00 2001 From: stubbfel Date: Fri, 24 Mar 2017 19:59:55 +0100 Subject: [PATCH] add ForwardHandler --- src/ForwardPacketHandler.cpp | 17 +++++++++ src/ForwardPacketHandler.h | 19 ++++++++++ test/src/TestForwardPacketHandler.cpp | 50 +++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 src/ForwardPacketHandler.cpp create mode 100644 src/ForwardPacketHandler.h create mode 100644 test/src/TestForwardPacketHandler.cpp diff --git a/src/ForwardPacketHandler.cpp b/src/ForwardPacketHandler.cpp new file mode 100644 index 0000000..5b68216 --- /dev/null +++ b/src/ForwardPacketHandler.cpp @@ -0,0 +1,17 @@ +#include "ForwardPacketHandler.h" + +ForwardPacketHandler::ForwardPacketHandler(SPtrIPacketHandler forwardToHandler, SPtrIPacketHandler forwardToCallBackHandler) +{ + targetHandler = forwardToHandler; + targetCallBackHandler = forwardToCallBackHandler; +} + +ForwardPacketHandler::~ForwardPacketHandler() +{ + //dtor +} + +bool ForwardPacketHandler::handle(const Tins::PDU &pdu, IPacketHandler * /*callBackHandler */) +{ + return targetHandler->handle(pdu, targetCallBackHandler.get()); +} diff --git a/src/ForwardPacketHandler.h b/src/ForwardPacketHandler.h new file mode 100644 index 0000000..0d8619b --- /dev/null +++ b/src/ForwardPacketHandler.h @@ -0,0 +1,19 @@ +#ifndef FORWARDPACKETHANDLER_H +#define FORWARDPACKETHANDLER_H + +#include "AbstractPacketHandler.h" + +class ForwardPacketHandler : public AbstractPacketHandler +{ +public: + + ForwardPacketHandler(SPtrIPacketHandler forwardToHandler, SPtrIPacketHandler forwardToCallBackHandler); + virtual ~ForwardPacketHandler(); + + virtual bool handle(IN const Tins::PDU & pdu, IN IPacketHandler * callBackHandler = nullptr) override; + +private: + SPtrIPacketHandler targetCallBackHandler; + SPtrIPacketHandler targetHandler; +}; +#endif diff --git a/test/src/TestForwardPacketHandler.cpp b/test/src/TestForwardPacketHandler.cpp new file mode 100644 index 0000000..3a8697e --- /dev/null +++ b/test/src/TestForwardPacketHandler.cpp @@ -0,0 +1,50 @@ +#include "fakeit.hpp" +#include "IPacketHandler.h" +#include "ForwardPacketHandler.h" +#include "tins/ethernetII.h" + +using namespace fakeit; + +namespace TestForwardPacketHandler +{ + IPacketHandler * ptrTargetCallback = nullptr; + class MockForwardIPacketHandler : public IPacketHandler + { + public: + int callCount = 0; + virtual bool handle(IN const Tins::PDU & pdu, IN IPacketHandler * callBackHandler) override + { + callCount++; + REQUIRE(ptrTargetCallback != nullptr); + REQUIRE(ptrTargetCallback == callBackHandler); + return callBackHandler->handle(pdu, nullptr); + } + }; + + + class MockForwardCallBackIPacketHandler : public IPacketHandler + { + public: + int callCount = 0; + virtual bool handle(IN const Tins::PDU & pdu, IN IPacketHandler * callBackHandler) override + { + callCount++; + return true; + } + }; +} + +TEST_CASE( "test ForwardPacketHandler", "[ForwardPacketHandler]" ) +{ + SPtrIPacketHandler sptrTargetCallBackHandler = std::make_shared(); + TestForwardPacketHandler::ptrTargetCallback = sptrTargetCallBackHandler.get(); + SPtrIPacketHandler sptrTargetHandler = std::make_shared(); + Mock mockCallCallbackHandler; + Fake(Method(mockCallCallbackHandler, handle)); + SPtrIPacketHandler sptrForwardHandler = std::make_shared(sptrTargetHandler, sptrTargetCallBackHandler); + Tins::EthernetII pkt = Tins::EthernetII("11:22:33:44:55:66", "66:55:44:33:22:11"); + REQUIRE(sptrForwardHandler->handle(pkt, &mockCallCallbackHandler.get()) == true); + Verify(Method(mockCallCallbackHandler, handle)).Never(); + REQUIRE(((TestForwardPacketHandler::MockForwardCallBackIPacketHandler *)sptrTargetCallBackHandler.get())->callCount == 1); + REQUIRE(((TestForwardPacketHandler::MockForwardIPacketHandler *)sptrTargetHandler.get())->callCount == 1); +}