17#ifndef INCLUDED_BMQA_MOCKSESSION
18#define INCLUDED_BMQA_MOCKSESSION
564#include <bdlb_variant.h>
565#include <bdlbb_blob.h>
566#include <bdlbb_pooledblobbufferfactory.h>
567#include <bdlcc_sharedobjectpool.h>
568#include <bsl_cstddef.h>
569#include <bsl_deque.h>
570#include <bsl_functional.h>
571#include <bsl_memory.h>
572#include <bsl_string.h>
573#include <bsl_unordered_map.h>
574#include <bsl_unordered_set.h>
575#include <bsl_vector.h>
576#include <bslma_allocator.h>
577#include <bslma_managedptr.h>
578#include <bslma_usesbslmaallocator.h>
579#include <bslmf_nestedtraitdeclaration.h>
580#include <bslmt_mutex.h>
581#include <bsls_alignedbuffer.h>
582#include <bsls_assert.h>
583#include <bsls_timeinterval.h>
584#include <bsls_types.h>
593class MessageCorrelationIdContainer;
605class ConfirmEventBuilder;
608#define BMQA_EXPECT_CALL(OBJ, CALL) \
609 (((OBJ).expect_##CALL).fromLocation(__FILE__, __LINE__))
621 typedef bdlcc::SharedObjectPool<
623 bdlcc::ObjectPoolFunctors::DefaultCreator,
624 bdlcc::ObjectPoolFunctors::RemoveAll<bdlbb::Blob> >
629 typedef bsl::shared_ptr<bmqimp::Event> EventImplSp;
633 typedef bsl::shared_ptr<bmqimp::Queue> QueueImplSp;
698 bdlbb::BlobBufferFactory* bufferFactory,
699 bslma::Allocator* allocator);
707 bdlbb::BlobBufferFactory* bufferFactory,
708 bslma::Allocator* allocator);
720 const bslstl::StringRef& errorDescription,
721 bslma::Allocator* allocator);
731 const bslstl::StringRef& errorDescription,
732 bslma::Allocator* allocator);
740 const bsl::string& errorDescription,
741 bslma::Allocator* allocator = 0);
749 const bsl::string& errorDescription,
750 bslma::Allocator* allocator = 0);
758 const bsl::string& errorDescription,
759 bslma::Allocator* allocator = 0);
801 typedef bsl::function<
802 void(
const char* description,
const char* file,
int line)>
807 BALL_LOG_SET_CLASS_CATEGORY(
"BMQA.MOCKSESSION");
816 static const int k_MAX_SIZEOF_BMQC_TWOKEYHASHMAP = 256;
821 typedef bdlcc::SharedObjectPool<
823 bdlcc::ObjectPoolFunctors::DefaultCreator,
824 bdlcc::ObjectPoolFunctors::RemoveAll<bdlbb::Blob> >
828 typedef bsl::shared_ptr<BlobSpPool> BlobSpPoolSp;
831 typedef bsls::AlignedBuffer<k_MAX_SIZEOF_BMQC_TWOKEYHASHMAP>
835 typedef bsl::shared_ptr<bmqimp::Queue> QueueImplSp;
838 typedef bsl::shared_ptr<bmqimp::Event> EventImplSp;
841 typedef bsl::shared_ptr<bmqimp::Stat> StatImplSp;
844 typedef bsl::shared_ptr<bmqimp::MessageCorrelationIdContainer>
845 CorrelationIdContainerSp;
847 typedef bsl::function<void()> CallbackFn;
855 CallbackFn d_callback;
868 typedef bdlb::Variant<Event, Job> EventOrJob;
881 e_OPEN_QUEUE_ASYNC_CALLBACK,
885 e_CLOSE_QUEUE_ASYNC_CALLBACK,
887 e_CONFIGURE_QUEUE_SYNC,
888 e_CONFIGURE_QUEUE_ASYNC,
889 e_CONFIGURE_QUEUE_ASYNC_CALLBACK,
900 typedef bsl::vector<EventOrJob> EventsAndJobs;
920 bsls::Types::Uint64 d_flags;
926 bsls::TimeInterval d_timeout;
950 EventsAndJobs d_emittedEvents;
956 MessageEvent d_messageEvent;
959 MessageConfirmationCookie d_cookie;
962 bslma::Allocator* d_allocator_p;
965 BSLMF_NESTED_TRAIT_DECLARATION(Call, bslma::UsesBslmaAllocator)
971 Call(Method method, bslma::Allocator* allocator);
973 Call(
const Call& other, bslma::Allocator* allocator);
981 Call& fromLocation(
const char* file,
int line);
985 Call& returning(
int rc);
1004 Call& returning(
const Event& event);
1008 Call& emitting(
const Event& event);
1013 Call& emitting(
const OpenQueueStatus& openQueueResult);
1018 Call& emitting(
const ConfigureQueueStatus& configureQueueResutl);
1023 Call& emitting(
const CloseQueueStatus& closeQueueResult);
1028 const char* methodName()
const;
1032 typedef bsl::deque<Call> CallQueue;
1035 typedef bsl::deque<bmqa::MessageEvent> PostedEvents;
1040 bdlbb::PooledBlobBufferFactory d_blobBufferFactory;
1043 BlobSpPoolSp d_blobSpPool_sp;
1046 bslma::ManagedPtr<SessionEventHandler> d_eventHandler_mp;
1049 mutable CallQueue d_calls;
1052 mutable bsl::deque<EventOrJob> d_eventsAndJobs;
1055 bsl::unordered_set<bmqt::MessageGUID> d_unconfirmedGUIDs;
1058 TwoKeyHashMapBuffer d_twoKeyHashMapBuffer;
1068 CorrelationIdContainerSp d_corrIdContainer_sp;
1071 PostedEvents d_postedEvents;
1074 mutable bslmt::Mutex d_mutex;
1077 bslma::ManagedPtr<bmqst::StatContext> d_rootStatContext_mp;
1080 StatImplSp d_queuesStats_sp;
1083 bmqt::SessionOptions d_sessionOptions;
1086 bslma::Allocator* d_allocator_p;
1092 static const char* toAscii(
const Method method);
1097 void initializeStats();
1106 void openQueueImp(QueueId* queueId,
1107 const bmqt::QueueOptions& options,
1108 const bmqt::Uri& uri,
1109 bsls::Types::Uint64 flags,
1115 void processIfQueueEvent(Event* event);
1120 void processIfQueueJob(Job* job);
1124 void processIfPushEvent(
const Event& event);
1130 void assertWrongCall(
const Method method)
const;
1134 void assertWrongCall(
const Method method,
const Call& expectedCall)
const;
1140 template <
class T,
class U>
1141 void assertWrongArg(
const T& expected,
1143 const Method method,
1145 const Call& call)
const;
1149 BSLMF_NESTED_TRAIT_DECLARATION(MockSession, bslma::UsesBslmaAllocator)
1159 const bmqt::SessionOptions& options = bmqt::SessionOptions(),
1160 bslma::Allocator* allocator = 0);
1169 const bmqt::SessionOptions& options = bmqt::SessionOptions(),
1170 bslma::Allocator* allocator = 0);
1193 const bsls::TimeInterval& timeout = bsls::TimeInterval());
1199 const bmqt::Uri& uri,
1200 bsls::Types::Uint64 flags,
1201 const bmqt::QueueOptions& options = bmqt::QueueOptions(),
1202 const bsls::TimeInterval& timeout = bsls::TimeInterval());
1205 const bmqt::Uri& uri,
1206 bsls::Types::Uint64 flags,
1207 const bmqt::QueueOptions& options = bmqt::QueueOptions(),
1208 const bsls::TimeInterval& timeout = bsls::TimeInterval());
1212 const bmqt::Uri& uri,
1213 bsls::Types::Uint64 flags,
1214 const bmqt::QueueOptions& options = bmqt::QueueOptions(),
1215 const bsls::TimeInterval& timeout = bsls::TimeInterval());
1218 const bmqt::Uri& uri,
1219 bsls::Types::Uint64 flags,
1221 const bmqt::QueueOptions& options = bmqt::QueueOptions(),
1222 const bsls::TimeInterval& timeout = bsls::TimeInterval());
1226 const bsls::TimeInterval& timeout = bsls::TimeInterval());
1229 const bsls::TimeInterval& timeout = bsls::TimeInterval());
1233 const bsls::TimeInterval& timeout = bsls::TimeInterval());
1237 const bsls::TimeInterval& timeout = bsls::TimeInterval());
1240 const bmqt::QueueOptions& options = bmqt::QueueOptions(),
1241 const bsls::TimeInterval& timeout = bsls::TimeInterval());
1244 const bmqt::QueueOptions& options = bmqt::QueueOptions(),
1245 const bsls::TimeInterval& timeout = bsls::TimeInterval());
1248 const bmqt::QueueOptions& options = bmqt::QueueOptions(),
1249 const bsls::TimeInterval& timeout = bsls::TimeInterval());
1253 const bmqt::QueueOptions& options,
1255 const bsls::TimeInterval& timeout = bsls::TimeInterval());
1272 int start(const bsls::TimeInterval& timeout = bsls::TimeInterval())
1273 BSLS_KEYWORD_OVERRIDE;
1279 int startAsync(const bsls::TimeInterval& timeout = bsls::TimeInterval())
1280 BSLS_KEYWORD_OVERRIDE;
1297 BSLS_KEYWORD_OVERRIDE;
1302 BSLS_KEYWORD_OVERRIDE;
1315 const bmqt::Uri& uri) BSLS_KEYWORD_OVERRIDE;
1320 BSLS_KEYWORD_OVERRIDE;
1326 const bmqt::Uri& uri,
1327 bsls::Types::Uint64 flags,
1328 const bmqt::QueueOptions& options = bmqt::QueueOptions(),
1329 const bsls::TimeInterval& timeout = bsls::TimeInterval())
1330 BSLS_KEYWORD_OVERRIDE;
1342 const bmqt::Uri& uri,
1343 bsls::Types::Uint64 flags,
1344 const bmqt::QueueOptions& options = bmqt::QueueOptions(),
1345 const bsls::TimeInterval& timeout = bsls::TimeInterval())
1346 BSLS_KEYWORD_OVERRIDE;
1353 const bmqt::Uri& uri,
1354 bsls::Types::Uint64 flags,
1355 const bmqt::QueueOptions& options = bmqt::QueueOptions(),
1356 const bsls::TimeInterval& timeout = bsls::TimeInterval())
1357 BSLS_KEYWORD_OVERRIDE;
1377 const bmqt::Uri& uri,
1378 bsls::Types::Uint64 flags,
1380 const bmqt::QueueOptions& options = bmqt::QueueOptions(),
1381 const bsls::TimeInterval& timeout = bsls::TimeInterval())
1382 BSLS_KEYWORD_OVERRIDE;
1389 const bmqt::QueueOptions& options = bmqt::QueueOptions(),
1390 const bsls::TimeInterval& timeout = bsls::TimeInterval())
1391 BSLS_KEYWORD_OVERRIDE;
1398 const bmqt::QueueOptions& options,
1399 const bsls::TimeInterval& timeout)
1400 BSLS_KEYWORD_OVERRIDE;
1407 const bmqt::QueueOptions& options = bmqt::QueueOptions(),
1408 const bsls::TimeInterval& timeout = bsls::TimeInterval())
1409 BSLS_KEYWORD_OVERRIDE;
1420 const bmqt::QueueOptions& options,
1422 const bsls::TimeInterval& timeout =
1423 bsls::TimeInterval()) BSLS_KEYWORD_OVERRIDE;
1429 const bsls::TimeInterval& timeout = bsls::TimeInterval())
1430 BSLS_KEYWORD_OVERRIDE;
1439 const bsls::TimeInterval& timeout = bsls::TimeInterval())
1440 BSLS_KEYWORD_OVERRIDE;
1446 const bsls::TimeInterval& timeout =
1447 bsls::TimeInterval()) BSLS_KEYWORD_OVERRIDE;
1458 const bsls::TimeInterval& timeout =
1459 bsls::TimeInterval()) BSLS_KEYWORD_OVERRIDE;
1468 BSLS_KEYWORD_OVERRIDE;
1478 BSLS_KEYWORD_OVERRIDE;
1486 BSLS_KEYWORD_OVERRIDE;
1517 d_failureCb = failureCb;
1522 return d_unconfirmedGUIDs.size();
1530 bslmt::LockGuard<bslmt::Mutex> guard(&d_mutex);
1532 if (d_postedEvents.empty()) {
1536 *
event = d_postedEvents.front();
1537 d_postedEvents.pop_front();
Provide a pure protocol for a BlazingMQ session.
Provide Value-Semantic Type for a close queue operation status.
Provide a builder for bmqa::MessageEvent objects.
Provide Value-Semantic Type for an open queue operation status.
Provide a value-semantic efficient identifier for a queue.
Provide access to the BlazingMQ broker.
Provide a value-semantic type for options related to a queue.
Provide a value-semantic type to configure session with the broker.
A pure protocol for a session.
Definition bmqa_abstractsession.h:50
bsl::function< void(const bmqa::CloseQueueStatus &result)> CloseQueueCallback
Definition bmqa_abstractsession.h:73
bsl::function< void(const bmqa::ConfigureQueueStatus &result)> ConfigureQueueCallback
Definition bmqa_abstractsession.h:66
bsl::function< void(const bmqa::OpenQueueStatus &result)> OpenQueueCallback
Definition bmqa_abstractsession.h:59
Definition bmqa_closequeuestatus.h:62
Mechanism to build a batch of CONFIRM messages.
Definition bmqa_confirmeventbuilder.h:157
A variant type encompassing all types of events.
Definition bmqa_event.h:69
Cookie for async message confirmation.
Definition bmqa_message.h:137
A builder for MessageEvent objects.
Definition bmqa_messageeventbuilder.h:319
Definition bmqa_messageevent.h:64
Provide a VST representing message properties.
Definition bmqa_messageproperties.h:94
A message sent/received to/from the BlazingMQ broker.
Definition bmqa_message.h:176
Mechanism to mock a bmqa::Session
Definition bmqa_mocksession.h:767
void loadMessageProperties(MessageProperties *buffer) BSLS_KEYWORD_OVERRIDE
int confirmMessages(ConfirmEventBuilder *builder) BSLS_KEYWORD_OVERRIDE
size_t unconfirmedMessages() const
Definition bmqa_mocksession.h:1520
void finalizeStop() BSLS_KEYWORD_OVERRIDE
void setFailureCallback(const FailureCb &failureCb)
Definition bmqa_mocksession.h:1515
Call & expect_start(const bsls::TimeInterval &timeout=bsls::TimeInterval())
int closeQueueAsync(QueueId *queueId, const bsls::TimeInterval &timeout=bsls::TimeInterval()) BSLS_KEYWORD_OVERRIDE
int configureQueue(QueueId *queueId, const bmqt::QueueOptions &options=bmqt::QueueOptions(), const bsls::TimeInterval &timeout=bsls::TimeInterval()) BSLS_KEYWORD_OVERRIDE
Call & expect_closeQueueSync(QueueId *queueId, const bsls::TimeInterval &timeout=bsls::TimeInterval())
static void initialize(bslma::Allocator *allocator=0)
void stopAsync() BSLS_KEYWORD_OVERRIDE
int getQueueId(QueueId *queueId, const bmqt::Uri &uri) BSLS_KEYWORD_OVERRIDE
int openQueueAsync(QueueId *queueId, const bmqt::Uri &uri, bsls::Types::Uint64 flags, const bmqt::QueueOptions &options=bmqt::QueueOptions(), const bsls::TimeInterval &timeout=bsls::TimeInterval()) BSLS_KEYWORD_OVERRIDE
int startAsync(const bsls::TimeInterval &timeout=bsls::TimeInterval()) BSLS_KEYWORD_OVERRIDE
Call & expect_closeQueueAsync(QueueId *queueId, const bsls::TimeInterval &timeout=bsls::TimeInterval())
bool popPostedEvent(bmqa::MessageEvent *event)
Definition bmqa_mocksession.h:1525
Call & expect_nextEvent(const bsls::TimeInterval &timeout=bsls::TimeInterval())
Call & expect_configureQueueAsync(QueueId *queueId, const bmqt::QueueOptions &options=bmqt::QueueOptions(), const bsls::TimeInterval &timeout=bsls::TimeInterval())
Call & expect_closeQueue(QueueId *queueId, const bsls::TimeInterval &timeout=bsls::TimeInterval())
Call & expect_finalizeStop()
CloseQueueStatus closeQueueSync(QueueId *queueId, const bsls::TimeInterval &timeout=bsls::TimeInterval()) BSLS_KEYWORD_OVERRIDE
int confirmMessage(const Message &message) BSLS_KEYWORD_OVERRIDE
Call & expect_openQueueSync(QueueId *queueId, const bmqt::Uri &uri, bsls::Types::Uint64 flags, const bmqt::QueueOptions &options=bmqt::QueueOptions(), const bsls::TimeInterval &timeout=bsls::TimeInterval())
Call & expect_confirmMessage(const Message &message)
void stop() BSLS_KEYWORD_OVERRIDE
Call & expect_openQueueAsync(QueueId *queueId, const bmqt::Uri &uri, bsls::Types::Uint64 flags, const bmqt::QueueOptions &options=bmqt::QueueOptions(), const bsls::TimeInterval &timeout=bsls::TimeInterval())
OpenQueueStatus openQueueSync(QueueId *queueId, const bmqt::Uri &uri, bsls::Types::Uint64 flags, const bmqt::QueueOptions &options=bmqt::QueueOptions(), const bsls::TimeInterval &timeout=bsls::TimeInterval()) BSLS_KEYWORD_OVERRIDE
void loadConfirmEventBuilder(ConfirmEventBuilder *builder) BSLS_KEYWORD_OVERRIDE
Call & expect_post(const MessageEvent &messageEvent)
Call & expect_confirmMessages(ConfirmEventBuilder *builder)
int configureQueueAsync(QueueId *queueId, const bmqt::QueueOptions &options=bmqt::QueueOptions(), const bsls::TimeInterval &timeout=bsls::TimeInterval()) BSLS_KEYWORD_OVERRIDE
Call & expect_configureQueueSync(QueueId *queueId, const bmqt::QueueOptions &options=bmqt::QueueOptions(), const bsls::TimeInterval &timeout=bsls::TimeInterval())
void loadMessageEventBuilder(MessageEventBuilder *builder) BSLS_KEYWORD_OVERRIDE
int start(const bsls::TimeInterval &timeout=bsls::TimeInterval()) BSLS_KEYWORD_OVERRIDE
Call & expect_openQueue(QueueId *queueId, const bmqt::Uri &uri, bsls::Types::Uint64 flags, const bmqt::QueueOptions &options=bmqt::QueueOptions(), const bsls::TimeInterval &timeout=bsls::TimeInterval())
int closeQueue(QueueId *queueId, const bsls::TimeInterval &timeout=bsls::TimeInterval()) BSLS_KEYWORD_OVERRIDE
Call & expect_stopAsync()
ConfigureQueueStatus configureQueueSync(QueueId *queueId, const bmqt::QueueOptions &options, const bsls::TimeInterval &timeout) BSLS_KEYWORD_OVERRIDE
Event nextEvent(const bsls::TimeInterval &timeout=bsls::TimeInterval()) BSLS_KEYWORD_OVERRIDE
void enqueueEvent(const bmqa::Event &event)
bool emitEvent(int numEvents=1)
bsl::function< void(const char *description, const char *file, int line)> FailureCb
Definition bmqa_mocksession.h:803
int openQueue(QueueId *queueId, const bmqt::Uri &uri, bsls::Types::Uint64 flags, const bmqt::QueueOptions &options=bmqt::QueueOptions(), const bsls::TimeInterval &timeout=bsls::TimeInterval()) BSLS_KEYWORD_OVERRIDE
int configureMessageDumping(const bslstl::StringRef &command) BSLS_KEYWORD_OVERRIDE
int post(const MessageEvent &messageEvent) BSLS_KEYWORD_OVERRIDE
Call & expect_configureQueue(QueueId *queueId, const bmqt::QueueOptions &options=bmqt::QueueOptions(), const bsls::TimeInterval &timeout=bsls::TimeInterval())
Call & expect_startAsync(const bsls::TimeInterval &timeout=bsls::TimeInterval())
Definition bmqa_openqueuestatus.h:62
Value-semantic efficient identifier for a queue.
Definition bmqa_queueid.h:59
Definition bmqa_session.h:611
Definition bmqt_correlationid.h:193
Definition bmqt_messageguid.h:96
Value-semantic type for options related to a queue.
Definition bmqt_queueoptions.h:67
Value semantic type representing a URI.
Definition bmqt_uri.h:157
Definition bmqa_abstractsession.h:42
Struct representing parameters for an ack message.
Definition bmqa_mocksession.h:639
QueueId d_queueId
QueueId for message being referred to.
Definition bmqa_mocksession.h:652
bmqt::MessageGUID d_guid
Message GUID of confirmed message.
Definition bmqa_mocksession.h:649
bmqt::CorrelationId d_correlationId
CorrelationId.
Definition bmqa_mocksession.h:646
AckParams(const bmqt::AckResult::Enum status, const bmqt::CorrelationId &correlationId, const bmqt::MessageGUID &guid, const bmqa::QueueId &queueId)
bmqt::AckResult::Enum d_status
Status code.
Definition bmqa_mocksession.h:643
Struct representing parameters for a push message.
Definition bmqa_mocksession.h:667
MessageProperties d_properties
Optionally specified properties for message.
Definition bmqa_mocksession.h:680
PushMessageParams(const bdlbb::Blob &payload, const bmqa::QueueId &queueId, const bmqt::MessageGUID &guid, const MessageProperties &properties)
QueueId d_queueId
QueueId for this message.
Definition bmqa_mocksession.h:674
bdlbb::Blob d_payload
Payload of message.
Definition bmqa_mocksession.h:671
bmqt::MessageGUID d_guid
GUID for message.
Definition bmqa_mocksession.h:677
Utility methods to create bmqa events.
Definition bmqa_mocksession.h:616
static Event createSessionEvent(bmqt::SessionEventType::Enum sessionEventType, const bmqt::CorrelationId &correlationId, const int errorCode, const bslstl::StringRef &errorDescription, bslma::Allocator *allocator)
static CloseQueueStatus createCloseQueueStatus(const QueueId &queueId, bmqt::CloseQueueResult::Enum statusCode, const bsl::string &errorDescription, bslma::Allocator *allocator=0)
static OpenQueueStatus createOpenQueueStatus(const QueueId &queueId, bmqt::OpenQueueResult::Enum statusCode, const bsl::string &errorDescription, bslma::Allocator *allocator=0)
static Event createAckEvent(const bsl::vector< AckParams > &acks, bdlbb::BlobBufferFactory *bufferFactory, bslma::Allocator *allocator)
static ConfigureQueueStatus createConfigureQueueStatus(const QueueId &queueId, bmqt::ConfigureQueueResult::Enum statusCode, const bsl::string &errorDescription, bslma::Allocator *allocator=0)
static Event createQueueSessionEvent(bmqt::SessionEventType::Enum sessionEventType, QueueId *queueId, const bmqt::CorrelationId &correlationId, int errorCode, const bslstl::StringRef &errorDescription, bslma::Allocator *allocator)
static Event createPushEvent(const bsl::vector< PushMessageParams > &pushEventParams, bdlbb::BlobBufferFactory *bufferFactory, bslma::Allocator *allocator)
Enum
Definition bmqt_resultcode.h:437
Enum
Definition bmqt_resultcode.h:287
Enum
Definition bmqt_resultcode.h:137
Enum
Definition bmqt_sessioneventtype.h:116