From 997786858ca43a457c934e15cf84588883ccb8d2 Mon Sep 17 00:00:00 2001 From: Alex Rudyy Date: Wed, 1 Apr 2015 12:46:30 +0000 Subject: QPID-6446: Verify that store path is a writable folder on creation of derby virtual host and node git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1670629 13f79535-47bb-0310-9956-ffa450edef68 --- .../virtualhost/derby/DerbyVirtualHostImpl.java | 11 ++ .../derby/DerbyVirtualHostNodeImpl.java | 11 ++ .../derby/DerbyVirtualHostNodeTest.java | 175 +++++++++++++++++++++ 3 files changed, 197 insertions(+) create mode 100644 qpid/java/broker-plugins/derby-store/src/test/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNodeTest.java (limited to 'qpid/java/broker-plugins/derby-store/src') diff --git a/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhost/derby/DerbyVirtualHostImpl.java b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhost/derby/DerbyVirtualHostImpl.java index 5089090643..dbaf5e55b7 100644 --- a/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhost/derby/DerbyVirtualHostImpl.java +++ b/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhost/derby/DerbyVirtualHostImpl.java @@ -20,12 +20,14 @@ */ package org.apache.qpid.server.virtualhost.derby; +import org.apache.qpid.server.configuration.IllegalConfigurationException; import org.apache.qpid.server.model.ManagedAttributeField; import org.apache.qpid.server.model.ManagedObject; import org.apache.qpid.server.model.ManagedObjectFactoryConstructor; import org.apache.qpid.server.model.VirtualHostNode; import org.apache.qpid.server.store.MessageStore; import org.apache.qpid.server.store.derby.DerbyMessageStore; +import org.apache.qpid.server.util.FileHelper; import org.apache.qpid.server.virtualhost.AbstractVirtualHost; import java.util.Map; @@ -75,4 +77,13 @@ public class DerbyVirtualHostImpl extends AbstractVirtualHost _broker; + + @Override + public void setUp() throws Exception + { + super.setUp(); + _taskExecutor = new TaskExecutorImpl(); + _taskExecutor.start(); + _workDir = TestFileUtils.createTestDirectory("qpid.work_dir", true); + setTestSystemProperty("qpid.work_dir", _workDir.getAbsolutePath()); + _broker = createBroker(); + } + + public void tearDown() throws Exception + { + try + { + _broker.close(); + } + finally + { + _taskExecutor.stop(); + TestFileUtils.delete(_workDir, true); + super.tearDown(); + } + } + + public void testCreateAndCloseVirtualHostNode() throws Exception + { + String nodeName = getTestName(); + Map nodeData = new HashMap<>(); + nodeData.put(VirtualHostNode.NAME, nodeName); + nodeData.put(VirtualHostNode.TYPE, DerbyVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE); + + VirtualHostNode virtualHostNode = (VirtualHostNode)_broker.createChild(VirtualHostNode.class, nodeData); + virtualHostNode.start(); + virtualHostNode.close(); + } + + + public void testCreateDuplicateVirtualHostNodeAndClose() throws Exception + { + + String nodeName = getTestName(); + Map nodeData = new HashMap<>(); + nodeData.put(VirtualHostNode.NAME, nodeName); + nodeData.put(VirtualHostNode.TYPE, DerbyVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE); + + VirtualHostNode virtualHostNode = (VirtualHostNode)_broker.createChild(VirtualHostNode.class, nodeData); + virtualHostNode.start(); + + try + { + _broker.createChild(VirtualHostNode.class, nodeData); + } + catch(Exception e) + { + assertEquals("Unexpected message", "Child of type " + virtualHostNode.getClass().getSimpleName() + " already exists with name of " + getTestName(), e.getMessage()); + } + virtualHostNode.close(); + } + + public void testOnCreateValidationForFileStorePath() throws Exception + { + File file = new File(_workDir, getTestName()); + file.createNewFile(); + + String nodeName = getTestName(); + Map nodeData = new HashMap<>(); + nodeData.put(VirtualHostNode.NAME, nodeName); + nodeData.put(VirtualHostNode.TYPE, DerbyVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE); + nodeData.put(DerbyVirtualHostNodeImpl.STORE_PATH, file.getAbsolutePath()); + try + { + _broker.createChild(VirtualHostNode.class, nodeData); + fail("Cannot create store for the file store path"); + } + catch(IllegalConfigurationException e) + { + // pass + } + + } + + + public void testOnCreateValidationForNonWritableStorePath() throws Exception + { + if (Files.getFileStore(_workDir.toPath()).supportsFileAttributeView(PosixFileAttributeView.class)) + { + File file = new File(_workDir, getTestName()); + file.mkdirs(); + if (file.setWritable(false, false)) + { + String nodeName = getTestName(); + Map nodeData = new HashMap<>(); + nodeData.put(VirtualHostNode.NAME, nodeName); + nodeData.put(VirtualHostNode.TYPE, DerbyVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE); + nodeData.put(DerbyVirtualHostNodeImpl.STORE_PATH, file.getAbsolutePath()); + try + { + _broker.createChild(VirtualHostNode.class, nodeData); + fail("Cannot create store for the non writable store path"); + } + catch (IllegalConfigurationException e) + { + // pass + } + } + } + } + + private BrokerAdapter createBroker() + { + Map brokerAttributes = Collections.singletonMap(Broker.NAME, "Broker"); + SystemConfig parent = mock(SystemConfig.class); + when(parent.getEventLogger()).thenReturn(new EventLogger()); + when(parent.getCategoryClass()).thenReturn(SystemConfig.class); + when(parent.getTaskExecutor()).thenReturn(_taskExecutor); + when(parent.getChildExecutor()).thenReturn(_taskExecutor); + when(parent.getModel()).thenReturn(BrokerModel.getInstance()); + when(parent.getObjectFactory()).thenReturn(new ConfiguredObjectFactoryImpl(BrokerModel.getInstance())); + BrokerAdapter broker = new BrokerAdapter(brokerAttributes, parent); + broker.start(); + return broker; + } +} -- cgit v1.2.1