You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by tr...@apache.org on 2010/03/30 23:35:13 UTC
svn commit: r929307 [3/5] - in /qpid/branches/qmf-devel0.7a: ./ qpid/
qpid/cpp/bindings/qmf/python/ qpid/cpp/bindings/qmf/ruby/
qpid/cpp/bindings/qmf/tests/ qpid/cpp/examples/messaging/
qpid/cpp/examples/tradedemo/ qpid/cpp/include/qmf/engine/ qpid/cpp...
Modified: qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/MessagingSessionTests.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/MessagingSessionTests.cpp?rev=929307&r1=929306&r2=929307&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/MessagingSessionTests.cpp (original)
+++ qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/MessagingSessionTests.cpp Tue Mar 30 21:35:08 2010
@@ -48,6 +48,7 @@ namespace tests {
QPID_AUTO_TEST_SUITE(MessagingSessionTests)
using namespace qpid::messaging;
+using namespace qpid::types;
using namespace qpid;
using qpid::broker::Broker;
using qpid::framing::Uuid;
@@ -130,7 +131,7 @@ struct MessagingFixture : public BrokerF
Message out(Uuid(true).str());
s.send(out);
Message in;
- BOOST_CHECK(r.fetch(in, 5*DURATION_SEC));
+ BOOST_CHECK(r.fetch(in, 5*Duration::SECOND));
BOOST_CHECK_EQUAL(out.getContent(), in.getContent());
r.close();
s.close();
@@ -196,7 +197,7 @@ struct MultiQueueFixture : MessagingFixt
}
};
-std::vector<std::string> fetch(Receiver& receiver, int count, Duration timeout=DURATION_SEC*5)
+std::vector<std::string> fetch(Receiver& receiver, int count, Duration timeout=Duration::SECOND*5)
{
std::vector<std::string> data;
Message message;
@@ -215,7 +216,7 @@ void send(Sender& sender, uint count = 1
}
void receive(Receiver& receiver, uint count = 1, uint start = 1,
- const std::string& base = "Message", Duration timeout=DURATION_SEC*5)
+ const std::string& base = "Message", Duration timeout=Duration::SECOND*5)
{
for (uint i = start; i < start + count; ++i) {
BOOST_CHECK_EQUAL(receiver.fetch(timeout).getContent(), (boost::format("%1%_%2%") % base % i).str());
@@ -229,7 +230,7 @@ QPID_AUTO_TEST_CASE(testSimpleSendReceiv
Message out("test-message");
sender.send(out);
Receiver receiver = fix.session.createReceiver(fix.queue);
- Message in = receiver.fetch(5 * DURATION_SEC);
+ Message in = receiver.fetch(Duration::SECOND * 5);
fix.session.acknowledge();
BOOST_CHECK_EQUAL(in.getContent(), out.getContent());
}
@@ -240,15 +241,15 @@ QPID_AUTO_TEST_CASE(testSendReceiveHeade
Sender sender = fix.session.createSender(fix.queue);
Message out("test-message");
for (uint i = 0; i < 10; ++i) {
- out.getHeaders()["a"] = i;
+ out.getProperties()["a"] = i;
sender.send(out);
}
Receiver receiver = fix.session.createReceiver(fix.queue);
Message in;
for (uint i = 0; i < 10; ++i) {
- BOOST_CHECK(receiver.fetch(in, 5 * DURATION_SEC));
+ BOOST_CHECK(receiver.fetch(in, Duration::SECOND * 5));
BOOST_CHECK_EQUAL(in.getContent(), out.getContent());
- BOOST_CHECK_EQUAL(in.getHeaders()["a"].asUint32(), i);
+ BOOST_CHECK_EQUAL(in.getProperties()["a"].asUint32(), i);
fix.session.acknowledge();
}
}
@@ -300,7 +301,7 @@ QPID_AUTO_TEST_CASE(testSimpleTopic)
BOOST_CHECK_EQUAL(fetch(sub1, 4), boost::assign::list_of<std::string>("two")("three")("four")("five"));
BOOST_CHECK_EQUAL(fetch(sub3, 2), boost::assign::list_of<std::string>("four")("five"));
Message in;
- BOOST_CHECK(!sub2.fetch(in, 0));//TODO: or should this raise an error?
+ BOOST_CHECK(!sub2.fetch(in, Duration::IMMEDIATE));//TODO: or should this raise an error?
//TODO: check pending messages...
@@ -323,7 +324,7 @@ QPID_AUTO_TEST_CASE(testNextReceiver)
for (uint i = 0; i < fix.queues.size(); i++) {
Message msg;
- BOOST_CHECK(fix.session.nextReceiver().fetch(msg, DURATION_SEC));
+ BOOST_CHECK(fix.session.nextReceiver().fetch(msg, Duration::SECOND));
BOOST_CHECK_EQUAL(msg.getContent(), (boost::format("Message_%1%") % (i+1)).str());
}
}
@@ -345,7 +346,7 @@ QPID_AUTO_TEST_CASE(testMapMessage)
content.encode();
sender.send(out);
Receiver receiver = fix.session.createReceiver(fix.queue);
- Message in = receiver.fetch(5 * DURATION_SEC);
+ Message in = receiver.fetch(5 * Duration::SECOND);
MapView view(in);
BOOST_CHECK_EQUAL(view["abc"].asString(), "def");
BOOST_CHECK_EQUAL(view["pi"].asFloat(), 3.14f);
@@ -368,7 +369,7 @@ QPID_AUTO_TEST_CASE(testMapMessageWithIn
content.encode();
sender.send(out);
Receiver receiver = fix.session.createReceiver(fix.queue);
- Message in = receiver.fetch(5 * DURATION_SEC);
+ Message in = receiver.fetch(5 * Duration::SECOND);
MapView view(in);
BOOST_CHECK_EQUAL(view["abc"].asString(), "def");
BOOST_CHECK_EQUAL(view["pi"].asFloat(), 3.14f);
@@ -388,7 +389,7 @@ QPID_AUTO_TEST_CASE(testListMessage)
content.encode();
sender.send(out);
Receiver receiver = fix.session.createReceiver(fix.queue);
- Message in = receiver.fetch(5 * DURATION_SEC);
+ Message in = receiver.fetch(5 * Duration::SECOND);
ListView view(in);
BOOST_CHECK_EQUAL(view.size(), content.size());
BOOST_CHECK_EQUAL(view.front().asString(), "abc");
@@ -422,7 +423,7 @@ QPID_AUTO_TEST_CASE(testListMessageWithI
content.encode();
sender.send(out);
Receiver receiver = fix.session.createReceiver(fix.queue);
- Message in = receiver.fetch(5 * DURATION_SEC);
+ Message in = receiver.fetch(5 * Duration::SECOND);
ListView view(in);
BOOST_CHECK_EQUAL(view.size(), content.size());
BOOST_CHECK_EQUAL(view.front().asString(), "abc");
@@ -451,10 +452,10 @@ QPID_AUTO_TEST_CASE(testReject)
Message m2("accept-me");
sender.send(m2);
Receiver receiver = fix.session.createReceiver(fix.queue);
- Message in = receiver.fetch(5 * DURATION_SEC);
+ Message in = receiver.fetch(5 * Duration::SECOND);
BOOST_CHECK_EQUAL(in.getContent(), m1.getContent());
fix.session.reject(in);
- in = receiver.fetch(5 * DURATION_SEC);
+ in = receiver.fetch(5 * Duration::SECOND);
BOOST_CHECK_EQUAL(in.getContent(), m2.getContent());
fix.session.acknowledge();
}
@@ -833,17 +834,17 @@ QPID_AUTO_TEST_CASE(testTx)
send(sender2, 5, 1, "B");
ssn2.commit();
receive(receiver1, 5, 1, "B");//(only those from sender2 should be received)
- BOOST_CHECK(!receiver1.fetch(in, 0));//check there are no more messages
+ BOOST_CHECK(!receiver1.fetch(in, Duration::IMMEDIATE));//check there are no more messages
ssn1.rollback();
receive(receiver2, 5, 1, "B");
- BOOST_CHECK(!receiver2.fetch(in, 0));//check there are no more messages
+ BOOST_CHECK(!receiver2.fetch(in, Duration::IMMEDIATE));//check there are no more messages
ssn2.rollback();
receive(receiver1, 5, 1, "B");
- BOOST_CHECK(!receiver1.fetch(in, 0));//check there are no more messages
+ BOOST_CHECK(!receiver1.fetch(in, Duration::IMMEDIATE));//check there are no more messages
ssn1.commit();
//check neither receiver gets any more messages:
- BOOST_CHECK(!receiver1.fetch(in, 0));
- BOOST_CHECK(!receiver2.fetch(in, 0));
+ BOOST_CHECK(!receiver1.fetch(in, Duration::IMMEDIATE));
+ BOOST_CHECK(!receiver2.fetch(in, Duration::IMMEDIATE));
}
QPID_AUTO_TEST_SUITE_END()
Modified: qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/Uuid.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/Uuid.cpp?rev=929307&r1=929306&r2=929307&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/Uuid.cpp (original)
+++ qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/Uuid.cpp Tue Mar 30 21:35:08 2010
@@ -18,7 +18,7 @@
#include "qpid/framing/Uuid.h"
#include "qpid/framing/Buffer.h"
-#include "qpid/messaging/Uuid.h"
+#include "qpid/types/Uuid.h"
#include "qpid/sys/alloca.h"
#include "unit_test.h"
@@ -80,15 +80,15 @@ QPID_AUTO_TEST_CASE(testUuidEncodeDecode
string(decoded.begin(), decoded.end()));
}
-QPID_AUTO_TEST_CASE(testMessagingUuid)
+QPID_AUTO_TEST_CASE(testTypesUuid)
{
- //tests for the Uuid class in the messaging namespace (introduced
+ //tests for the Uuid class in the types namespace (introduced
//to avoid pulling in dependencies from framing)
- messaging::Uuid a;
- messaging::Uuid b(true);
- messaging::Uuid c(true);
- messaging::Uuid d(b);
- messaging::Uuid e;
+ types::Uuid a;
+ types::Uuid b(true);
+ types::Uuid c(true);
+ types::Uuid d(b);
+ types::Uuid e;
e = c;
BOOST_CHECK(!a);
Modified: qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/Variant.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/Variant.cpp?rev=929307&r1=929306&r2=929307&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/Variant.cpp (original)
+++ qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/Variant.cpp Tue Mar 30 21:35:08 2010
@@ -19,11 +19,11 @@
*
*/
#include <iostream>
-#include "qpid/messaging/Variant.h"
+#include "qpid/types/Variant.h"
#include "unit_test.h"
-using namespace qpid::messaging;
+using namespace qpid::types;
namespace qpid {
namespace tests {
Propchange: qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/cluster_tests.py
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 30 21:35:08 2010
@@ -1 +1 @@
-/qpid/trunk/qpid/cpp/src/tests/cluster_tests.py:919043-928107
+/qpid/trunk/qpid/cpp/src/tests/cluster_tests.py:919043-929244
Modified: qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/qpid_recv.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/qpid_recv.cpp?rev=929307&r1=929306&r2=929307&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/qpid_recv.cpp (original)
+++ qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/qpid_recv.cpp Tue Mar 30 21:35:08 2010
@@ -34,6 +34,7 @@
#include <memory>
using namespace qpid::messaging;
+using namespace qpid::types;
using qpid::client::amqp0_10::FailoverUpdates;
using namespace std;
@@ -95,8 +96,8 @@ struct Options : public qpid::Options
Duration getTimeout()
{
- if (forever) return INFINITE_DURATION;
- else return timeout*DURATION_SEC;
+ if (forever) return Duration::FOREVER;
+ else return Duration::SECOND*timeout;
}
bool parse(int argc, char** argv)
@@ -130,7 +131,7 @@ class SequenceTracker
bool isDuplicate(Message& message)
{
- uint sn = message.getHeaders()["sn"];
+ uint sn = message.getProperties()["sn"];
if (lastSn < sn) {
lastSn = sn;
return false;
@@ -172,10 +173,10 @@ int main(int argc, char ** argv)
if (msg.getReplyTo()) std::cout << "ReplyTo: " << msg.getReplyTo() << std::endl;
if (msg.getCorrelationId().size()) std::cout << "CorrelationId: " << msg.getCorrelationId() << std::endl;
if (msg.getUserId().size()) std::cout << "UserId: " << msg.getUserId() << std::endl;
- if (msg.getTtl()) std::cout << "TTL: " << msg.getTtl() << std::endl;
+ if (msg.getTtl().getMilliseconds()) std::cout << "TTL: " << msg.getTtl().getMilliseconds() << std::endl;
if (msg.getDurable()) std::cout << "Durable: true" << std::endl;
- if (msg.isRedelivered()) std::cout << "Redelivered: true" << std::endl;
- std::cout << "Headers: " << msg.getHeaders() << std::endl;
+ if (msg.getRedelivered()) std::cout << "Redelivered: true" << std::endl;
+ std::cout << "Properties: " << msg.getProperties() << std::endl;
std::cout << std::endl;
}
std::cout << msg.getContent() << std::endl;//TODO: handle map or list messages
Modified: qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/qpid_send.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/qpid_send.cpp?rev=929307&r1=929306&r2=929307&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/qpid_send.cpp (original)
+++ qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/qpid_send.cpp Tue Mar 30 21:35:08 2010
@@ -33,6 +33,7 @@
#include <memory>
using namespace qpid::messaging;
+using namespace qpid::types;
using qpid::client::amqp0_10::FailoverUpdates;
typedef std::vector<std::string> string_vector;
@@ -144,9 +145,9 @@ struct Options : public qpid::Options
std::string name;
std::string value;
if (nameval(property, name, value)) {
- message.getHeaders()[name] = value;
+ message.getProperties()[name] = value;
} else {
- message.getHeaders()[name] = Variant();
+ message.getProperties()[name] = Variant();
}
}
@@ -191,7 +192,7 @@ int main(int argc, char ** argv)
Message msg;
msg.setDurable(opts.durable);
if (opts.ttl) {
- msg.setTtl(opts.ttl);
+ msg.setTtl(Duration(opts.ttl));
}
if (!opts.replyto.empty()) msg.setReplyTo(Address(opts.replyto));
if (!opts.userid.empty()) msg.setUserId(opts.userid);
@@ -202,7 +203,7 @@ int main(int argc, char ** argv)
uint txCount = 0;
while (getline(std::cin, content)) {
msg.setContent(content);
- msg.getHeaders()["sn"] = ++sent;
+ msg.getProperties()["sn"] = ++sent;
sender.send(msg);
if (opts.tx && (sent % opts.tx == 0)) {
if (opts.rollbackFrequency && (++txCount % opts.rollbackFrequency == 0)) {
@@ -213,7 +214,7 @@ int main(int argc, char ** argv)
}
}
for (uint i = opts.sendEos; i > 0; --i) {
- msg.getHeaders()["sn"] = ++sent;
+ msg.getProperties()["sn"] = ++sent;
msg.setContent(EOS);//TODO: add in ability to send digest or similar
sender.send(msg);
}
Modified: qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/qpid_stream.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/qpid_stream.cpp?rev=929307&r1=929306&r2=929307&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/qpid_stream.cpp (original)
+++ qpid/branches/qmf-devel0.7a/qpid/cpp/src/tests/qpid_stream.cpp Tue Mar 30 21:35:08 2010
@@ -32,6 +32,7 @@
#include <string>
using namespace qpid::messaging;
+using namespace qpid::types;
namespace qpid {
namespace tests {
@@ -118,7 +119,7 @@ struct Publish : Client
qpid::sys::AbsTime start = qpid::sys::now();
while (true) {
qpid::sys::AbsTime sentAt = qpid::sys::now();
- msg.getHeaders()[TIMESTAMP] = timestamp(sentAt);
+ msg.getProperties()[TIMESTAMP] = timestamp(sentAt);
sender.send(msg);
++sent;
qpid::sys::AbsTime waitTill(start, sent*interval);
@@ -150,7 +151,7 @@ struct Consume : Client
}
//calculate latency
uint64_t receivedAt = timestamp(qpid::sys::now());
- uint64_t sentAt = msg.getHeaders()[TIMESTAMP].asUint64();
+ uint64_t sentAt = msg.getProperties()[TIMESTAMP].asUint64();
double latency = ((double) (receivedAt - sentAt)) / qpid::sys::TIME_MSEC;
//update avg, min & max
Propchange: qpid/branches/qmf-devel0.7a/qpid/dotnet/build-msbuild.bat
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 30 21:35:08 2010
@@ -1 +1 @@
-/qpid/trunk/qpid/dotnet/build-msbuild.bat:919043-928107
+/qpid/trunk/qpid/dotnet/build-msbuild.bat:919043-929244
Propchange: qpid/branches/qmf-devel0.7a/qpid/dotnet/build-nant-release
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 30 21:35:08 2010
@@ -1 +1 @@
-/qpid/trunk/qpid/dotnet/build-nant-release:919043-928107
+/qpid/trunk/qpid/dotnet/build-nant-release:919043-929244
Propchange: qpid/branches/qmf-devel0.7a/qpid/dotnet/build-nant.bat
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 30 21:35:08 2010
@@ -1 +1 @@
-/qpid/trunk/qpid/dotnet/build-nant.bat:919043-928107
+/qpid/trunk/qpid/dotnet/build-nant.bat:919043-929244
Modified: qpid/branches/qmf-devel0.7a/qpid/extras/qmf/src/py/qmf/console.py
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/extras/qmf/src/py/qmf/console.py?rev=929307&r1=929306&r2=929307&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/extras/qmf/src/py/qmf/console.py (original)
+++ qpid/branches/qmf-devel0.7a/qpid/extras/qmf/src/py/qmf/console.py Tue Mar 30 21:35:08 2010
@@ -988,15 +988,7 @@ class Session:
data = Object(self, broker, schema, codec, True, True, False)
else:
data = self._decodeValue(codec, inner_type_code, broker)
- elif typecode == 21: # List
- #taken from codec10.read_list
- sc = Codec(codec.read_vbin32())
- count = sc.read_uint32()
- data = []
- while count > 0:
- type = sc.read_uint8()
- data.append(self._decodeValue(sc,type,broker))
- count -= 1
+ elif typecode == 21: data = codec.read_list() # List
elif typecode == 22: #Array
#taken from codec10.read_array
sc = Codec(codec.read_vbin32())
@@ -1032,14 +1024,7 @@ class Session:
elif typecode == 19: codec.write_int64 (int(value)) # S64
elif typecode == 20: value._encodeUnmanaged(codec) # OBJECT
elif typecode == 15: codec.write_map (value) # FTABLE
- elif typecode == 21: # List
- sc = Codec()
- self._encodeValue(sc, len(value), 3)
- for o in value:
- ltype=self.encoding(o)
- self._encodeValue(sc,ltype,1)
- self._encodeValue(sc, o, ltype)
- codec.write_vbin32(sc.encoded)
+ elif typecode == 21: codec.write_list (value) # List
elif typecode == 22: # Array
sc = Codec()
self._encodeValue(sc, len(value), 3)
@@ -1635,7 +1620,7 @@ class ObjectId:
else:
first = constructor.read_uint64()
second = constructor.read_uint64()
- self.agentName = str((first & 0x000000000FFFFFFF) >> 28)
+ self.agentName = str(first & 0x000000000FFFFFFF)
self.agentEpoch = (first & 0x0FFF000000000000) >> 48
self.objectName = str(second)
@@ -2008,7 +1993,7 @@ class Broker:
raise
def _updateAgent(self, obj):
- bankKey = obj.agentBank
+ bankKey = str(obj.agentBank)
agent = None
if obj._deleteTime == 0:
try:
@@ -2166,6 +2151,12 @@ class Broker:
self.cv.release()
def _v1Cb(self, msg):
+ try:
+ self._v1CbProtected(msg)
+ except Exception, e:
+ print "EXCEPTION in Broker._v1Cb:", e
+
+ def _v1CbProtected(self, msg):
"""
This is the general message handler for messages received via the QMFv1 exchanges.
"""
@@ -2187,7 +2178,7 @@ class Broker:
items = rkey.split('.')
if len(items) >= 4:
if items[0] == 'console' and items[3].isdigit():
- agent_addr = int(items[3]) # The QMFv1 Agent Bank
+ agent_addr = str(items[3]) # The QMFv1 Agent Bank
if agent_addr != None and agent_addr in self.agents:
agent = self.agents[agent_addr]
@@ -2286,7 +2277,7 @@ class Agent:
self.session = broker.session
self.schemaCache = self.session.schemaCache
self.brokerBank = broker.getBrokerBank()
- self.agentBank = agentBank
+ self.agentBank = str(agentBank)
self.label = label
self.isV2 = isV2
self.heartbeatInterval = interval
@@ -2310,9 +2301,12 @@ class Agent:
if 'qmf_object' in kwargs:
if self.session.console:
self.session.console.objectProps(self.broker, kwargs['qmf_object'])
- if 'qmf_object_stats' in kwargs:
+ elif 'qmf_object_stats' in kwargs:
if self.session.console:
self.session.console.objectStats(self.broker, kwargs['qmf_object_stats'])
+ elif 'qmf_event' in kwargs:
+ if self.session.console:
+ self.session.console.event(self.broker, kwargs['qmf_event'])
def touch(self):
@@ -2521,7 +2515,8 @@ class Agent:
"""
Handle a QMFv1 event indication
"""
- pass
+ event = Event(self, codec)
+ self.unsolicitedContext.doEvent(event)
def _v1HandleContentInd(self, codec, sequence, prop=False, stat=False):
@@ -2808,6 +2803,11 @@ class RequestContext(object):
self.rawQueryResults.append(data)
+ def doEvent(self, data):
+ if self.notifiable:
+ self.notifiable(qmf_event=data)
+
+
def setException(self, ex):
self.exception = ex
@@ -2942,18 +2942,19 @@ class RequestContext(object):
#===================================================================================================
class Event:
""" """
- def __init__(self, session, broker, codec):
- self.session = session
- self.broker = broker
+ def __init__(self, agent, codec):
+ self.agent = agent
+ self.session = agent.session
+ self.broker = agent.broker
self.classKey = ClassKey(codec)
self.timestamp = codec.read_int64()
self.severity = codec.read_uint8()
- self.schema = session.schemaCache.getSchema(self.classKey)
+ self.arguments = {}
+ self.schema = self.session.schemaCache.getSchema(self.classKey)
if not self.schema:
return
- self.arguments = {}
for arg in self.schema.arguments:
- self.arguments[arg.name] = session._decodeValue(codec, arg.type, broker)
+ self.arguments[arg.name] = self.session._decodeValue(codec, arg.type, self.broker)
def __repr__(self):
if self.schema == None:
Propchange: qpid/branches/qmf-devel0.7a/qpid/java/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 30 21:35:08 2010
@@ -3,4 +3,4 @@
/qpid/branches/java-broker-0-10/qpid/java:795950-829653
/qpid/branches/java-network-refactor/qpid/java:805429-821809
/qpid/trunk/qpid:796646-796653
-/qpid/trunk/qpid/java:919043-928107
+/qpid/trunk/qpid/java:919043-929244
Propchange: qpid/branches/qmf-devel0.7a/qpid/java/broker/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 30 21:35:08 2010
@@ -2,4 +2,4 @@
/qpid/branches/java-broker-0-10/qpid/java/broker:795950-829653
/qpid/branches/java-network-refactor/qpid/java/broker:805429-821809
/qpid/branches/jmx_mc_gsoc09/qpid/java/broker:787599
-/qpid/trunk/qpid/java/broker:742626,743015,743028-743029,743304,743306,743311,743357,744113,747363,747367,747369-747370,747376,747783,747868-747870,747875,748561,748591,748641,748680,748686,749149,749282,749285,749315,749340,749572,753219-753220,753253,754934,754958,755256,757258,757270,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790,919043-928107
+/qpid/trunk/qpid/java/broker:742626,743015,743028-743029,743304,743306,743311,743357,744113,747363,747367,747369-747370,747376,747783,747868-747870,747875,748561,748591,748641,748680,748686,749149,749282,749285,749315,749340,749572,753219-753220,753253,754934,754958,755256,757258,757270,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790,919043-929244
Propchange: qpid/branches/qmf-devel0.7a/qpid/java/broker/bin/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 30 21:35:08 2010
@@ -1,4 +1,4 @@
/qpid/branches/0.5-release/qpid/java/broker/bin:757268
/qpid/branches/java-broker-0-10/qpid/java/broker/bin:795950-829653
/qpid/branches/java-network-refactor/qpid/java/broker/bin:805429-821809
-/qpid/trunk/qpid/java/broker/bin:753219-753220,753253,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790,919043-928107
+/qpid/trunk/qpid/java/broker/bin:753219-753220,753253,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790,919043-929244
Modified: qpid/branches/qmf-devel0.7a/qpid/java/broker/build.xml
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/java/broker/build.xml?rev=929307&r1=929306&r2=929307&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/java/broker/build.xml (original)
+++ qpid/branches/qmf-devel0.7a/qpid/java/broker/build.xml Tue Mar 30 21:35:08 2010
@@ -52,7 +52,7 @@
<mkdir dir="${velocity.compile.dir}" />
<!-- Compile LogMessages Velocity Generator -->
<javac source="${java.source}" target="${java.target}"
- destdir="${velocity.compile.dir}" debug="on"
+ destdir="${velocity.compile.dir}" debug="on" includeantruntime="false"
deprecation="${javac.deprecation}"
srcdir="src/velocity/java" >
<classpath>
Modified: qpid/branches/qmf-devel0.7a/qpid/java/broker/etc/config.xml
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/java/broker/etc/config.xml?rev=929307&r1=929306&r2=929307&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/java/broker/etc/config.xml (original)
+++ qpid/branches/qmf-devel0.7a/qpid/java/broker/etc/config.xml Tue Mar 30 21:35:08 2010
@@ -23,6 +23,7 @@
<prefix>${QPID_HOME}</prefix>
<work>${QPID_WORK}</work>
<conf>${prefix}/etc</conf>
+
<connector>
<!-- To enable SSL edit the keystorePath and keystorePassword
and set enabled to true.
@@ -92,145 +93,8 @@
</jmx>
</security>
- <virtualhosts>
-
- <default>test</default>
- <virtualhost>
- <name>localhost</name>
- <localhost>
- <store>
- <class>org.apache.qpid.server.store.MemoryMessageStore
- </class>
- </store>
-
- <housekeeping>
- <expiredMessageCheckPeriod>20000</expiredMessageCheckPeriod>
- </housekeeping>
-
- <exchanges>
- <exchange>
- <type>direct</type>
- <name>test.direct</name>
- <durable>true</durable>
- </exchange>
- <exchange>
- <type>topic</type>
- <name>test.topic</name>
- </exchange>
- </exchanges>
- <queues>
- <exchange>amq.direct</exchange>
- <maximumQueueDepth>4235264</maximumQueueDepth>
- <!-- 4Mb -->
- <maximumMessageSize>2117632</maximumMessageSize>
- <!-- 2Mb -->
- <maximumMessageAge>600000</maximumMessageAge>
- <!-- 10 mins -->
- <maximumMessageCount>50</maximumMessageCount>
- <!-- 50 messages -->
-
- <queue>
- <name>queue</name>
- </queue>
- <queue>
- <name>ping</name>
- </queue>
- <queue>
- <name>test-queue</name>
- <test-queue>
- <exchange>test.direct</exchange>
- <durable>true</durable>
- </test-queue>
- </queue>
- <queue>
- <name>test-ping</name>
- <test-ping>
- <exchange>test.direct</exchange>
- </test-ping>
- </queue>
-
- </queues>
- </localhost>
- </virtualhost>
-
-
- <virtualhost>
- <name>development</name>
- <development>
- <store>
- <class>org.apache.qpid.server.store.MemoryMessageStore
- </class>
- </store>
-
- <queues>
- <minimumAlertRepeatGap>30000</minimumAlertRepeatGap>
- <maximumMessageCount>50</maximumMessageCount>
- <queue>
- <name>queue</name>
- <queue>
- <exchange>amq.direct</exchange>
- <maximumQueueDepth>4235264</maximumQueueDepth>
- <!-- 4Mb -->
- <maximumMessageSize>2117632</maximumMessageSize>
- <!-- 2Mb -->
- <maximumMessageAge>600000</maximumMessageAge>
- <!-- 10 mins -->
- </queue>
- </queue>
- <queue>
- <name>ping</name>
- <ping>
- <exchange>amq.direct</exchange>
- <maximumQueueDepth>4235264</maximumQueueDepth>
- <!-- 4Mb -->
- <maximumMessageSize>2117632</maximumMessageSize>
- <!-- 2Mb -->
- <maximumMessageAge>600000</maximumMessageAge>
- <!-- 10 mins -->
- </ping>
- </queue>
- </queues>
- </development>
- </virtualhost>
- <virtualhost>
- <name>test</name>
- <test>
- <store>
- <class>org.apache.qpid.server.store.MemoryMessageStore
- </class>
- </store>
-
- <queues>
- <minimumAlertRepeatGap>30000</minimumAlertRepeatGap>
- <maximumMessageCount>50</maximumMessageCount>
- <queue>
- <name>queue</name>
- <queue>
- <exchange>amq.direct</exchange>
- <maximumQueueDepth>4235264</maximumQueueDepth>
- <!-- 4Mb -->
- <maximumMessageSize>2117632</maximumMessageSize>
- <!-- 2Mb -->
- <maximumMessageAge>600000</maximumMessageAge>
- <!-- 10 mins -->
- </queue>
- </queue>
- <queue>
- <name>ping</name>
- <ping>
- <exchange>amq.direct</exchange>
- <maximumQueueDepth>4235264</maximumQueueDepth>
- <!-- 4Mb -->
- <maximumMessageSize>2117632</maximumMessageSize>
- <!-- 2Mb -->
- <maximumMessageAge>600000</maximumMessageAge>
- <!-- 10 mins -->
- </ping>
- </queue>
- </queues>
- </test>
- </virtualhost>
- </virtualhosts>
+ <virtualhosts>${conf}/virtualhosts.xml</virtualhosts>
+
<heartbeat>
<delay>0</delay>
<timeoutFactor>2.0</timeoutFactor>
Modified: qpid/branches/qmf-devel0.7a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java?rev=929307&r1=929306&r2=929307&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java (original)
+++ qpid/branches/qmf-devel0.7a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java Tue Mar 30 21:35:08 2010
@@ -21,18 +21,19 @@
package org.apache.qpid.server.configuration;
import java.io.File;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
-import java.util.Map;
import java.util.Locale;
-import java.util.Collections;
+import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.configuration.CompositeConfiguration;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.ConfigurationFactory;
+import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.commons.configuration.SystemConfiguration;
import org.apache.commons.configuration.XMLConfiguration;
import org.apache.qpid.server.configuration.management.ConfigurationManagementMBean;
@@ -52,18 +53,17 @@ public class ServerConfiguration impleme
private Configuration _config;
// Default Configuration values
- //todo make these all public, to make validation of configuration easier.
public static final int DEFAULT_BUFFER_READ_LIMIT_SIZE = 262144;
public static final int DEFAULT_BUFFER_WRITE_LIMIT_SIZE = 262144;
public static final boolean DEFAULT_BROKER_CONNECTOR_PROTECTIO_ENABLED = false;
public static final String DEFAULT_STATUS_UPDATES = "on";
public static final String SECURITY_CONFIG_RELOADED = "SECURITY CONFIGURATION RELOADED";
- private static final int DEFAULT_FRAME_SIZE = 65536;
- private static final int DEFAULT_PORT = 5672;
- private static final int DEFAUL_SSL_PORT = 8672;
- private static final long DEFAULT_HOUSEKEEPING_PERIOD = 30000L;
- private static final int DEFAULT_JMXPORT = 8999;
+ public static final int DEFAULT_FRAME_SIZE = 65536;
+ public static final int DEFAULT_PORT = 5672;
+ public static final int DEFAULT_SSL_PORT = 8672;
+ public static final long DEFAULT_HOUSEKEEPING_PERIOD = 30000L;
+ public static final int DEFAULT_JMXPORT = 8999;
private static int _jmxPort = DEFAULT_JMXPORT;
@@ -71,6 +71,7 @@ public class ServerConfiguration impleme
private SecurityConfiguration _securityConfiguration = null;
private File _configFile;
+ private File _vhostsFile;
private Logger _log = LoggerFactory.getLogger(this.getClass());
@@ -134,8 +135,6 @@ public class ServerConfiguration impleme
{
setConfig(conf);
- substituteEnvironmentVariables();
-
_jmxPort = getConfig().getInt("management.jmxport", 8999);
_securityConfiguration = new SecurityConfiguration(conf.subset("security"));
@@ -143,61 +142,86 @@ public class ServerConfiguration impleme
}
- private void setupVirtualHosts(Configuration conf) throws ConfigurationException
+ /*
+ * Modified to enforce virtualhosts configuration in external file or main file, but not
+ * both, as a fix for QPID-2360 and QPID-2361.
+ */
+ @SuppressWarnings("unchecked")
+ private void setupVirtualHosts(Configuration conf) throws ConfigurationException
{
- List vhosts = conf.getList("virtualhosts");
- Iterator i = vhosts.iterator();
- while (i.hasNext())
- {
- Object thing = i.next();
- if (thing instanceof String)
- {
- //Open the Virtualhost.xml file and copy values in to main config
- XMLConfiguration vhostConfiguration = new XMLConfiguration((String) thing);
- Iterator keys = vhostConfiguration.getKeys();
- while (keys.hasNext())
- {
- String key = (String) keys.next();
- conf.setProperty("virtualhosts." + key, vhostConfiguration.getProperty(key));
- }
- }
- }
+ List<String> vhostFiles = conf.getList("virtualhosts");
+ Configuration vhostConfig = conf.subset("virtualhosts");
- List hosts = conf.getList("virtualhosts.virtualhost.name");
+ // Only one configuration mechanism allowed
+ if (!vhostFiles.isEmpty() && !vhostConfig.subset("virtualhost").isEmpty())
+ {
+ throw new ConfigurationException("Only one of external or embedded virtualhosts configuration allowed.");
+ }
+
+ // We can only have one vhosts XML file included
+ if (vhostFiles.size() > 1)
+ {
+ throw new ConfigurationException("Only one external virtualhosts configuration file allowed, multiple filenames found.");
+ }
+
+ // Virtualhost configuration object
+ Configuration vhostConfiguration = new HierarchicalConfiguration();
+
+ // Load from embedded configuration if possible
+ if (!vhostConfig.subset("virtualhost").isEmpty())
+ {
+ vhostConfiguration = vhostConfig;
+ }
+ else
+ {
+ // Load from the external configuration if possible
+ for (String fileName : vhostFiles)
+ {
+ // Open the vhosts XML file and copy values from it to our config
+ _vhostsFile = new File(fileName);
+ vhostConfiguration = parseConfig(new File(fileName));
+ }
+ }
+
+ // Now extract the virtual host names from the configuration object
+ List hosts = vhostConfiguration.getList("virtualhost.name");
for (int j = 0; j < hosts.size(); j++)
{
String name = (String) hosts.get(j);
- // Add the keys of the virtual host to the main config then bail out
-
- VirtualHostConfiguration vhostConfig = new VirtualHostConfiguration(name, conf.subset("virtualhosts.virtualhost." + name));
- _virtualHosts.put(vhostConfig.getName(), vhostConfig);
+
+ // Add the virtual hosts to the server configuration
+ VirtualHostConfiguration virtualhost = new VirtualHostConfiguration(name, vhostConfiguration.subset("virtualhost." + name));
+ _virtualHosts.put(virtualhost.getName(), virtualhost);
}
-
}
- private void substituteEnvironmentVariables()
+ private static void substituteEnvironmentVariables(Configuration conf)
{
for (Entry<String, String> var : envVarMap.entrySet())
{
String val = System.getenv(var.getKey());
if (val != null)
{
- getConfig().setProperty(var.getValue(), val);
+ conf.setProperty(var.getValue(), val);
}
}
}
- private final static Configuration parseConfig(File file) throws ConfigurationException
+ private static Configuration parseConfig(File file) throws ConfigurationException
{
ConfigurationFactory factory = new ConfigurationFactory();
factory.setConfigurationFileName(file.getAbsolutePath());
Configuration conf = factory.getConfiguration();
- Iterator keys = conf.getKeys();
+
+ Iterator<?> keys = conf.getKeys();
if (!keys.hasNext())
{
keys = null;
conf = flatConfig(file);
}
+
+ substituteEnvironmentVariables(conf);
+
return conf;
}
@@ -311,13 +335,25 @@ public class ServerConfiguration impleme
if (_configFile != null)
{
Configuration newConfig = parseConfig(_configFile);
+
_securityConfiguration = new SecurityConfiguration(newConfig.subset("security"));
-
+
+ // Reload virtualhosts from correct location
+ Configuration newVhosts;
+ if (_vhostsFile == null)
+ {
+ newVhosts = newConfig.subset("virtualhosts");
+ }
+ else
+ {
+ newVhosts = parseConfig(_vhostsFile);
+ }
+
VirtualHostRegistry vhostRegistry = ApplicationRegistry.getInstance().getVirtualHostRegistry();
for (String hostname : _virtualHosts.keySet())
{
VirtualHost vhost = vhostRegistry.getVirtualHost(hostname);
- SecurityConfiguration hostSecurityConfig = new SecurityConfiguration(newConfig.subset("virtualhosts.virtualhost."+hostname+".security"));
+ SecurityConfiguration hostSecurityConfig = new SecurityConfiguration(newVhosts.subset("virtualhost."+hostname+".security"));
vhost.getAccessManager().configureGlobalPlugins(_securityConfiguration);
vhost.getAccessManager().configureHostPlugins(hostSecurityConfig);
}
@@ -601,7 +637,7 @@ public class ServerConfiguration impleme
public int getSSLPort()
{
- return getConfig().getInt("connector.ssl.port", DEFAUL_SSL_PORT);
+ return getConfig().getInt("connector.ssl.port", DEFAULT_SSL_PORT);
}
public String getKeystorePath()
Propchange: qpid/branches/qmf-devel0.7a/qpid/java/broker/src/main/java/org/apache/qpid/server/management/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 30 21:35:08 2010
@@ -3,4 +3,4 @@
/qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/management:795950-829653
/qpid/branches/java-network-refactor/qpid/java/broker/src/main/java/org/apache/qpid/server/management:805429-821809
/qpid/branches/jmx_mc_gsoc09/qpid/java/broker/src/main/java/org/apache/qpid/server/management:787599
-/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management:753219-753220,753253,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790,919043-928107
+/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management:753219-753220,753253,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790,919043-929244
Propchange: qpid/branches/qmf-devel0.7a/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 30 21:35:08 2010
@@ -3,4 +3,4 @@
/qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/queue:795950-829653
/qpid/branches/java-network-refactor/qpid/java/broker/src/main/java/org/apache/qpid/server/queue:805429-821809
/qpid/branches/jmx_mc_gsoc09/qpid/java/broker/src/main/java/org/apache/qpid/server/queue:787599
-/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue:753219-753220,753253,757270,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790,919043-928107
+/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue:753219-753220,753253,757270,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790,919043-929244
Modified: qpid/branches/qmf-devel0.7a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java?rev=929307&r1=929306&r2=929307&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java (original)
+++ qpid/branches/qmf-devel0.7a/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java Tue Mar 30 21:35:08 2010
@@ -20,11 +20,20 @@
*/
package org.apache.qpid.server.configuration;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.util.List;
+import java.util.Locale;
+
import junit.framework.TestCase;
-import org.apache.commons.configuration.Configuration;
+
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;
-
+import org.apache.qpid.framing.AMQShortString;
+import org.apache.qpid.server.exchange.Exchange;
+import org.apache.qpid.server.exchange.ExchangeType;
import org.apache.qpid.server.protocol.AMQProtocolEngine;
import org.apache.qpid.server.protocol.AMQProtocolSession;
import org.apache.qpid.server.registry.ApplicationRegistry;
@@ -33,24 +42,15 @@ import org.apache.qpid.server.virtualhos
import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
import org.apache.qpid.transport.TestNetworkDriver;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-
public class ServerConfigurationTest extends TestCase
{
-
private XMLConfiguration _config;
@Override
public void setUp()
{
//Highlight that this test will cause a new AR to be created
-// ApplicationRegistry.getInstance();
+ ApplicationRegistry.getInstance();
_config = new XMLConfiguration();
}
@@ -59,7 +59,7 @@ public class ServerConfigurationTest ext
public void tearDown() throws Exception
{
//Correctly Close the AR we created
-// ApplicationRegistry.remove();
+ ApplicationRegistry.remove();
}
public void testSetJMXManagementPort() throws ConfigurationException
@@ -756,10 +756,9 @@ public class ServerConfigurationTest ext
public void testFirewallConfiguration() throws Exception
{
- // Write out config
+ // Write out config
File mainFile = File.createTempFile(getClass().getName(), null);
mainFile.deleteOnExit();
- FileWriter out;
writeConfigFile(mainFile, false);
// Load config
@@ -903,6 +902,10 @@ public class ServerConfigurationTest ext
}
private void writeConfigFile(File mainFile, boolean allow) throws IOException {
+ writeConfigFile(mainFile, allow, true, null, "test");
+ }
+
+ private void writeConfigFile(File mainFile, boolean allow, boolean includeVhosts, File vhostsFile, String name) throws IOException {
FileWriter out = new FileWriter(mainFile);
out.write("<broker>\n");
out.write("\t<management><enabled>false</enabled></management>\n");
@@ -927,15 +930,101 @@ public class ServerConfigurationTest ext
out.write("\t\t\t<rule access=\""+ ((allow) ? "allow" : "deny") +"\" network=\"127.0.0.1\"/>");
out.write("\t\t</firewall>\n");
out.write("\t</security>\n");
+ if (includeVhosts)
+ {
+ out.write("\t<virtualhosts>\n");
+ out.write("\t\t<virtualhost>\n");
+ out.write(String.format("\t\t\t<name>%s</name>\n", name));
+ out.write(String.format("\t\t<%s> \n", name));
+ out.write("\t\t\t<exchanges>\n");
+ out.write("\t\t\t\t<exchange>\n");
+ out.write("\t\t\t\t\t<type>topic</type>\n");
+ out.write(String.format("\t\t\t\t\t<name>%s.topic</name>\n", name));
+ out.write("\t\t\t\t\t<durable>true</durable>\n");
+ out.write("\t\t\t\t</exchange>\n");
+ out.write("\t\tt</exchanges>\n");
+ out.write(String.format("\t\t</%s> \n", name));
+ out.write("\t\t</virtualhost>\n");
+ out.write("\t</virtualhosts>\n");
+ }
+ if (vhostsFile != null)
+ {
+ out.write("\t<virtualhosts>"+vhostsFile.getAbsolutePath()+"</virtualhosts>\n");
+ }
+ out.write("</broker>\n");
+ out.close();
+ }
+
+ private void writeTestFishConfigFile(File mainFile) throws IOException {
+ FileWriter out = new FileWriter(mainFile);
+ out.write("<broker>\n");
+ out.write("\t<management><enabled>false</enabled></management>\n");
+ out.write("\t<security>\n");
+ out.write("\t\t<principal-databases>\n");
+ out.write("\t\t\t<principal-database>\n");
+ out.write("\t\t\t\t<name>passwordfile</name>\n");
+ out.write("\t\t\t\t<class>org.apache.qpid.server.security.auth.database.PlainPasswordFilePrincipalDatabase</class>\n");
+ out.write("\t\t\t\t<attributes>\n");
+ out.write("\t\t\t\t\t<attribute>\n");
+ out.write("\t\t\t\t\t\t<name>passwordFile</name>\n");
+ out.write("\t\t\t\t\t\t<value>/dev/null</value>\n");
+ out.write("\t\t\t\t\t</attribute>\n");
+ out.write("\t\t\t\t</attributes>\n");
+ out.write("\t\t\t</principal-database>\n");
+ out.write("\t\t</principal-databases>\n");
+ out.write("\t\t<jmx>\n");
+ out.write("\t\t\t<access>/dev/null</access>\n");
+ out.write("\t\t\t<principal-database>passwordfile</principal-database>\n");
+ out.write("\t\t</jmx>\n");
+ out.write("\t\t<firewall>\n");
+ out.write("\t\t\t<rule access=\"allow\" network=\"127.0.0.1\"/>");
+ out.write("\t\t</firewall>\n");
+ out.write("\t</security>\n");
out.write("\t<virtualhosts>\n");
out.write("\t\t<virtualhost>\n");
out.write("\t\t\t<name>test</name>\n");
+ out.write("\t\t<test> \n");
+ out.write("\t\t\t<exchanges>\n");
+ out.write("\t\t\t\t<exchange>\n");
+ out.write("\t\t\t\t\t<type>topic</type>\n");
+ out.write("\t\t\t\t\t<name>test.topic</name>\n");
+ out.write("\t\t\t\t\t<durable>true</durable>\n");
+ out.write("\t\t\t\t</exchange>\n");
+ out.write("\t\tt</exchanges>\n");
+ out.write("\t\t</test> \n");
+ out.write("\t\t</virtualhost>\n");
+ out.write("\t\t<virtualhost>\n");
+ out.write("\t\t\t<name>fish</name>\n");
+ out.write("\t\t<fish> \n");
+ out.write("\t\t\t<exchanges>\n");
+ out.write("\t\t\t\t<exchange>\n");
+ out.write("\t\t\t\t\t<type>topic</type>\n");
+ out.write("\t\t\t\t\t<name>fish.topic</name>\n");
+ out.write("\t\t\t\t\t<durable>false</durable>\n");
+ out.write("\t\t\t\t</exchange>\n");
+ out.write("\t\tt</exchanges>\n");
+ out.write("\t\t</fish> \n");
out.write("\t\t</virtualhost>\n");
out.write("\t</virtualhosts>\n");
out.write("</broker>\n");
out.close();
}
+ private void writeFirewallVhostsFile(File vhostsFile, boolean allow) throws IOException
+ {
+ FileWriter out = new FileWriter(vhostsFile);
+ String ipAddr = "127.0.0.1"; // FIXME: get this from InetAddress.getLocalHost().getAddress() ?
+ out.write("<virtualhosts><virtualhost>");
+ out.write("<name>test</name>");
+ out.write("<test>");
+ out.write("<security><firewall>");
+ out.write("<rule access=\""+((allow) ? "allow" : "deny")+"\" network=\""+ipAddr +"\"/>");
+ out.write("</firewall></security>");
+ out.write("</test>");
+ out.write("</virtualhost></virtualhosts>");
+ out.close();
+ }
+
public void testCombinedConfigurationFirewallReload() throws Exception
{
// Write out config
@@ -1041,42 +1130,538 @@ public class ServerConfigurationTest ext
}
}
- public void testnewParserOutputVsOldParserOutput() throws ConfigurationException
- {
- String configDir = System.getProperty("QPID_HOME")+"/etc";
+ private void writeVirtualHostsFile(File vhostsFile, String name) throws IOException {
+ FileWriter out = new FileWriter(vhostsFile);
+ out.write("<virtualhosts>\n");
+ out.write("\t<virtualhost>\n");
+ out.write(String.format("\t\t<name>%s</name>\n", name));
+ out.write(String.format("\t\t<%s>\n", name));
+ out.write("\t\t\t<exchanges>\n");
+ out.write("\t\t\t\t<exchange>\n");
+ out.write("\t\t\t\t\t<type>topic</type>\n");
+ out.write("\t\t\t\t\t<name>test.topic</name>\n");
+ out.write("\t\t\t\t\t<durable>true</durable>\n");
+ out.write("\t\t\t\t</exchange>\n");
+ out.write("\t\tt</exchanges>\n");
+ out.write(String.format("\t\t</%s>\n", name));
+ out.write("\t</virtualhost>\n");
+ out.write("</virtualhosts>\n");
+ out.close();
+ }
- XMLConfiguration oldConfig = new XMLConfiguration(configDir +"/config-systests-ServerConfigurationTest-Old.xml");
- Configuration newConfig = new ServerConfiguration(new File(configDir+"/config-systests-ServerConfigurationTest-New.xml")).getConfig();
+ private void writeMultiVirtualHostsFile(File vhostsFile) throws IOException {
+ FileWriter out = new FileWriter(vhostsFile);
+ out.write("<virtualhosts>\n");
+ out.write("\t<virtualhost>\n");
+ out.write("\t\t<name>topic</name>\n");
+ out.write("\t\t<topic>\n");
+ out.write("\t\t\t<exchanges>\n");
+ out.write("\t\t\t\t<exchange>\n");
+ out.write("\t\t\t\t\t<type>topic</type>\n");
+ out.write("\t\t\t\t\t<name>test.topic</name>\n");
+ out.write("\t\t\t\t\t<durable>true</durable>\n");
+ out.write("\t\t\t\t</exchange>\n");
+ out.write("\t\tt</exchanges>\n");
+ out.write("\t\t</topic>\n");
+ out.write("\t</virtualhost>\n");
+ out.write("\t<virtualhost>\n");
+ out.write("\t\t<name>fanout</name>\n");
+ out.write("\t\t<fanout>\n");
+ out.write("\t\t\t<exchanges>\n");
+ out.write("\t\t\t\t<exchange>\n");
+ out.write("\t\t\t\t\t<type>fanout</type>\n");
+ out.write("\t\t\t\t\t<name>test.fanout</name>\n");
+ out.write("\t\t\t\t\t<durable>true</durable>\n");
+ out.write("\t\t\t\t</exchange>\n");
+ out.write("\t\tt</exchanges>\n");
+ out.write("\t\t</fanout>\n");
+ out.write("\t</virtualhost>\n");
+ out.write("</virtualhosts>\n");
+ out.close();
+ }
- Iterator xmlKeys = oldConfig.getKeys();
- while (xmlKeys.hasNext())
+ private void writeMultipleVhostsConfigFile(File mainFile, File[] vhostsFileArray) throws IOException {
+ FileWriter out = new FileWriter(mainFile);
+ out.write("<broker>\n");
+ out.write("\t<management><enabled>false</enabled></management>\n");
+ out.write("\t<security>\n");
+ out.write("\t\t<principal-databases>\n");
+ out.write("\t\t\t<principal-database>\n");
+ out.write("\t\t\t\t<name>passwordfile</name>\n");
+ out.write("\t\t\t\t<class>org.apache.qpid.server.security.auth.database.PlainPasswordFilePrincipalDatabase</class>\n");
+ out.write("\t\t\t\t<attributes>\n");
+ out.write("\t\t\t\t\t<attribute>\n");
+ out.write("\t\t\t\t\t\t<name>passwordFile</name>\n");
+ out.write("\t\t\t\t\t\t<value>/dev/null</value>\n");
+ out.write("\t\t\t\t\t</attribute>\n");
+ out.write("\t\t\t\t</attributes>\n");
+ out.write("\t\t\t</principal-database>\n");
+ out.write("\t\t</principal-databases>\n");
+ out.write("\t\t<jmx>\n");
+ out.write("\t\t\t<access>/dev/null</access>\n");
+ out.write("\t\t\t<principal-database>passwordfile</principal-database>\n");
+ out.write("\t\t</jmx>\n");
+ out.write("\t\t<firewall>\n");
+ out.write("\t\t\t<rule access=\"allow\" network=\"127.0.0.1\"/>");
+ out.write("\t\t</firewall>\n");
+ out.write("\t</security>\n");
+ for (File vhostsFile : vhostsFileArray)
{
- String key = (String) xmlKeys.next();
- assertEquals("Incorrect value for "+key, oldConfig.getProperty(key), newConfig.getProperty(key));
+ out.write("\t<virtualhosts>"+vhostsFile.getAbsolutePath()+"</virtualhosts>\n");
}
+ out.write("</broker>\n");
+ out.close();
}
+ private void writeCombinedConfigFile(File mainFile, File fileA, File fileB) throws Exception
+ {
+ FileWriter out = new FileWriter(mainFile);
+ out.write("<configuration><system/>");
+ out.write("<xml fileName=\"" + fileA.getAbsolutePath() + "\"/>");
+ out.write("<xml fileName=\"" + fileB.getAbsolutePath() + "\"/>");
+ out.write("</configuration>");
+ out.close();
+ }
+
+ /**
+ * Test that configuration loads correctly when virtual hosts are specified in the main
+ * configuration file only.
+ * <p>
+ * Test for QPID-2361
+ */
+ public void testInternalVirtualhostConfigFile() throws Exception
+ {
+ // Write out config
+ File mainFile = File.createTempFile(getClass().getName(), "config");
+ mainFile.deleteOnExit();
+ writeConfigFile(mainFile, false, true, null, "test");
- public void testNoVirtualhostXMLFile() throws Exception
+ // Load config
+ ApplicationRegistry reg = new ConfigurationFileApplicationRegistry(mainFile);
+ ApplicationRegistry.initialise(reg, 1);
+
+ // Test config
+ VirtualHostRegistry virtualHostRegistry = reg.getVirtualHostRegistry();
+ VirtualHost virtualHost = virtualHostRegistry.getVirtualHost("test");
+ Exchange exchange = virtualHost.getExchangeRegistry().getExchange(new AMQShortString("test.topic"));
+
+ assertEquals("Incorrect virtualhost count", 1, virtualHostRegistry.getVirtualHosts().size());
+ assertEquals("Incorrect virtualhost name", "test", virtualHost.getName());
+ assertEquals("Incorrect exchange type", "topic", exchange.getType().getName().toString());
+ }
+
+ /**
+ * Test that configuration loads correctly when virtual hosts are specified in an external
+ * configuration file only.
+ * <p>
+ * Test for QPID-2361
+ */
+ public void testExternalVirtualhostXMLFile() throws Exception
{
- int REGISTRY=1;
+ // Write out config
+ File mainFile = File.createTempFile(getClass().getName(), "config");
+ mainFile.deleteOnExit();
+ File vhostsFile = File.createTempFile(getClass().getName(), "vhosts");
+ vhostsFile.deleteOnExit();
+ writeConfigFile(mainFile, false, false, vhostsFile, null);
+ writeVirtualHostsFile(vhostsFile, "test");
- File configFile = new File(System.getProperty("QPID_HOME")+"/etc/config.xml");
- assertTrue(configFile.exists());
+ // Load config
+ ApplicationRegistry reg = new ConfigurationFileApplicationRegistry(mainFile);
+ ApplicationRegistry.initialise(reg, 1);
+
+ // Test config
+ VirtualHostRegistry virtualHostRegistry = reg.getVirtualHostRegistry();
+ VirtualHost virtualHost = virtualHostRegistry.getVirtualHost("test");
+ Exchange exchange = virtualHost.getExchangeRegistry().getExchange(new AMQShortString("test.topic"));
+
+ assertEquals("Incorrect virtualhost count", 1, virtualHostRegistry.getVirtualHosts().size());
+ assertEquals("Incorrect virtualhost name", "test", virtualHost.getName());
+ assertEquals("Incorrect exchange type", "topic", exchange.getType().getName().toString());
+ }
+
+ /**
+ * Test that configuration loads correctly when virtual hosts are specified in an external
+ * configuration file only, with two vhosts that have different properties.
+ * <p>
+ * Test for QPID-2361
+ */
+ public void testExternalMultiVirtualhostXMLFile() throws Exception
+ {
+ // Write out vhosts
+ File vhostsFile = File.createTempFile(getClass().getName(), "vhosts-multi");
+ vhostsFile.deleteOnExit();
+ writeMultiVirtualHostsFile(vhostsFile);
+
+ // Write out config
+ File mainFile = File.createTempFile(getClass().getName(), "config");
+ mainFile.deleteOnExit();
+ writeConfigFile(mainFile, false, false, vhostsFile, null);
+ // Load config
+ ApplicationRegistry reg = new ConfigurationFileApplicationRegistry(mainFile);
+ ApplicationRegistry.initialise(reg, 1);
+
+ // Test config
+ VirtualHostRegistry virtualHostRegistry = reg.getVirtualHostRegistry();
+
+ assertEquals("Incorrect virtualhost count", 2, virtualHostRegistry.getVirtualHosts().size());
+
+ // test topic host
+ VirtualHost topicVirtualHost = virtualHostRegistry.getVirtualHost("topic");
+ Exchange topicExchange = topicVirtualHost.getExchangeRegistry().getExchange(new AMQShortString("test.topic"));
+
+ assertEquals("Incorrect topic virtualhost name", "topic", topicVirtualHost.getName());
+ assertEquals("Incorrect topic exchange type", "topic", topicExchange.getType().getName().toString());
+
+ // Test fanout host
+ VirtualHost fanoutVirtualHost = virtualHostRegistry.getVirtualHost("fanout");
+ Exchange fanoutExchange = fanoutVirtualHost.getExchangeRegistry().getExchange(new AMQShortString("test.fanout"));
+
+ assertEquals("Incorrect fanout virtualhost name", "fanout", fanoutVirtualHost.getName());
+ assertEquals("Incorrect fanout exchange type", "fanout", fanoutExchange.getType().getName().toString());
+ }
+
+ /**
+ * Test that configuration does not load when virtual hosts are specified in both the main
+ * configuration file and an external file. Should throw a {@link ConfigurationException}.
+ * <p>
+ * Test for QPID-2361
+ */
+ public void testInternalAndExternalVirtualhostXMLFile() throws Exception
+ {
+ // Write out vhosts
+ File vhostsFile = File.createTempFile(getClass().getName(), "vhosts");
+ vhostsFile.deleteOnExit();
+ writeVirtualHostsFile(vhostsFile, "test");
+
+ // Write out config
+ File mainFile = File.createTempFile(getClass().getName(), "config");
+ mainFile.deleteOnExit();
+ writeConfigFile(mainFile, false, true, vhostsFile, "test");
+
+ // Load config
try
{
- ApplicationRegistry.initialise(new ConfigurationFileApplicationRegistry(configFile), REGISTRY);
-
- VirtualHostRegistry virtualHostRegistry = ApplicationRegistry.getInstance(REGISTRY).getVirtualHostRegistry();
+ @SuppressWarnings("unused")
+ ApplicationRegistry reg = new ConfigurationFileApplicationRegistry(mainFile);
+ fail("Different virtualhost XML configurations not allowed");
+ }
+ catch (ConfigurationException ce)
+ {
+ assertEquals("Incorrect error message", "Only one of external or embedded virtualhosts configuration allowed.", ce.getMessage());
+ }
+ }
+
+ /**
+ * Test that configuration does not load when virtual hosts are specified in multiple external
+ * files. Should throw a {@link ConfigurationException}.
+ * <p>
+ * Test for QPID-2361
+ */
+ public void testMultipleInternalVirtualhostXMLFile() throws Exception
+ {
+ // Write out vhosts
+ File vhostsFileOne = File.createTempFile(getClass().getName(), "vhosts-one");
+ vhostsFileOne.deleteOnExit();
+ writeVirtualHostsFile(vhostsFileOne, "one");
+ File vhostsFileTwo = File.createTempFile(getClass().getName(), "vhosts-two");
+ vhostsFileTwo.deleteOnExit();
+ writeVirtualHostsFile(vhostsFileTwo, "two");
+
+ // Write out config
+ File mainFile = File.createTempFile(getClass().getName(), "config");
+ mainFile.deleteOnExit();
+ writeMultipleVhostsConfigFile(mainFile, new File[] { vhostsFileOne, vhostsFileTwo });
+
+ // Load config
+ try
+ {
+ @SuppressWarnings("unused")
+ ApplicationRegistry reg = new ConfigurationFileApplicationRegistry(mainFile);
+ fail("Multiple virtualhost XML configurations not allowed");
+ }
+ catch (ConfigurationException ce)
+ {
+ assertEquals("Incorrect error message",
+ "Only one external virtualhosts configuration file allowed, multiple filenames found.",
+ ce.getMessage());
+ }
+ }
+
+ /**
+ * Test that configuration loads correctly when virtual hosts are specified in an external
+ * configuration file in the first of two configurations and embedded in the second. This
+ * will throe a {@link ConfigurationException} since the configurations have different
+ * types.
+ * <p>
+ * Test for QPID-2361
+ */
+ public void testCombinedDifferentVirtualhostConfig() throws Exception
+ {
+ // Write out vhosts config
+ File vhostsFile = File.createTempFile(getClass().getName(), "vhosts");
+ vhostsFile.deleteOnExit();
+ writeVirtualHostsFile(vhostsFile, "external");
+
+ // Write out combined config file
+ File mainFile = File.createTempFile(getClass().getName(), "main");
+ File fileA = File.createTempFile(getClass().getName(), "a");
+ File fileB = File.createTempFile(getClass().getName(), "b");
+ mainFile.deleteOnExit();
+ fileA.deleteOnExit();
+ fileB.deleteOnExit();
+ writeCombinedConfigFile(mainFile, fileA, fileB);
+ writeConfigFile(fileA, false, false, vhostsFile, null);
+ writeConfigFile(fileB, false);
- assertEquals("Incorrect virtualhost count", 3 , virtualHostRegistry.getVirtualHosts().size());
+ // Load config
+ try
+ {
+ @SuppressWarnings("unused")
+ ServerConfiguration config = new ServerConfiguration(mainFile.getAbsoluteFile());
+ fail("Different virtualhost XML configurations not allowed");
}
- finally
+ catch (ConfigurationException ce)
{
- ApplicationRegistry.remove(REGISTRY);
+ assertEquals("Incorrect error message", "Only one of external or embedded virtualhosts configuration allowed.", ce.getMessage());
}
}
+ /**
+ * Test that configuration loads correctly when virtual hosts are specified two overriding configurations
+ * each with an embedded virtualhost section. The first configuration section should be used.
+ * <p>
+ * Test for QPID-2361
+ */
+ public void testCombinedConfigEmbeddedVirtualhost() throws Exception
+ {
+ // Write out combined config file
+ File mainFile = File.createTempFile(getClass().getName(), "main");
+ File fileA = File.createTempFile(getClass().getName(), "a");
+ File fileB = File.createTempFile(getClass().getName(), "b");
+ mainFile.deleteOnExit();
+ fileA.deleteOnExit();
+ fileB.deleteOnExit();
+ writeCombinedConfigFile(mainFile, fileA, fileB);
+ writeConfigFile(fileA, false, true, null, "a");
+ writeConfigFile(fileB, false, true, null, "b");
+
+ // Load config
+ ServerConfiguration config = new ServerConfiguration(mainFile.getAbsoluteFile());
+
+ // Test config
+ VirtualHostConfiguration virtualHost = config.getVirtualHostConfig("a");
+
+ assertEquals("Incorrect virtualhost count", 1, config.getVirtualHosts().length);
+ assertEquals("Incorrect virtualhost name", "a", virtualHost.getName());
+ }
+
+ /**
+ * Test that configuration loads correctly when virtual hosts are specified two overriding configurations
+ * each with an external virtualhost XML file. The first configuration file should be used.
+ * <p>
+ * Test for QPID-2361
+ */
+ public void testCombinedConfigExternalVirtualhost() throws Exception
+ {
+ // Write out vhosts config
+ File vhostsOne = File.createTempFile(getClass().getName(), "vhosts-one");
+ vhostsOne.deleteOnExit();
+ writeVirtualHostsFile(vhostsOne, "one");
+ File vhostsTwo = File.createTempFile(getClass().getName(), "vhosts-two");
+ vhostsTwo.deleteOnExit();
+ writeVirtualHostsFile(vhostsTwo, "two");
+
+ // Write out combined config file
+ File mainFile = File.createTempFile(getClass().getName(), "main");
+ File fileA = File.createTempFile(getClass().getName(), "a");
+ File fileB = File.createTempFile(getClass().getName(), "b");
+ mainFile.deleteOnExit();
+ fileA.deleteOnExit();
+ fileB.deleteOnExit();
+ writeCombinedConfigFile(mainFile, fileA, fileB);
+ writeConfigFile(fileA, false, false, vhostsOne, null);
+ writeConfigFile(fileB, false, false, vhostsTwo, null);
+ // Load config
+ ServerConfiguration config = new ServerConfiguration(mainFile.getAbsoluteFile());
+
+ // Test config
+ VirtualHostConfiguration virtualHost = config.getVirtualHostConfig("one");
+
+ assertEquals("Incorrect virtualhost count", 1, config.getVirtualHosts().length);
+ assertEquals("Incorrect virtualhost name", "one", virtualHost.getName());
+ }
+
+ /**
+ * Test that configuration loads correctly when an overriding virtualhost configuration resets
+ * a property of an embedded virtualhost section. The overriding configuration property value
+ * should be used.
+ * <p>
+ * Test for QPID-2361
+ */
+ public void testCombinedConfigEmbeddedVirtualhostOverride() throws Exception
+ {
+ // Write out combined config file
+ File mainFile = File.createTempFile(getClass().getName(), "main");
+ File fileA = File.createTempFile(getClass().getName(), "override");
+ File fileB = File.createTempFile(getClass().getName(), "config");
+ mainFile.deleteOnExit();
+ fileA.deleteOnExit();
+ fileB.deleteOnExit();
+ writeCombinedConfigFile(mainFile, fileA, fileB);
+ writeTestFishConfigFile(fileB);
+
+ // Write out overriding virtualhosts section
+ FileWriter out = new FileWriter(fileA);
+ out.write("<broker>\n");
+ out.write("<virtualhosts>\n");
+ out.write("\t<virtualhost>\n");
+ out.write("\t\t<test>\n");
+ out.write("\t\t\t<exchanges>\n");
+ out.write("\t\t\t\t<exchange>\n");
+ out.write("\t\t\t\t\t<durable>false</durable>\n");
+ out.write("\t\t\t\t</exchange>\n");
+ out.write("\t\tt</exchanges>\n");
+ out.write("\t\t</test>\n");
+ out.write("\t\t<fish>\n");
+ out.write("\t\t\t<exchanges>\n");
+ out.write("\t\t\t\t<exchange>\n");
+ out.write("\t\t\t\t\t<durable>true</durable>\n");
+ out.write("\t\t\t\t</exchange>\n");
+ out.write("\t\tt</exchanges>\n");
+ out.write("\t\t</fish>\n");
+ out.write("\t</virtualhost>\n");
+ out.write("</virtualhosts>\n");
+ out.write("</broker>\n");
+ out.close();
+
+ // Load config
+ ServerConfiguration config = new ServerConfiguration(mainFile.getAbsoluteFile());
+
+ // Test config
+ VirtualHostConfiguration testHost = config.getVirtualHostConfig("test");
+ ExchangeConfiguration testExchange = testHost.getExchangeConfiguration("test.topic");
+ VirtualHostConfiguration fishHost = config.getVirtualHostConfig("fish");
+ ExchangeConfiguration fishExchange = fishHost.getExchangeConfiguration("fish.topic");
+
+ assertEquals("Incorrect virtualhost count", 2, config.getVirtualHosts().length);
+ assertEquals("Incorrect virtualhost name", "test", testHost.getName());
+ assertFalse("Incorrect exchange durable property", testExchange.getDurable());
+ assertEquals("Incorrect virtualhost name", "fish", fishHost.getName());
+ assertTrue("Incorrect exchange durable property", fishExchange.getDurable());
+ }
+
+ /**
+ * Test that configuration loads correctly when virtual hosts are specified in an external
+ * configuration file only.
+ * <p>
+ * Test for QPID-2360
+ */
+ public void testExternalFirewallVirtualhostXMLFile() throws Exception
+ {
+ // Write out config
+ File mainFile = File.createTempFile(getClass().getName(), "config");
+ mainFile.deleteOnExit();
+ File vhostsFile = File.createTempFile(getClass().getName(), "vhosts");
+ vhostsFile.deleteOnExit();
+ writeConfigFile(mainFile, false, false, vhostsFile, null);
+ writeFirewallVhostsFile(vhostsFile, false);
+
+ // Load config
+ ApplicationRegistry reg = new ConfigurationFileApplicationRegistry(mainFile);
+ ApplicationRegistry.initialise(reg, 1);
+
+ // Test config
+ VirtualHostRegistry virtualHostRegistry = reg.getVirtualHostRegistry();
+ VirtualHost virtualHost = virtualHostRegistry.getVirtualHost("test");
+
+ assertEquals("Incorrect virtualhost count", 1, virtualHostRegistry.getVirtualHosts().size());
+ assertEquals("Incorrect virtualhost name", "test", virtualHost.getName());
+ }
+
+ /**
+ * Test that configuration loads correctly when the virtualhost configuration is a set of overriding
+ * configuration files that resets a property of a virtualhost. The opmost overriding configuration
+ * property value should be used.
+ * <p>
+ * Test for QPID-2361
+ */
+ public void testCombinedVirtualhostOverride() throws Exception
+ {
+ // Write out combined config file
+ File mainFile = File.createTempFile(getClass().getName(), "main");
+ File vhostsFile = File.createTempFile(getClass().getName(), "vhosts");
+ File fileA = File.createTempFile(getClass().getName(), "vhosts-override");
+ File fileB = File.createTempFile(getClass().getName(), "vhosts-base");
+ mainFile.deleteOnExit();
+ vhostsFile.deleteOnExit();
+ fileA.deleteOnExit();
+ fileB.deleteOnExit();
+ writeConfigFile(mainFile, true, false, vhostsFile, null);
+ writeCombinedConfigFile(vhostsFile, fileA, fileB);
+
+ // Write out overriding virtualhosts sections
+ FileWriter out = new FileWriter(fileA);
+ out.write("<virtualhosts>\n");
+ out.write("\t<virtualhost>\n");
+ out.write("\t\t<test>\n");
+ out.write("\t\t\t<exchanges>\n");
+ out.write("\t\t\t\t<exchange>\n");
+ out.write("\t\t\t\t\t<durable>false</durable>\n");
+ out.write("\t\t\t\t</exchange>\n");
+ out.write("\t\tt</exchanges>\n");
+ out.write("\t\t</test>\n");
+ out.write("\t</virtualhost>\n");
+ out.write("</virtualhosts>\n");
+ out.close();
+ writeVirtualHostsFile(fileB, "test");
+
+ // Load config
+ ServerConfiguration config = new ServerConfiguration(mainFile.getAbsoluteFile());
+
+ // Test config
+ VirtualHostConfiguration testHost = config.getVirtualHostConfig("test");
+ ExchangeConfiguration testExchange = testHost.getExchangeConfiguration("test.topic");
+
+ assertEquals("Incorrect virtualhost count", 1, config.getVirtualHosts().length);
+ assertEquals("Incorrect virtualhost name", "test", testHost.getName());
+ assertFalse("Incorrect exchange durable property", testExchange.getDurable());
+ }
+
+ /**
+ * Test that configuration loads correctly when the virtualhost configuration is a set of overriding
+ * configuration files that define multiple virtualhosts, one per file. Only the virtualhosts defined in
+ * the topmost file should be used.
+ * <p>
+ * Test for QPID-2361
+ */
+ public void testCombinedMultipleVirtualhosts() throws Exception
+ {
+ // Write out combined config file
+ File mainFile = File.createTempFile(getClass().getName(), "main");
+ File vhostsFile = File.createTempFile(getClass().getName(), "vhosts");
+ File fileA = File.createTempFile(getClass().getName(), "vhosts-one");
+ File fileB = File.createTempFile(getClass().getName(), "vhosts-two");
+ mainFile.deleteOnExit();
+ vhostsFile.deleteOnExit();
+ fileA.deleteOnExit();
+ fileB.deleteOnExit();
+ writeConfigFile(mainFile, true, false, vhostsFile, null);
+ writeCombinedConfigFile(vhostsFile, fileA, fileB);
+
+ // Write both virtualhosts definitions
+ writeVirtualHostsFile(fileA, "test-one");
+ writeVirtualHostsFile(fileB, "test-two");
+
+ // Load config
+ ServerConfiguration config = new ServerConfiguration(mainFile.getAbsoluteFile());
+
+ // Test config
+ VirtualHostConfiguration oneHost = config.getVirtualHostConfig("test-one");
+
+ assertEquals("Incorrect virtualhost count", 1, config.getVirtualHosts().length);
+ assertEquals("Incorrect virtualhost name", "test-one", oneHost.getName());
+ }
}
Modified: qpid/branches/qmf-devel0.7a/qpid/java/client/test/example_build.xml
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/java/client/test/example_build.xml?rev=929307&r1=929306&r2=929307&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/java/client/test/example_build.xml (original)
+++ qpid/branches/qmf-devel0.7a/qpid/java/client/test/example_build.xml Tue Mar 30 21:35:08 2010
@@ -66,7 +66,7 @@
<!-- Compile Java -->
<target name="compile" depends="init">
- <javac destdir="${example.classes}" debug="on">
+ <javac destdir="${example.classes}" debug="on" includeantruntime="false">
<classpath refid="example_amq.classpath"/>
<src path="${example.src}"/>
<exclude name="**/Test*.java"/>
Modified: qpid/branches/qmf-devel0.7a/qpid/java/common.xml
URL: http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/java/common.xml?rev=929307&r1=929306&r2=929307&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/java/common.xml (original)
+++ qpid/branches/qmf-devel0.7a/qpid/java/common.xml Tue Mar 30 21:35:08 2010
@@ -105,7 +105,7 @@
</macrodef>
<mkdir dir="${tasks.classes}"/>
- <javac source="${java.source}" target="${java.target}" srcdir="${tasks.src}" destdir="${tasks.classes}" classpath="${java.class.path}">
+ <javac source="${java.source}" target="${java.target}" srcdir="${tasks.src}" destdir="${tasks.classes}" classpath="${java.class.path}" includeantruntime="false">
<compilerarg line="${javac.compiler.args}"/>
</javac>
Propchange: qpid/branches/qmf-devel0.7a/qpid/java/lib/org.osgi.core_1.0.0.jar
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 30 21:35:08 2010
@@ -1,4 +1,4 @@
/incubator/qpid/trunk/qpid/java/lib/org.osgi.core_1.0.0.jar:443187-720930
/qpid/branches/java-broker-0-10/qpid/java/lib/org.osgi.core_1.0.0.jar:795950-829653
/qpid/branches/java-network-refactor/qpid/java/lib/org.osgi.core_1.0.0.jar:805429-821809
-/qpid/trunk/qpid/java/lib/org.osgi.core_1.0.0.jar:919043-928107
+/qpid/trunk/qpid/java/lib/org.osgi.core_1.0.0.jar:919043-929244
Propchange: qpid/branches/qmf-devel0.7a/qpid/java/management/client/src/main/java/org/apache/qpid/management/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 30 21:35:08 2010
@@ -1,4 +1,4 @@
/incubator/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management:443187-703176
/qpid/branches/java-broker-0-10/qpid/java/management/client/src/main/java/org/apache/qpid/management:795950-829653
/qpid/branches/java-network-refactor/qpid/java/management/client/src/main/java/org/apache/qpid/management:805429-821809
-/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management:919043-928107
+/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management:919043-929244
Propchange: qpid/branches/qmf-devel0.7a/qpid/java/management/client/src/test/java/org/apache/qpid/management/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 30 21:35:08 2010
@@ -1,4 +1,4 @@
/incubator/qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management:443187-703176
/qpid/branches/java-broker-0-10/qpid/java/management/client/src/test/java/org/apache/qpid/management:795950-829653
/qpid/branches/java-network-refactor/qpid/java/management/client/src/test/java/org/apache/qpid/management:805429-821809
-/qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management:919043-928107
+/qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management:919043-929244
Propchange: qpid/branches/qmf-devel0.7a/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ConfigurationManagement.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 30 21:35:08 2010
@@ -1,4 +1,4 @@
/qpid/branches/java-broker-0-10/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ConfigurationManagement.java:795950-829653
/qpid/branches/java-network-refactor/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ConfigurationManagement.java:805429-821809
/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/management/ConfigurationManagement.java:742626,743015,743028-743029,743304,743306,743311,743357,744113,747363,747367,747369-747370,747376,747783,747868-747870,747875,748561,748591,748641,748680,748686,749149,749282,749285,749315,749340,749572,753219-753220,753253,754934,754958,755256,757258,757270,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790
-/qpid/trunk/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ConfigurationManagement.java:919043-928107
+/qpid/trunk/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ConfigurationManagement.java:919043-929244
Propchange: qpid/branches/qmf-devel0.7a/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/LoggingManagement.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 30 21:35:08 2010
@@ -1,4 +1,4 @@
/qpid/branches/java-broker-0-10/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/LoggingManagement.java:795950-829653
/qpid/branches/java-network-refactor/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/LoggingManagement.java:805429-821809
/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/management/LoggingManagement.java:742626,743015,743028-743029,743304,743306,743311,743357,744113,747363,747367,747369-747370,747376,747783,747868-747870,747875,748561,748591,748641,748680,748686,749149,749282,749285,749315,749340,749572,753219-753220,753253,754934,754958,755256,757258,757270,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790
-/qpid/trunk/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/LoggingManagement.java:919043-928107
+/qpid/trunk/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/LoggingManagement.java:919043-929244
Propchange: qpid/branches/qmf-devel0.7a/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedBroker.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 30 21:35:08 2010
@@ -2,4 +2,4 @@
/qpid/branches/java-broker-0-10/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedBroker.java:795950-829653
/qpid/branches/java-network-refactor/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedBroker.java:805429-821809
/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/ManagedBroker.java:753219-753220,753253,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790
-/qpid/trunk/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedBroker.java:919043-928107
+/qpid/trunk/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedBroker.java:919043-929244
Propchange: qpid/branches/qmf-devel0.7a/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedConnection.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 30 21:35:08 2010
@@ -1,4 +1,4 @@
/qpid/branches/java-broker-0-10/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedConnection.java:795950-829653
/qpid/branches/java-network-refactor/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedConnection.java:805429-821809
/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/ManagedConnection.java:742626,743015,743028-743029,743304,743306,743311,743357,744113,747363,747367,747369-747370,747376,747783,747868-747870,747875,748561,748591,748641,748680,748686,749149,749282,749285,749315,749340,749572,753219-753220,753253,754934,754958,755256,757258,757270,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790
-/qpid/trunk/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedConnection.java:919043-928107
+/qpid/trunk/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedConnection.java:919043-929244
Propchange: qpid/branches/qmf-devel0.7a/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedExchange.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 30 21:35:08 2010
@@ -1,4 +1,4 @@
/qpid/branches/java-broker-0-10/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedExchange.java:795950-829653
/qpid/branches/java-network-refactor/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedExchange.java:805429-821809
/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/ManagedExchange.java:742626,743015,743028-743029,743304,743306,743311,743357,744113,747363,747367,747369-747370,747376,747783,747868-747870,747875,748561,748591,748641,748680,748686,749149,749282,749285,749315,749340,749572,753219-753220,753253,754934,754958,755256,757258,757270,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790
-/qpid/trunk/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedExchange.java:919043-928107
+/qpid/trunk/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedExchange.java:919043-929244
Propchange: qpid/branches/qmf-devel0.7a/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedQueue.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 30 21:35:08 2010
@@ -2,4 +2,4 @@
/qpid/branches/java-broker-0-10/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedQueue.java:795950-829653
/qpid/branches/java-network-refactor/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedQueue.java:805429-821809
/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/ManagedQueue.java:753219-753220,753253,757270,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790
-/qpid/trunk/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedQueue.java:919043-928107
+/qpid/trunk/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedQueue.java:919043-929244
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org