diff options
| author | Robert Gemmell <robbie@apache.org> | 2012-04-17 09:01:44 +0000 |
|---|---|---|
| committer | Robert Gemmell <robbie@apache.org> | 2012-04-17 09:01:44 +0000 |
| commit | 3203eea7641e1b0f39de96d797db7c54423b7f02 (patch) | |
| tree | f2563ba4a85ac54765d8f62663b60853846b3a89 /qpid/java/bdbstore/src/test | |
| parent | deab61acfe5f4edaae121cf6b9fa5d4b9e42803f (diff) | |
| download | qpid-python-3203eea7641e1b0f39de96d797db7c54423b7f02.tar.gz | |
QPID-3923: Store queue, exchange and binding as configured objects in bdb store
Applied patch by Oleksandr Rudyy <orudyy@gmail.com>, Phil Harvey <phil@philharveyonline.com>, and myself.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1327003 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/bdbstore/src/test')
7 files changed, 372 insertions, 39 deletions
diff --git a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreConfigurationTest.java b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreConfigurationTest.java new file mode 100644 index 0000000000..687c671566 --- /dev/null +++ b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreConfigurationTest.java @@ -0,0 +1,14 @@ +package org.apache.qpid.server.store.berkeleydb; + +import org.apache.qpid.server.store.DurableConfigurationStoreTest; +import org.apache.qpid.server.store.MessageStore; + +public class BDBMessageStoreConfigurationTest extends DurableConfigurationStoreTest +{ + @Override + protected MessageStore createStore() throws Exception + { + return new BDBMessageStore(); + } + +} diff --git a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java index 18e20f2ee8..a318187f13 100644 --- a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java +++ b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java @@ -23,6 +23,7 @@ package org.apache.qpid.server.store.berkeleydb; import java.nio.ByteBuffer; import java.util.Arrays; import java.util.List; +import java.util.UUID; import org.apache.qpid.AMQStoreException; import org.apache.qpid.framing.AMQShortString; import org.apache.qpid.framing.BasicContentHeaderProperties; @@ -36,6 +37,7 @@ import org.apache.qpid.server.message.MessageMetaData; import org.apache.qpid.server.message.MessageMetaData_0_10; import org.apache.qpid.server.message.MessageReference; import org.apache.qpid.server.message.ServerMessage; +import org.apache.qpid.server.model.UUIDGenerator; import org.apache.qpid.server.store.MessageMetaDataType; import org.apache.qpid.server.store.MessageStore; import org.apache.qpid.server.store.StorableMessageMetaData; @@ -405,13 +407,13 @@ public class BDBMessageStoreTest extends org.apache.qpid.server.store.MessageSto BDBMessageStore bdbStore = assertBDBStore(log); - final AMQShortString mockQueueName = new AMQShortString("queueName"); - + final UUID mockQueueId = UUIDGenerator.generateUUID(); TransactionLogResource mockQueue = new TransactionLogResource() { - public String getResourceName() + @Override + public UUID getId() { - return mockQueueName.asString(); + return mockQueueId; } }; @@ -421,7 +423,7 @@ public class BDBMessageStoreTest extends org.apache.qpid.server.store.MessageSto txn.enqueueMessage(mockQueue, new MockMessage(5L)); txn.commitTran(); - List<Long> enqueuedIds = bdbStore.getEnqueuedMessages(mockQueueName); + List<Long> enqueuedIds = bdbStore.getEnqueuedMessages(mockQueueId); assertEquals("Number of enqueued messages is incorrect", 2, enqueuedIds.size()); Long val = enqueuedIds.get(0); @@ -443,13 +445,13 @@ public class BDBMessageStoreTest extends org.apache.qpid.server.store.MessageSto BDBMessageStore bdbStore = assertBDBStore(log); - final AMQShortString mockQueueName = new AMQShortString("queueName"); - + final UUID mockQueueId = UUIDGenerator.generateUUID(); TransactionLogResource mockQueue = new TransactionLogResource() { - public String getResourceName() + @Override + public UUID getId() { - return mockQueueName.asString(); + return mockQueueId; } }; @@ -463,7 +465,7 @@ public class BDBMessageStoreTest extends org.apache.qpid.server.store.MessageSto txn.enqueueMessage(mockQueue, new MockMessage(23L)); txn.commitTran(); - List<Long> enqueuedIds = bdbStore.getEnqueuedMessages(mockQueueName); + List<Long> enqueuedIds = bdbStore.getEnqueuedMessages(mockQueueId); assertEquals("Number of enqueued messages is incorrect", 2, enqueuedIds.size()); Long val = enqueuedIds.get(0); @@ -484,13 +486,13 @@ public class BDBMessageStoreTest extends org.apache.qpid.server.store.MessageSto BDBMessageStore bdbStore = assertBDBStore(log); - final AMQShortString mockQueueName = new AMQShortString("queueName"); - + final UUID mockQueueId = UUIDGenerator.generateUUID(); TransactionLogResource mockQueue = new TransactionLogResource() { - public String getResourceName() + @Override + public UUID getId() { - return mockQueueName.asString(); + return mockQueueId; } }; @@ -507,7 +509,7 @@ public class BDBMessageStoreTest extends org.apache.qpid.server.store.MessageSto txn.enqueueMessage(mockQueue, new MockMessage(32L)); txn.commitTran(); - List<Long> enqueuedIds = bdbStore.getEnqueuedMessages(mockQueueName); + List<Long> enqueuedIds = bdbStore.getEnqueuedMessages(mockQueueId); assertEquals("Number of enqueued messages is incorrect", 2, enqueuedIds.size()); Long val = enqueuedIds.get(0); diff --git a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/tuple/ConfiguredObjectBindingTest.java b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/tuple/ConfiguredObjectBindingTest.java new file mode 100644 index 0000000000..f8aeb7f7b0 --- /dev/null +++ b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/tuple/ConfiguredObjectBindingTest.java @@ -0,0 +1,61 @@ +/* + * + * 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. + * + */ +package org.apache.qpid.server.store.berkeleydb.tuple; + +import junit.framework.TestCase; + +import org.apache.qpid.server.model.UUIDGenerator; +import org.apache.qpid.server.store.ConfiguredObjectRecord; + +import com.sleepycat.bind.tuple.TupleInput; +import com.sleepycat.bind.tuple.TupleOutput; + +public class ConfiguredObjectBindingTest extends TestCase +{ + + private ConfiguredObjectRecord _object; + + private static final String DUMMY_ATTRIBUTES_STRING = "dummyAttributes"; + private static final String DUMMY_TYPE_STRING = "dummyType"; + private ConfiguredObjectBinding _configuredObjectBinding; + + @Override + protected void setUp() throws Exception + { + super.setUp(); + _configuredObjectBinding = ConfiguredObjectBinding.getInstance(); + _object = new ConfiguredObjectRecord(UUIDGenerator.generateUUID(), DUMMY_TYPE_STRING, DUMMY_ATTRIBUTES_STRING); + } + + public void testObjectToEntryAndEntryToObject() + { + TupleOutput tupleOutput = new TupleOutput(); + + _configuredObjectBinding.objectToEntry(_object, tupleOutput); + + byte[] entryAsBytes = tupleOutput.getBufferBytes(); + TupleInput tupleInput = new TupleInput(entryAsBytes); + + ConfiguredObjectRecord storedObject = _configuredObjectBinding.entryToObject(tupleInput); + assertEquals("Unexpected attributes", DUMMY_ATTRIBUTES_STRING, storedObject.getAttributes()); + assertEquals("Unexpected type", DUMMY_TYPE_STRING, storedObject.getType()); + } +} diff --git a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/upgrade/AbstractUpgradeTestCase.java b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/upgrade/AbstractUpgradeTestCase.java index 6df2f8a8db..36991b90d0 100644 --- a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/upgrade/AbstractUpgradeTestCase.java +++ b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/upgrade/AbstractUpgradeTestCase.java @@ -22,10 +22,9 @@ package org.apache.qpid.server.store.berkeleydb.upgrade; import java.io.File; -import junit.framework.TestCase; - import org.apache.qpid.server.logging.LogSubject; import org.apache.qpid.server.logging.subjects.TestBlankSubject; +import org.apache.qpid.test.utils.QpidTestCase; import org.apache.qpid.util.FileUtils; import com.sleepycat.je.Database; @@ -33,7 +32,7 @@ import com.sleepycat.je.Environment; import com.sleepycat.je.EnvironmentConfig; import com.sleepycat.je.Transaction; -public abstract class AbstractUpgradeTestCase extends TestCase +public abstract class AbstractUpgradeTestCase extends QpidTestCase { protected static final class StaticAnswerHandler implements UpgradeInteractionHandler { @@ -57,7 +56,6 @@ public abstract class AbstractUpgradeTestCase extends TestCase public static int[] QUEUE_SIZES = { 1, 1, 10, 3 }; public static int TOTAL_MESSAGE_NUMBER = 15; protected static final LogSubject LOG_SUBJECT = new TestBlankSubject(); - protected static final String TMP_FOLDER = System.getProperty("java.io.tmpdir"); // one binding per exchange protected static final int TOTAL_BINDINGS = QUEUE_NAMES.length * 2; @@ -148,4 +146,8 @@ public abstract class AbstractUpgradeTestCase extends TestCase return count.longValue(); } + public String getVirtualHostName() + { + return getName(); + } } diff --git a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom4to5Test.java b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom4to5Test.java index c9103b1997..3f9e4e4aa1 100644 --- a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom4to5Test.java +++ b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom4to5Test.java @@ -66,7 +66,7 @@ public class UpgradeFrom4to5Test extends AbstractUpgradeTestCase public void testPerformUpgradeWithHandlerAnsweringYes() throws Exception { UpgradeFrom4To5 upgrade = new UpgradeFrom4To5(); - upgrade.performUpgrade(_environment, new StaticAnswerHandler(UpgradeInteractionResponse.YES)); + upgrade.performUpgrade(_environment, new StaticAnswerHandler(UpgradeInteractionResponse.YES), getVirtualHostName()); assertQueues(new HashSet<String>(Arrays.asList(QUEUE_NAMES))); @@ -93,7 +93,7 @@ public class UpgradeFrom4to5Test extends AbstractUpgradeTestCase public void testPerformUpgradeWithHandlerAnsweringNo() throws Exception { UpgradeFrom4To5 upgrade = new UpgradeFrom4To5(); - upgrade.performUpgrade(_environment, new StaticAnswerHandler(UpgradeInteractionResponse.NO)); + upgrade.performUpgrade(_environment, new StaticAnswerHandler(UpgradeInteractionResponse.NO), getVirtualHostName()); assertQueues(new HashSet<String>(Arrays.asList(DURABLE_SUBSCRIPTION_QUEUE, DURABLE_SUBSCRIPTION_QUEUE_WITH_SELECTOR, DURABLE_QUEUE))); assertDatabaseRecordCount(DELIVERY_DB_NAME, 12); diff --git a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom5To6Test.java b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom5To6Test.java index d73a777ca6..5297692820 100644 --- a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom5To6Test.java +++ b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom5To6Test.java @@ -20,14 +20,50 @@ */ package org.apache.qpid.server.store.berkeleydb.upgrade; +import static org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.CONFIGURED_OBJECTS_DB_NAME; +import static org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.NEW_CONTENT_DB_NAME; +import static org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.NEW_DELIVERY_DB_NAME; +import static org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.NEW_METADATA_DB_NAME; +import static org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.NEW_XID_DB_NAME; +import static org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.OLD_CONTENT_DB_NAME; +import static org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.OLD_XID_DB_NAME; + +import java.io.File; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.UUID; + import org.apache.log4j.Logger; +import org.apache.qpid.server.model.Binding; +import org.apache.qpid.server.model.Exchange; +import org.apache.qpid.server.model.Queue; +import org.apache.qpid.server.model.UUIDGenerator; +import org.apache.qpid.server.store.berkeleydb.entry.Xid; +import org.apache.qpid.server.store.berkeleydb.tuple.XidBinding; import org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.CompoundKey; import org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.CompoundKeyBinding; +import org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.ConfiguredObjectBinding; +import org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.UpgradeConfiguredObjectRecord; import org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.NewDataBinding; +import org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.NewPreparedTransaction; +import org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.NewPreparedTransactionBinding; +import org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.NewQueueEntryBinding; +import org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.NewQueueEntryKey; +import org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.NewRecordImpl; +import org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.OldPreparedTransaction; +import org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.OldPreparedTransactionBinding; +import org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.OldRecordImpl; +import org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.UpgradeUUIDBinding; +import org.apache.qpid.server.util.MapJsonSerializer; import com.sleepycat.bind.tuple.LongBinding; import com.sleepycat.je.Database; import com.sleepycat.je.DatabaseEntry; +import com.sleepycat.je.Environment; +import com.sleepycat.je.LockMode; import com.sleepycat.je.Transaction; public class UpgradeFrom5To6Test extends AbstractUpgradeTestCase @@ -43,10 +79,13 @@ public class UpgradeFrom5To6Test extends AbstractUpgradeTestCase public void testPerformUpgrade() throws Exception { UpgradeFrom5To6 upgrade = new UpgradeFrom5To6(); - upgrade.performUpgrade(_environment, UpgradeInteractionHandler.DEFAULT_HANDLER); + upgrade.performUpgrade(_environment, UpgradeInteractionHandler.DEFAULT_HANDLER, getVirtualHostName()); assertDatabaseRecordCounts(); assertContent(); + + assertConfiguredObjects(); + assertQueueEntries(); } public void testPerformUpgradeWithMissingMessageChunkKeepsIncompleteMessage() throws Exception @@ -54,9 +93,12 @@ public class UpgradeFrom5To6Test extends AbstractUpgradeTestCase corruptDatabase(); UpgradeFrom5To6 upgrade = new UpgradeFrom5To6(); - upgrade.performUpgrade(_environment, new StaticAnswerHandler(UpgradeInteractionResponse.YES)); + upgrade.performUpgrade(_environment, new StaticAnswerHandler(UpgradeInteractionResponse.YES), getVirtualHostName()); assertDatabaseRecordCounts(); + + assertConfiguredObjects(); + assertQueueEntries(); } public void testPerformUpgradeWithMissingMessageChunkDiscardsIncompleteMessage() throws Exception @@ -67,10 +109,117 @@ public class UpgradeFrom5To6Test extends AbstractUpgradeTestCase UpgradeInteractionHandler discardMessageInteractionHandler = new StaticAnswerHandler(UpgradeInteractionResponse.NO); - upgrade.performUpgrade(_environment, discardMessageInteractionHandler); + upgrade.performUpgrade(_environment, discardMessageInteractionHandler, getVirtualHostName()); + + assertDatabaseRecordCount(NEW_METADATA_DB_NAME, 11); + assertDatabaseRecordCount(NEW_CONTENT_DB_NAME, 11); + + assertConfiguredObjects(); + assertQueueEntries(); + } + + public void testPerformXidUpgrade() throws Exception + { + File storeLocation = new File(TMP_FOLDER, getName()); + storeLocation.mkdirs(); + Environment environment = createEnvironment(storeLocation); + try + { + populateOldXidEntries(environment); + UpgradeFrom5To6 upgrade = new UpgradeFrom5To6(); + upgrade.performUpgrade(environment, UpgradeInteractionHandler.DEFAULT_HANDLER, getVirtualHostName()); + assertXidEntries(environment); + } + finally + { + try + { + environment.close(); + } + finally + { + deleteDirectoryIfExists(storeLocation); + } + + } + } + + private void assertXidEntries(Environment environment) + { + final DatabaseEntry value = new DatabaseEntry(); + final DatabaseEntry key = getXidKey(); + new DatabaseTemplate(environment, NEW_XID_DB_NAME, null).run(new DatabaseRunnable() + { + + @Override + public void run(Database xidDatabase, Database nullDatabase, Transaction transaction) + { + xidDatabase.get(null, key, value, LockMode.DEFAULT); + } + }); + NewPreparedTransactionBinding newBinding = new NewPreparedTransactionBinding(); + NewPreparedTransaction newTransaction = newBinding.entryToObject(value); + NewRecordImpl[] newEnqueues = newTransaction.getEnqueues(); + NewRecordImpl[] newDequeues = newTransaction.getDequeues(); + assertEquals("Unxpected new enqueus number", 1, newEnqueues.length); + NewRecordImpl enqueue = newEnqueues[0]; + assertEquals("Unxpected queue id", UUIDGenerator.generateUUID("TEST1", getVirtualHostName()), enqueue.getId()); + assertEquals("Unxpected message id", 1, enqueue.getMessageNumber()); + assertEquals("Unxpected new dequeues number", 1, newDequeues.length); + NewRecordImpl dequeue = newDequeues[0]; + assertEquals("Unxpected queue id", UUIDGenerator.generateUUID("TEST2", getVirtualHostName()), dequeue.getId()); + assertEquals("Unxpected message id", 2, dequeue.getMessageNumber()); + } + + private void populateOldXidEntries(Environment environment) + { - assertDatabaseRecordCount("MESSAGE_METADATA", 11); - assertDatabaseRecordCount("MESSAGE_CONTENT", 11); + final DatabaseEntry value = new DatabaseEntry(); + OldRecordImpl[] enqueues = { new OldRecordImpl("TEST1", 1) }; + OldRecordImpl[] dequeues = { new OldRecordImpl("TEST2", 2) }; + OldPreparedTransaction oldPreparedTransaction = new OldPreparedTransaction(enqueues, dequeues); + OldPreparedTransactionBinding oldPreparedTransactionBinding = new OldPreparedTransactionBinding(); + oldPreparedTransactionBinding.objectToEntry(oldPreparedTransaction, value); + + final DatabaseEntry key = getXidKey(); + new DatabaseTemplate(environment, OLD_XID_DB_NAME, null).run(new DatabaseRunnable() + { + + @Override + public void run(Database xidDatabase, Database nullDatabase, Transaction transaction) + { + xidDatabase.put(null, key, value); + } + }); + } + + protected DatabaseEntry getXidKey() + { + final DatabaseEntry value = new DatabaseEntry(); + byte[] globalId = { 1 }; + byte[] branchId = { 2 }; + Xid xid = new Xid(1l, globalId, branchId); + XidBinding xidBinding = XidBinding.getInstance(); + xidBinding.objectToEntry(xid, value); + return value; + } + + private void assertQueueEntries() + { + final Map<UUID, UpgradeConfiguredObjectRecord> configuredObjects = loadConfiguredObjects(); + final NewQueueEntryBinding newBinding = new NewQueueEntryBinding(); + CursorOperation cursorOperation = new CursorOperation() + { + + @Override + public void processEntry(Database sourceDatabase, Database targetDatabase, Transaction transaction, + DatabaseEntry key, DatabaseEntry value) + { + NewQueueEntryKey newEntryRecord = newBinding.entryToObject(key); + assertTrue("Unexpected queue id", configuredObjects.containsKey(newEntryRecord.getQueueId())); + } + }; + new DatabaseTemplate(_environment, NEW_DELIVERY_DB_NAME, null).run(cursorOperation); } /** @@ -105,19 +254,124 @@ public class UpgradeFrom5To6Test extends AbstractUpgradeTestCase }; Transaction transaction = _environment.beginTransaction(null, null); - new DatabaseTemplate(_environment, "messageContentDb_v5", transaction).run(cursorOperation); + new DatabaseTemplate(_environment, OLD_CONTENT_DB_NAME, transaction).run(cursorOperation); transaction.commit(); } private void assertDatabaseRecordCounts() { - assertDatabaseRecordCount("EXCHANGES", 5); - assertDatabaseRecordCount("QUEUES", 3); - assertDatabaseRecordCount("QUEUE_BINDINGS", 6); - assertDatabaseRecordCount("DELIVERIES", 12); + assertDatabaseRecordCount(CONFIGURED_OBJECTS_DB_NAME, 9); + assertDatabaseRecordCount(NEW_DELIVERY_DB_NAME, 12); - assertDatabaseRecordCount("MESSAGE_METADATA", 12); - assertDatabaseRecordCount("MESSAGE_CONTENT", 12); + assertDatabaseRecordCount(NEW_METADATA_DB_NAME, 12); + assertDatabaseRecordCount(NEW_CONTENT_DB_NAME, 12); + } + + private void assertConfiguredObjects() + { + Map<UUID, UpgradeConfiguredObjectRecord> configuredObjects = loadConfiguredObjects(); + assertEquals("Unexpected number of configured objects", 9, configuredObjects.size()); + + Set<Map<String, Object>> expected = new HashSet<Map<String, Object>>(9); + Map<String, Object> queue1 = new HashMap<String, Object>(); + queue1.put("exclusive", Boolean.FALSE); + queue1.put("name", "myUpgradeQueue"); + queue1.put("owner", null); + expected.add(queue1); + Map<String, Object> queue2 = new HashMap<String, Object>(); + queue2.put("exclusive", Boolean.TRUE); + queue2.put("name", "clientid:mySelectorDurSubName"); + queue2.put("owner", "clientid"); + expected.add(queue2); + Map<String, Object> queue3 = new HashMap<String, Object>(); + queue3.put("exclusive", Boolean.TRUE); + queue3.put("name", "clientid:myDurSubName"); + queue3.put("owner", "clientid"); + expected.add(queue3); + + Map<String, Object> queueBinding1 = new HashMap<String, Object>(); + queueBinding1.put("queue", UUIDGenerator.generateUUID("myUpgradeQueue", getVirtualHostName()).toString()); + queueBinding1.put("name", "myUpgradeQueue"); + queueBinding1.put("exchange", UUIDGenerator.generateUUID("<<default>>", getVirtualHostName()).toString()); + expected.add(queueBinding1); + Map<String, Object> queueBinding2 = new HashMap<String, Object>(); + queueBinding2.put("queue", UUIDGenerator.generateUUID("myUpgradeQueue", getVirtualHostName()).toString()); + queueBinding2.put("name", "myUpgradeQueue"); + queueBinding2.put("exchange", UUIDGenerator.generateUUID("amq.direct", getVirtualHostName()).toString()); + Map<String, Object> arguments2 = new HashMap<String, Object>(); + arguments2.put("x-filter-jms-selector", ""); + queueBinding2.put("arguments", arguments2); + expected.add(queueBinding2); + Map<String, Object> queueBinding3 = new HashMap<String, Object>(); + queueBinding3.put("queue", UUIDGenerator.generateUUID("clientid:myDurSubName", getVirtualHostName()).toString()); + queueBinding3.put("name", "myUpgradeTopic"); + queueBinding3.put("exchange", UUIDGenerator.generateUUID("amq.topic", getVirtualHostName()).toString()); + Map<String, Object> arguments3 = new HashMap<String, Object>(); + arguments3.put("x-filter-jms-selector", ""); + queueBinding3.put("arguments", arguments3); + expected.add(queueBinding3); + Map<String, Object> queueBinding4 = new HashMap<String, Object>(); + queueBinding4.put("queue", UUIDGenerator.generateUUID("clientid:mySelectorDurSubName", getVirtualHostName()).toString()); + queueBinding4.put("name", "mySelectorUpgradeTopic"); + queueBinding4.put("exchange", UUIDGenerator.generateUUID("amq.topic", getVirtualHostName()).toString()); + Map<String, Object> arguments4 = new HashMap<String, Object>(); + arguments4.put("x-filter-jms-selector", "testprop='true'"); + queueBinding4.put("arguments", arguments4); + expected.add(queueBinding4); + Map<String, Object> queueBinding5 = new HashMap<String, Object>(); + queueBinding5.put("queue", UUIDGenerator.generateUUID("clientid:myDurSubName", getVirtualHostName()).toString()); + queueBinding5.put("name", "clientid:myDurSubName"); + queueBinding5.put("exchange", UUIDGenerator.generateUUID("<<default>>", getVirtualHostName()).toString()); + expected.add(queueBinding5); + Map<String, Object> queueBinding6 = new HashMap<String, Object>(); + queueBinding6.put("queue", UUIDGenerator.generateUUID("clientid:mySelectorDurSubName", getVirtualHostName()).toString()); + queueBinding6.put("name", "clientid:mySelectorDurSubName"); + queueBinding6.put("exchange", UUIDGenerator.generateUUID("<<default>>", getVirtualHostName()).toString()); + expected.add(queueBinding6); + + Set<String> expectedTypes = new HashSet<String>(); + expectedTypes.add(Queue.class.getName()); + expectedTypes.add(Exchange.class.getName()); + expectedTypes.add(Binding.class.getName()); + MapJsonSerializer jsonSerializer = new MapJsonSerializer(); + for (Entry<UUID, UpgradeConfiguredObjectRecord> entry : configuredObjects.entrySet()) + { + UpgradeConfiguredObjectRecord object = entry.getValue(); + UUID key = entry.getKey(); + Map<String, Object> deserialized = jsonSerializer.deserialize(object.getAttributes()); + assertTrue("Unexpected entry:" + object.getAttributes(), expected.remove(deserialized)); + String type = object.getType(); + assertTrue("Unexpected type:" + type, expectedTypes.contains(type)); + if (type.equals(Exchange.class.getName()) || type.equals(Queue.class.getName())) + { + assertEquals("Unexpected key", key, UUIDGenerator.generateUUID(((String) deserialized.get("name")), getVirtualHostName())); + } + else + { + assertNotNull("Key cannot be null", key); + } + } + assertTrue("Not all expected configured objects found:" + expected, expected.isEmpty()); + } + + private Map<UUID, UpgradeConfiguredObjectRecord> loadConfiguredObjects() + { + final Map<UUID, UpgradeConfiguredObjectRecord> configuredObjectsRecords = new HashMap<UUID, UpgradeConfiguredObjectRecord>(); + final ConfiguredObjectBinding binding = new ConfiguredObjectBinding(); + final UpgradeUUIDBinding uuidBinding = new UpgradeUUIDBinding(); + CursorOperation configuredObjectsCursor = new CursorOperation() + { + @Override + public void processEntry(Database sourceDatabase, Database targetDatabase, Transaction transaction, + DatabaseEntry key, DatabaseEntry value) + { + UUID id = uuidBinding.entryToObject(key); + UpgradeConfiguredObjectRecord object = binding.entryToObject(value); + configuredObjectsRecords.put(id, object); + } + }; + new DatabaseTemplate(_environment, CONFIGURED_OBJECTS_DB_NAME, null).run(configuredObjectsCursor); + return configuredObjectsRecords; } private void assertContent() @@ -127,8 +381,8 @@ public class UpgradeFrom5To6Test extends AbstractUpgradeTestCase { @Override - public void processEntry(Database sourceDatabase, Database targetDatabase, Transaction transaction, DatabaseEntry key, - DatabaseEntry value) + public void processEntry(Database sourceDatabase, Database targetDatabase, Transaction transaction, + DatabaseEntry key, DatabaseEntry value) { long id = LongBinding.entryToLong(key); assertTrue("Unexpected id", id > 0); @@ -136,6 +390,6 @@ public class UpgradeFrom5To6Test extends AbstractUpgradeTestCase assertNotNull("Unexpected content", content); } }; - new DatabaseTemplate(_environment, "MESSAGE_CONTENT", null).run(contentCursorOperation); + new DatabaseTemplate(_environment, NEW_CONTENT_DB_NAME, null).run(contentCursorOperation); } } diff --git a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgraderTest.java b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgraderTest.java index 99c4b7ab5b..ba5ca842bf 100644 --- a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgraderTest.java +++ b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgraderTest.java @@ -50,7 +50,7 @@ public class UpgraderTest extends AbstractUpgradeTestCase public void setUp() throws Exception { super.setUp(); - _upgrader = new Upgrader(_environment); + _upgrader = new Upgrader(_environment, getVirtualHostName()); } private int getStoreVersion() @@ -105,12 +105,12 @@ public class UpgraderTest extends AbstractUpgradeTestCase nonExistentStoreLocation.mkdir(); _environment = createEnvironment(nonExistentStoreLocation); - _upgrader = new Upgrader(_environment); + _upgrader = new Upgrader(_environment, getVirtualHostName()); _upgrader.upgradeIfNecessary(); List<String> databaseNames = _environment.getDatabaseNames(); List<String> expectedDatabases = new ArrayList<String>(); - expectedDatabases.add("VERSION"); + expectedDatabases.add(Upgrader.VERSION_DB_NAME); assertEquals("Expectedonly VERSION table in initially empty store after upgrade: ", expectedDatabases, databaseNames); assertEquals("Unexpected store version", BDBMessageStore.VERSION, getStoreVersion()); |
