blob: e4d289d3d534c93dfb9c4bc9004441177f70dae0 [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>
#include <AMQP_HighestVersion.h>
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:
FramingTest() : buffer(100), v(qpid::framing::highestProtocolVersion){}
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,
FieldTable());
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(highestProtocolVersion, 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(highestProtocolVersion, 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);