MXS-1461 Add mock RouterSession
This commit is contained in:
@ -0,0 +1,94 @@
|
|||||||
|
#pragma once
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2016 MariaDB Corporation Ab
|
||||||
|
*
|
||||||
|
* Use of this software is governed by the Business Source License included
|
||||||
|
* in the LICENSE.TXT file and at www.mariadb.com/bsl11.
|
||||||
|
*
|
||||||
|
* Change Date: 2020-01-01
|
||||||
|
*
|
||||||
|
* On the date above, in accordance with the Business Source License, use
|
||||||
|
* of this software will be governed by version 2 or later of the General
|
||||||
|
* Public License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <maxscale/cppdefs.hh>
|
||||||
|
#include <memory>
|
||||||
|
#include <deque>
|
||||||
|
#include <maxscale/router.hh>
|
||||||
|
#include "../filtermodule.hh"
|
||||||
|
#include "mock.hh"
|
||||||
|
|
||||||
|
namespace maxscale
|
||||||
|
{
|
||||||
|
|
||||||
|
namespace mock
|
||||||
|
{
|
||||||
|
|
||||||
|
class Backend;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An instance of RouterSession is a router to which a filter forwards
|
||||||
|
* data.
|
||||||
|
*/
|
||||||
|
class RouterSession : private MXS_ROUTER_SESSION
|
||||||
|
{
|
||||||
|
RouterSession(const RouterSession&);
|
||||||
|
RouterSession& operator = (const RouterSession&);
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param pBackend The backend associated with the router.
|
||||||
|
*/
|
||||||
|
RouterSession(Backend* pBackend);
|
||||||
|
~RouterSession();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the router as the downstream filter of a particular filter.
|
||||||
|
* The filter will at the same time become the upstream filter of
|
||||||
|
* this router.
|
||||||
|
*
|
||||||
|
* @param pFilter_session The filter to set this router as downstream
|
||||||
|
* filter of.
|
||||||
|
*/
|
||||||
|
void set_as_downstream_on(FilterModule::Session* pFilter_session);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by the backend to deliver a response.
|
||||||
|
*
|
||||||
|
* @return Whatever the upstream filter returns.
|
||||||
|
*/
|
||||||
|
int32_t clientReply(GWBUF* pResponse);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Causes the router to make its associated backend deliver a response
|
||||||
|
* to this router, which will then deliver it forward to its associated
|
||||||
|
* upstream filter.
|
||||||
|
*
|
||||||
|
* @return True if there are additional responses to deliver.
|
||||||
|
*/
|
||||||
|
bool respond();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Are there responses available.
|
||||||
|
*
|
||||||
|
* @return True, if there are no responses, false otherwise.
|
||||||
|
*/
|
||||||
|
bool idle() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
int32_t routeQuery(MXS_ROUTER* pInstance, GWBUF* pStatement);
|
||||||
|
|
||||||
|
static int32_t routeQuery(MXS_FILTER* pInstance, MXS_FILTER_SESSION* pRouter_session, GWBUF* pStatement);
|
||||||
|
|
||||||
|
private:
|
||||||
|
MXS_ROUTER m_instance;
|
||||||
|
Backend* m_pBackend;
|
||||||
|
FilterModule::Session* m_pUpstream_filter_session;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
80
server/modules/filter/dbfwfilter/test/mock_routersession.cc
Normal file
80
server/modules/filter/dbfwfilter/test/mock_routersession.cc
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016 MariaDB Corporation Ab
|
||||||
|
*
|
||||||
|
* Use of this software is governed by the Business Source License included
|
||||||
|
* in the LICENSE.TXT file and at www.mariadb.com/bsl11.
|
||||||
|
*
|
||||||
|
* Change Date: 2020-01-01
|
||||||
|
*
|
||||||
|
* On the date above, in accordance with the Business Source License, use
|
||||||
|
* of this software will be governed by version 2 or later of the General
|
||||||
|
* Public License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "maxscale/mock/routersession.hh"
|
||||||
|
#include "maxscale/mock/backend.hh"
|
||||||
|
|
||||||
|
namespace maxscale
|
||||||
|
{
|
||||||
|
|
||||||
|
namespace mock
|
||||||
|
{
|
||||||
|
|
||||||
|
RouterSession::RouterSession(Backend* pBackend)
|
||||||
|
: m_pBackend(pBackend)
|
||||||
|
{
|
||||||
|
memset(&m_instance, 0, sizeof(m_instance));
|
||||||
|
}
|
||||||
|
|
||||||
|
RouterSession::~RouterSession()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void RouterSession::set_as_downstream_on(FilterModule::Session* pFilter_session)
|
||||||
|
{
|
||||||
|
MXS_DOWNSTREAM downstream;
|
||||||
|
downstream.instance = reinterpret_cast<MXS_FILTER*>(&m_instance);
|
||||||
|
downstream.session = reinterpret_cast<MXS_FILTER_SESSION*>(this);
|
||||||
|
downstream.routeQuery = &RouterSession::routeQuery;
|
||||||
|
|
||||||
|
pFilter_session->setDownstream(&downstream);
|
||||||
|
|
||||||
|
m_pUpstream_filter_session = pFilter_session;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RouterSession::respond()
|
||||||
|
{
|
||||||
|
return m_pBackend->respond(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RouterSession::idle() const
|
||||||
|
{
|
||||||
|
return m_pBackend->idle(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t RouterSession::routeQuery(MXS_ROUTER* pInstance, GWBUF* pStatement)
|
||||||
|
{
|
||||||
|
ss_dassert(pInstance == &m_instance);
|
||||||
|
|
||||||
|
m_pBackend->handle_statement(this, pStatement);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t RouterSession::clientReply(GWBUF* pResponse)
|
||||||
|
{
|
||||||
|
return m_pUpstream_filter_session->clientReply(pResponse);
|
||||||
|
}
|
||||||
|
|
||||||
|
//static
|
||||||
|
int32_t RouterSession::routeQuery(MXS_FILTER* pInstance,
|
||||||
|
MXS_FILTER_SESSION* pRouter_session,
|
||||||
|
GWBUF* pStatement)
|
||||||
|
{
|
||||||
|
RouterSession* pThis = reinterpret_cast<RouterSession*>(pRouter_session);
|
||||||
|
|
||||||
|
return pThis->routeQuery(reinterpret_cast<MXS_ROUTER*>(pInstance), pStatement);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user