diff options
author | Alan Conway <aconway@apache.org> | 2007-01-14 18:30:25 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2007-01-14 18:30:25 +0000 |
commit | 972d4b29d086c803ffc4bee08c8c8eb0f2e788af (patch) | |
tree | be8f8780e1d88a527bff688acdc2851bcaa9da8a /cpp/tests/FramingTest.cpp | |
parent | 7abe972eb67e965bc1ec8d171c4dadba2db5afae (diff) | |
download | qpid-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.cpp | 97 |
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. + + } }; |