summaryrefslogtreecommitdiff
path: root/cpp/tests/FramingTest.cpp
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2007-01-14 18:30:25 +0000
committerAlan Conway <aconway@apache.org>2007-01-14 18:30:25 +0000
commit972d4b29d086c803ffc4bee08c8c8eb0f2e788af (patch)
treebe8f8780e1d88a527bff688acdc2851bcaa9da8a /cpp/tests/FramingTest.cpp
parent7abe972eb67e965bc1ec8d171c4dadba2db5afae (diff)
downloadqpid-python-972d4b29d086c803ffc4bee08c8c8eb0f2e788af.tar.gz
* Added Requester/Responder classes to manage request-ids, response-ids,
and response-mark. Response batches not yet supported. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/qpid.0-9@496110 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/tests/FramingTest.cpp')
-rw-r--r--cpp/tests/FramingTest.cpp97
1 files changed, 96 insertions, 1 deletions
diff --git a/cpp/tests/FramingTest.cpp b/cpp/tests/FramingTest.cpp
index 5b90d9c288..dc895506c9 100644
--- a/cpp/tests/FramingTest.cpp
+++ b/cpp/tests/FramingTest.cpp
@@ -28,7 +28,8 @@
#include <AMQP_HighestVersion.h>
#include "AMQRequestBody.h"
#include "AMQResponseBody.h"
-
+#include "Requester.h"
+#include "Responder.h"
using namespace qpid::framing;
@@ -52,6 +53,8 @@ class FramingTest : public CppUnit::TestCase
CPPUNIT_TEST(testBasicConsumeOkBodyFrame);
CPPUNIT_TEST(testRequestBodyFrame);
CPPUNIT_TEST(testResponseBodyFrame);
+ CPPUNIT_TEST(testRequester);
+ CPPUNIT_TEST(testResponder);
CPPUNIT_TEST_SUITE_END();
private:
@@ -171,6 +174,98 @@ class FramingTest : public CppUnit::TestCase
dynamic_cast<ChannelOkBody*>(out.getBody().get());
CPPUNIT_ASSERT(decoded);
}
+
+ void testRequester() {
+ Requester r;
+ AMQRequestBody::Data q;
+ AMQResponseBody::Data p;
+
+ r.sending(q);
+ CPPUNIT_ASSERT_EQUAL(1ULL, q.requestId);
+ CPPUNIT_ASSERT_EQUAL(0ULL, q.responseMark);
+
+ r.sending(q);
+ CPPUNIT_ASSERT_EQUAL(2ULL, q.requestId);
+ CPPUNIT_ASSERT_EQUAL(0ULL, q.responseMark);
+
+ // Now process a response
+ p.responseId = 1;
+ p.requestId = 2;
+ r.processed(AMQResponseBody::Data(1, 2));
+
+ r.sending(q);
+ CPPUNIT_ASSERT_EQUAL(3ULL, q.requestId);
+ CPPUNIT_ASSERT_EQUAL(1ULL, q.responseMark);
+
+ try {
+ r.processed(p); // Already processed this response.
+ CPPUNIT_FAIL("Expected exception");
+ } catch (...) {}
+
+ try {
+ p.requestId = 50;
+ r.processed(p); // No such request
+ CPPUNIT_FAIL("Expected exception");
+ } catch (...) {}
+
+ r.sending(q); // reqId=4
+ r.sending(q); // reqId=5
+ r.sending(q); // reqId=6
+ p.responseId++;
+ p.requestId = 4;
+ p.batchOffset = 2;
+ r.processed(p);
+ r.sending(q);
+ CPPUNIT_ASSERT_EQUAL(7ULL, q.requestId);
+ CPPUNIT_ASSERT_EQUAL(2ULL, q.responseMark);
+
+ p.responseId++;
+ p.requestId = 1; // Out of order
+ p.batchOffset = 0;
+ r.processed(p);
+ r.sending(q);
+ CPPUNIT_ASSERT_EQUAL(8ULL, q.requestId);
+ CPPUNIT_ASSERT_EQUAL(3ULL, q.responseMark);
+ }
+
+ void testResponder() {
+ Responder r;
+ AMQRequestBody::Data q;
+ AMQResponseBody::Data p;
+
+ q.requestId = 1;
+ q.responseMark = 0;
+ r.received(q);
+ r.sending(p, q.requestId);
+ CPPUNIT_ASSERT_EQUAL(1ULL, p.responseId);
+ CPPUNIT_ASSERT_EQUAL(1ULL, p.requestId);
+ CPPUNIT_ASSERT_EQUAL(0U, p.batchOffset);
+ CPPUNIT_ASSERT_EQUAL(0ULL, r.getResponseMark());
+
+ q.requestId++;
+ q.responseMark = 1;
+ r.received(q);
+ r.sending(p, q.requestId);
+ CPPUNIT_ASSERT_EQUAL(2ULL, p.responseId);
+ CPPUNIT_ASSERT_EQUAL(2ULL, p.requestId);
+ CPPUNIT_ASSERT_EQUAL(0U, p.batchOffset);
+ CPPUNIT_ASSERT_EQUAL(1ULL, r.getResponseMark());
+
+ try {
+ // Response mark higher any request ID sent.
+ q.responseMark = 3;
+ r.received(q);
+ } catch(...) {}
+
+ try {
+ // Response mark lower than previous response mark.
+ q.responseMark = 0;
+ r.received(q);
+ } catch(...) {}
+
+ // TODO aconway 2007-01-14: Test for batching when supported.
+
+ }
};