blob: edc62b61873260b453a0377497393eb9b5632b53 [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
#include <ConnectionRedirectBody.h>
#include <ProtocolVersion.h>
#include <amqp_framing.h>
#include <iostream>
#include <qpid_test_plugin.h>
#include <sstream>
#include <typeinfo>
using namespace qpid::framing;
template <class T>
std::string tostring(const T& x)
{
std::ostringstream out;
out << x;
return out.str();
}
class FramingTest : public CppUnit::TestCase
{
CPPUNIT_TEST_SUITE(FramingTest);
CPPUNIT_TEST(testBasicQosBody);
CPPUNIT_TEST(testConnectionSecureBody);
CPPUNIT_TEST(testConnectionRedirectBody);
CPPUNIT_TEST(testAccessRequestBody);
CPPUNIT_TEST(testBasicConsumeBody);
CPPUNIT_TEST(testConnectionRedirectBodyFrame);
CPPUNIT_TEST(testBasicConsumeOkBodyFrame);
CPPUNIT_TEST_SUITE_END();
private:
Buffer buffer;
ProtocolVersion v;
public:
// AMQP version management change - kpvdr 2006-11-17
// TODO: Make this class version-aware and link these hard-wired numbers to that version
FramingTest() : buffer(100), v(8, 0) {}
void testBasicQosBody()
{
BasicQosBody in(v, 0xCAFEBABE, 0xABBA, true);
in.encodeContent(buffer);
buffer.flip();
BasicQosBody out(v);
out.decodeContent(buffer);
CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out));
}
void testConnectionSecureBody()
{
std::string s = "security credential";
ConnectionSecureBody in(v, s);
in.encodeContent(buffer);
buffer.flip();
ConnectionSecureBody out(v);
out.decodeContent(buffer);
CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out));
}
void testConnectionRedirectBody()
{
std::string a = "hostA";
std::string b = "hostB";
ConnectionRedirectBody in(v, a, b);
in.encodeContent(buffer);
buffer.flip();
ConnectionRedirectBody out(v);
out.decodeContent(buffer);
CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out));
}
void testAccessRequestBody()
{
std::string s = "text";
AccessRequestBody in(v, s, true, false, true, false, true);
in.encodeContent(buffer);
buffer.flip();
AccessRequestBody out(v);
out.decodeContent(buffer);
CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out));
}
void testBasicConsumeBody()
{
std::string q = "queue";
std::string t = "tag";
BasicConsumeBody in(v, 0, q, t, false, true, false, false);
in.encodeContent(buffer);
buffer.flip();
BasicConsumeBody out(v);
out.decodeContent(buffer);
CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out));
}
void testConnectionRedirectBodyFrame()
{
std::string a = "hostA";
std::string b = "hostB";
AMQFrame in(999, new ConnectionRedirectBody(v, a, b));
in.encode(buffer);
buffer.flip();
AMQFrame out;
out.decode(buffer);
CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out));
}
void testBasicConsumeOkBodyFrame()
{
std::string s = "hostA";
AMQFrame in(999, new BasicConsumeOkBody(v, s));
in.encode(buffer);
buffer.flip();
AMQFrame out;
for(int i = 0; i < 5; i++){
out.decode(buffer);
CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out));
}
}
};
// Make this test suite a plugin.
CPPUNIT_PLUGIN_IMPLEMENT();
CPPUNIT_TEST_SUITE_REGISTRATION(FramingTest);