blob: daf3df332442983fedc5f7690c4ecd22441078ff [file]
/*
* 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 "OpenwireCmsTemplateTest.h"
#include <integration/IntegrationCommon.h>
#include <decaf/lang/Thread.h>
#include <decaf/util/Properties.h>
#include <activemq/transport/TransportFactory.h>
#include <decaf/util/UUID.h>
#include <decaf/util/Properties.h>
#include <decaf/util/StringTokenizer.h>
#include <activemq/connector/ConnectorFactoryMap.h>
#include <decaf/net/SocketFactory.h>
#include <activemq/transport/TransportFactory.h>
#include <decaf/net/Socket.h>
#include <decaf/lang/exceptions/NullPointerException.h>
#include <activemq/core/ActiveMQConnectionFactory.h>
#include <activemq/core/ActiveMQConnection.h>
#include <activemq/core/ActiveMQConsumer.h>
#include <activemq/core/ActiveMQProducer.h>
#include <decaf/util/StringTokenizer.h>
#include <decaf/lang/Boolean.h>
#include <cms/Connection.h>
#include <cms/MessageConsumer.h>
#include <cms/MessageProducer.h>
#include <cms/MessageListener.h>
#include <cms/Startable.h>
#include <cms/Closeable.h>
#include <cms/MessageListener.h>
#include <cms/ExceptionListener.h>
#include <cms/Topic.h>
#include <cms/Queue.h>
#include <cms/TemporaryTopic.h>
#include <cms/TemporaryQueue.h>
#include <cms/Session.h>
#include <cms/BytesMessage.h>
#include <cms/TextMessage.h>
#include <cms/MapMessage.h>
using namespace activemq::transport;
using namespace std;
using namespace cms;
using namespace activemq;
using namespace activemq::core;
using namespace activemq::connector;
using namespace activemq::exceptions;
using namespace decaf::net;
using namespace activemq::transport;
using namespace decaf::util::concurrent;
using namespace decaf::lang;
using namespace decaf::util;
using namespace integration;
using namespace integration::connector::openwire;
using namespace activemq::cmsutil;
////////////////////////////////////////////////////////////////////////////////
void OpenwireCmsTemplateTest::setUp() {
}
////////////////////////////////////////////////////////////////////////////////
void OpenwireCmsTemplateTest::tearDown() {
}
////////////////////////////////////////////////////////////////////////////////
void OpenwireCmsTemplateTest::testBasics()
{
try {
const unsigned int NUM_MESSAGES = IntegrationCommon::defaultMsgCount;
Receiver receiver( IntegrationCommon::getInstance().getOpenwireURL(),
false,
"testBasics1",
NUM_MESSAGES);
Thread rt(&receiver);
rt.start();
// Wait for receiver thread to start.
decaf::lang::Thread::sleep(100);
Sender sender( IntegrationCommon::getInstance().getOpenwireURL(),
false,
"testBasics1",
NUM_MESSAGES);
Thread st(&sender);
st.start();
st.join();
rt.join();
unsigned int numReceived = receiver.getNumReceived();
if( IntegrationCommon::debug ) {
printf("received: %d\n", numReceived );
}
CPPUNIT_ASSERT(
numReceived == NUM_MESSAGES );
} catch ( ActiveMQException e ) {
e.printStackTrace();
throw e;
}
}
////////////////////////////////////////////////////////////////////////////////
void OpenwireCmsTemplateTest::testReceiveException()
{
try {
// First, try receiving from a bad url
activemq::core::ActiveMQConnectionFactory cf("tcp://localhost:61666"); // Invalid URL (at least by default)
activemq::cmsutil::CmsTemplate cmsTemplate(&cf);
cmsTemplate.setDefaultDestinationName("testReceive1");
try {
cmsTemplate.receive();
CPPUNIT_FAIL("failed to throw expected exception");
}
catch( ActiveMQException& ex) {
// Expected.
}
// Now change to a good url and verify that we can reuse the same
// CmsTemplate successfully.
activemq::core::ActiveMQConnectionFactory cf2(IntegrationCommon::getInstance().getOpenwireURL());
cmsTemplate.setConnectionFactory(&cf2);
// Send 1 message.
Sender sender( IntegrationCommon::getInstance().getOpenwireURL(),
false,
"testReceive1",
1);
Thread st(&sender);
st.start();
st.join();
// Receive the message.
cms::Message* message = cmsTemplate.receive();
CPPUNIT_ASSERT(message != NULL);
delete message;
}
catch ( ActiveMQException e ) {
e.printStackTrace();
throw e;
}
}
////////////////////////////////////////////////////////////////////////////////
void OpenwireCmsTemplateTest::testSendException()
{
try {
// First, try sending to a bad url.
activemq::core::ActiveMQConnectionFactory cf("tcp://localhost:61666"); // Invalid URL (at least by default)
activemq::cmsutil::CmsTemplate cmsTemplate(&cf);
cmsTemplate.setDefaultDestinationName("testSend1");
try {
TextMessageCreator msgCreator("hello world");
cmsTemplate.send(&msgCreator);
CPPUNIT_FAIL("failed to throw expected exception");
}
catch( ActiveMQException& ex) {
// Expected.
}
// Now change to a good url and verify that we can reuse the same
// CmsTemplate successfully.
activemq::core::ActiveMQConnectionFactory cf2(IntegrationCommon::getInstance().getOpenwireURL());
cmsTemplate.setConnectionFactory(&cf2);
TextMessageCreator msgCreator("hello world");
cmsTemplate.send(&msgCreator);
} catch ( ActiveMQException e ) {
e.printStackTrace();
throw e;
}
}