diff options
| author | Alex Rudyy <orudyy@apache.org> | 2015-04-01 12:46:30 +0000 |
|---|---|---|
| committer | Alex Rudyy <orudyy@apache.org> | 2015-04-01 12:46:30 +0000 |
| commit | 997786858ca43a457c934e15cf84588883ccb8d2 (patch) | |
| tree | 49b5e96dbd389a3ac7b1748c477f553ed7d43062 /qpid/java/broker-core/src | |
| parent | 3fa59ae052adc930209ff47e3223262a03f12ccc (diff) | |
| download | qpid-python-997786858ca43a457c934e15cf84588883ccb8d2.tar.gz | |
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
Diffstat (limited to 'qpid/java/broker-core/src')
3 files changed, 66 insertions, 2 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/util/FileHelper.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/util/FileHelper.java index 0e1a28f220..a13e3f52f9 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/util/FileHelper.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/util/FileHelper.java @@ -130,4 +130,30 @@ public class FileHelper } } } + + public boolean isWritableDirectory(String path) + { + File storePath = new File(path); + if (storePath.exists()) + { + if (!storePath.isDirectory()) + { + return false; + } + } + else + { + do + { + storePath = storePath.getParentFile(); + if (storePath == null) + { + return false; + } + } + while (!storePath.exists()); + } + return storePath.canWrite(); + } + } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java index 76fbb4f48e..e0b0d37cbe 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java @@ -297,7 +297,7 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte - private void validateMessageStoreCreation() + protected void validateMessageStoreCreation() { MessageStore store = createMessageStore(); if (store != null) diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/FileHelperTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/FileHelperTest.java index 9d47ed496a..27581fa60f 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/FileHelperTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/FileHelperTest.java @@ -27,10 +27,11 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.attribute.PosixFileAttributeView; import java.nio.file.attribute.PosixFilePermission; -import java.nio.file.attribute.PosixFilePermissions; import java.util.Set; import org.apache.qpid.test.utils.QpidTestCase; +import org.apache.qpid.test.utils.TestFileUtils; +import org.apache.qpid.util.FileUtils; public class FileHelperTest extends QpidTestCase { @@ -121,6 +122,43 @@ public class FileHelperTest extends QpidTestCase } } + public void testIsWritableDirectoryForFilePath() throws Exception + { + File workDir = TestFileUtils.createTestDirectory("test", true); + try + { + File file = new File(workDir, getTestName()); + file.createNewFile(); + assertFalse("Should return false for a file", _fileHelper.isWritableDirectory(file.getAbsolutePath())); + } + finally + { + FileUtils.delete(workDir, true); + } + } + + + public void testIsWritableDirectoryForNonWritablePath() throws Exception + { + File workDir = TestFileUtils.createTestDirectory("test", true); + try + { + if (Files.getFileStore(workDir.toPath()).supportsFileAttributeView(PosixFileAttributeView.class)) + { + File file = new File(workDir, getTestName()); + file.mkdirs(); + if (file.setWritable(false, false)) + { + assertFalse("Should return false for non writable folder", + _fileHelper.isWritableDirectory(new File(file, "test").getAbsolutePath())); + } + } + } + finally + { + FileUtils.delete(workDir, true); + } + } private void assertPermissions(Path path) throws IOException { |
