From c04ae6ba199c5b7a0fee15da1695ee113b3ae37d Mon Sep 17 00:00:00 2001 From: Davide D'Alto Date: Wed, 26 Oct 2011 22:57:28 +0100 Subject: [PATCH 1/2] ARQ-622 Support global configuration --- .../extension/ConfigurationRegistrar.java | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/config/impl-base/src/main/java/org/jboss/arquillian/config/impl/extension/ConfigurationRegistrar.java b/config/impl-base/src/main/java/org/jboss/arquillian/config/impl/extension/ConfigurationRegistrar.java index 3ca9cb596..deefb44e6 100644 --- a/config/impl-base/src/main/java/org/jboss/arquillian/config/impl/extension/ConfigurationRegistrar.java +++ b/config/impl-base/src/main/java/org/jboss/arquillian/config/impl/extension/ConfigurationRegistrar.java @@ -16,7 +16,12 @@ */ package org.jboss.arquillian.config.impl.extension; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.InputStream; +import java.util.logging.Level; +import java.util.logging.Logger; import org.jboss.arquillian.config.descriptor.api.ArquillianDescriptor; import org.jboss.arquillian.core.api.InstanceProducer; @@ -34,9 +39,14 @@ */ public class ConfigurationRegistrar { + private static final Logger log = Logger.getLogger(ConfigurationRegistrar.class.getName()); + static final String ARQUILLIAN_XML_PROPERTY = "arquillian.xml"; static final String ARQUILLIAN_XML_DEFAULT = "arquillian.xml"; + static final String ARQUILLIAN_XML_FOLDER_PROPERTY = "arquillian.xml.folder.path"; + static final String ARQUILLIAN_XML_FOLDER_DEFAULT = System.getProperty("user.home") + File.separator + ".arquillian"; + @Inject @ApplicationScoped private InstanceProducer descriptorInst; @@ -60,6 +70,15 @@ public void loadConfiguration(@Observes ManagerStarted event) } private InputStream loadArquillianXml() + { + InputStream arquillianXml = loadLocalArquillianXml(); + if (arquillianXml == null) + return loadGlobalArquillianXml(); + + return arquillianXml; + } + + private InputStream loadLocalArquillianXml() { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); return classLoader.getResourceAsStream(getConfigFileName()); @@ -74,4 +93,40 @@ private String getConfigFileName() } return name; } + + private InputStream loadGlobalArquillianXml() + { + try + { + return getGlobalArquillianXml(); + } + catch (FileNotFoundException e) + { + log.log(Level.WARNING, "Exception while reading global configuration", e); + return null; + } + } + + private InputStream getGlobalArquillianXml() throws FileNotFoundException + { + File globalFolder = new File(getConfigFolderPath()); + if (globalFolder.exists()) { + File globalArquillianXml = new File(globalFolder + File.separator + getConfigFileName()); + if (globalArquillianXml.exists()) { + return new FileInputStream(globalArquillianXml); + } + } + return null; + } + + private String getConfigFolderPath() + { + String folderPath = System.getProperty(ARQUILLIAN_XML_FOLDER_PROPERTY); + + if (folderPath == null) + return ARQUILLIAN_XML_FOLDER_DEFAULT; + + return folderPath; + } + } From 3f3eaafe3edf7f592cd4fa439a349183b08f634d Mon Sep 17 00:00:00 2001 From: Davide D'Alto Date: Sun, 30 Oct 2011 10:15:30 +0000 Subject: [PATCH 2/2] ARQ-622 Test cases for global configuration --- ...nFolderDoesNotExistsRegistrarTestCase.java | 64 +++++++++++++++ ...tionFolderPrioritiesRegistrarTestCase.java | 70 +++++++++++++++++ .../ConfigurationFolderRegistrarTestCase.java | 78 +++++++++++++++++++ .../ConfigurationPathRegistrarTestCase.java | 71 +++++++++++++++++ ...ationPathWithSysPropRegistrarTestCase.java | 78 +++++++++++++++++++ ...PrioritiesRegistrarTestCase_arquillian.xml | 4 + ...PrioritiesRegistrarTestCase_arquillian.xml | 4 + ...rationPathRegistrarTestCase_arquillian.xml | 4 + ...ithSysPropRegistrarTestCase_arquillian.xml | 4 + .../test/resources/settings/arquillian.xml | 4 + 10 files changed, 381 insertions(+) create mode 100644 config/impl-base/src/test/java/org/jboss/arquillian/config/impl/extension/ConfigurationFolderDoesNotExistsRegistrarTestCase.java create mode 100644 config/impl-base/src/test/java/org/jboss/arquillian/config/impl/extension/ConfigurationFolderPrioritiesRegistrarTestCase.java create mode 100644 config/impl-base/src/test/java/org/jboss/arquillian/config/impl/extension/ConfigurationFolderRegistrarTestCase.java create mode 100644 config/impl-base/src/test/java/org/jboss/arquillian/config/impl/extension/ConfigurationPathRegistrarTestCase.java create mode 100644 config/impl-base/src/test/java/org/jboss/arquillian/config/impl/extension/ConfigurationPathWithSysPropRegistrarTestCase.java create mode 100644 config/impl-base/src/test/resources/ConfigurationFolderPrioritiesRegistrarTestCase_arquillian.xml create mode 100644 config/impl-base/src/test/resources/settings/ConfigurationFolderPrioritiesRegistrarTestCase_arquillian.xml create mode 100644 config/impl-base/src/test/resources/settings/ConfigurationPathRegistrarTestCase_arquillian.xml create mode 100644 config/impl-base/src/test/resources/settings/ConfigurationPathWithSysPropRegistrarTestCase_arquillian.xml create mode 100644 config/impl-base/src/test/resources/settings/arquillian.xml diff --git a/config/impl-base/src/test/java/org/jboss/arquillian/config/impl/extension/ConfigurationFolderDoesNotExistsRegistrarTestCase.java b/config/impl-base/src/test/java/org/jboss/arquillian/config/impl/extension/ConfigurationFolderDoesNotExistsRegistrarTestCase.java new file mode 100644 index 000000000..89ae4500e --- /dev/null +++ b/config/impl-base/src/test/java/org/jboss/arquillian/config/impl/extension/ConfigurationFolderDoesNotExistsRegistrarTestCase.java @@ -0,0 +1,64 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat Middleware LLC, and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * Licensed 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.jboss.arquillian.config.impl.extension; + +import java.util.List; + +import org.jboss.arquillian.config.descriptor.api.ArquillianDescriptor; +import org.jboss.arquillian.config.descriptor.impl.AssertXPath; +import org.jboss.arquillian.core.api.Instance; +import org.jboss.arquillian.core.api.annotation.Inject; +import org.jboss.arquillian.core.test.AbstractManagerTestBase; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * + * @author Davide D'Alto + */ +public class ConfigurationFolderDoesNotExistsRegistrarTestCase extends AbstractManagerTestBase +{ + @Inject + private Instance arquillianXmlDesc; + + @BeforeClass + public static void setSysprops() + { + System.setProperty(ConfigurationRegistrar.ARQUILLIAN_XML_FOLDER_PROPERTY, "WRONG_PATH"); + } + + @AfterClass + public static void clearSysprops() + { + System.clearProperty(ConfigurationRegistrar.ARQUILLIAN_XML_FOLDER_PROPERTY); + } + + @Test + public void shouldUseDefaultDescriptorWhenFolderDoesnNotExists() throws Exception + { + final String xml = arquillianXmlDesc.get().exportAsString(); + AssertXPath.assertXPath(xml, "/arquillian/*"); + } + + @Override + protected void addExtensions(final List> extensions) + { + extensions.add(ConfigurationRegistrar.class); + super.addExtensions(extensions); + } +} \ No newline at end of file diff --git a/config/impl-base/src/test/java/org/jboss/arquillian/config/impl/extension/ConfigurationFolderPrioritiesRegistrarTestCase.java b/config/impl-base/src/test/java/org/jboss/arquillian/config/impl/extension/ConfigurationFolderPrioritiesRegistrarTestCase.java new file mode 100644 index 000000000..b2731b4aa --- /dev/null +++ b/config/impl-base/src/test/java/org/jboss/arquillian/config/impl/extension/ConfigurationFolderPrioritiesRegistrarTestCase.java @@ -0,0 +1,70 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat Middleware LLC, and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * Licensed 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.jboss.arquillian.config.impl.extension; + +import java.util.List; + +import org.jboss.arquillian.config.descriptor.api.ArquillianDescriptor; +import org.jboss.arquillian.config.descriptor.impl.AssertXPath; +import org.jboss.arquillian.core.api.Instance; +import org.jboss.arquillian.core.api.annotation.Inject; +import org.jboss.arquillian.core.test.AbstractManagerTestBase; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * + * @author Davide D'Alto + */ +public class ConfigurationFolderPrioritiesRegistrarTestCase extends AbstractManagerTestBase +{ + private static final String CLASS_NAME = ConfigurationFolderPrioritiesRegistrarTestCase.class.getSimpleName(); + + @Inject + private Instance arquillianXmlDesc; + + @BeforeClass + public static void setSysprops() + { + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + String folderPath = classLoader.getResource("settings").getFile(); + System.setProperty(ConfigurationRegistrar.ARQUILLIAN_XML_FOLDER_PROPERTY, folderPath); + System.setProperty(ConfigurationRegistrar.ARQUILLIAN_XML_PROPERTY, CLASS_NAME + "_arquillian.xml"); + } + + @AfterClass + public static void clearSysprops() + { + System.clearProperty(ConfigurationRegistrar.ARQUILLIAN_XML_FOLDER_PROPERTY); + System.clearProperty(ConfigurationRegistrar.ARQUILLIAN_XML_PROPERTY); + } + + @Test + public void shouldIgnoreTheGlobalConfigurationAndUseTheLocal() throws Exception + { + final String xml = arquillianXmlDesc.get().exportAsString(); + AssertXPath.assertXPath(xml, "/arquillian/container/@qualifier", CLASS_NAME); + } + + @Override + protected void addExtensions(final List> extensions) + { + extensions.add(ConfigurationRegistrar.class); + super.addExtensions(extensions); + } +} diff --git a/config/impl-base/src/test/java/org/jboss/arquillian/config/impl/extension/ConfigurationFolderRegistrarTestCase.java b/config/impl-base/src/test/java/org/jboss/arquillian/config/impl/extension/ConfigurationFolderRegistrarTestCase.java new file mode 100644 index 000000000..8fe7d439a --- /dev/null +++ b/config/impl-base/src/test/java/org/jboss/arquillian/config/impl/extension/ConfigurationFolderRegistrarTestCase.java @@ -0,0 +1,78 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat Middleware LLC, and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * Licensed 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.jboss.arquillian.config.impl.extension; + +import java.io.File; +import java.util.List; + +import junit.framework.Assert; + +import org.jboss.arquillian.config.descriptor.api.ArquillianDescriptor; +import org.jboss.arquillian.config.descriptor.impl.AssertXPath; +import org.jboss.arquillian.core.api.Instance; +import org.jboss.arquillian.core.api.annotation.Inject; +import org.jboss.arquillian.core.test.AbstractManagerTestBase; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * + * @author Davide D'Alto + */ +public class ConfigurationFolderRegistrarTestCase extends AbstractManagerTestBase +{ + @Inject + private Instance arquillianXmlDesc; + + @BeforeClass + public static void setSysprops() + { + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + String folderPath = classLoader.getResource("settings").getFile(); + System.setProperty(ConfigurationRegistrar.ARQUILLIAN_XML_FOLDER_PROPERTY, folderPath); + } + + @AfterClass + public static void clearSysprops() + { + System.clearProperty(ConfigurationRegistrar.ARQUILLIAN_XML_FOLDER_PROPERTY); + } + + @Test + public void testDefaultFolder() throws Exception + { + String expected = System.getProperty("user.home") + File.separator + ".arquillian"; + String actual = ConfigurationRegistrar.ARQUILLIAN_XML_FOLDER_DEFAULT; + + Assert.assertEquals("Unexpected default location", expected, actual); + } + + @Test + public void shouldFindArquillianXmlInSelectedFolder() throws Exception + { + final String xml = arquillianXmlDesc.get().exportAsString(); + AssertXPath.assertXPath(xml, "/arquillian/container/@qualifier", ConfigurationFolderRegistrarTestCase.class.getSimpleName()); + } + + @Override + protected void addExtensions(final List> extensions) + { + extensions.add(ConfigurationRegistrar.class); + super.addExtensions(extensions); + } +} diff --git a/config/impl-base/src/test/java/org/jboss/arquillian/config/impl/extension/ConfigurationPathRegistrarTestCase.java b/config/impl-base/src/test/java/org/jboss/arquillian/config/impl/extension/ConfigurationPathRegistrarTestCase.java new file mode 100644 index 000000000..782606915 --- /dev/null +++ b/config/impl-base/src/test/java/org/jboss/arquillian/config/impl/extension/ConfigurationPathRegistrarTestCase.java @@ -0,0 +1,71 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat Middleware LLC, and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * Licensed 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.jboss.arquillian.config.impl.extension; + +import java.util.List; + +import org.jboss.arquillian.config.descriptor.api.ArquillianDescriptor; +import org.jboss.arquillian.config.descriptor.impl.AssertXPath; +import org.jboss.arquillian.core.api.Instance; +import org.jboss.arquillian.core.api.annotation.Inject; +import org.jboss.arquillian.core.test.AbstractManagerTestBase; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * + * @author Davide D'Alto + */ +public class ConfigurationPathRegistrarTestCase extends AbstractManagerTestBase +{ + private static final String CLASS_NAME = ConfigurationFolderPrioritiesRegistrarTestCase.class.getSimpleName(); + + @Inject + private Instance arquillianXmlDesc; + + @BeforeClass + public static void setSysprops() + { + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + String folderPath = classLoader.getResource("settings").getFile(); + System.setProperty(ConfigurationRegistrar.ARQUILLIAN_XML_FOLDER_PROPERTY, folderPath); + + System.setProperty(ConfigurationRegistrar.ARQUILLIAN_XML_PROPERTY, CLASS_NAME + "_arquillian.xml"); + } + + @AfterClass + public static void clearSysprops() + { + System.clearProperty(ConfigurationRegistrar.ARQUILLIAN_XML_FOLDER_PROPERTY); + System.clearProperty(ConfigurationRegistrar.ARQUILLIAN_XML_PROPERTY); + } + + @Test + public void shouldUseSelectedFileAsArquillianXml() throws Exception + { + final String xml = arquillianXmlDesc.get().exportAsString(); + AssertXPath.assertXPath(xml, "/arquillian/container/@qualifier", CLASS_NAME); + } + + @Override + protected void addExtensions(final List> extensions) + { + extensions.add(ConfigurationRegistrar.class); + super.addExtensions(extensions); + } +} diff --git a/config/impl-base/src/test/java/org/jboss/arquillian/config/impl/extension/ConfigurationPathWithSysPropRegistrarTestCase.java b/config/impl-base/src/test/java/org/jboss/arquillian/config/impl/extension/ConfigurationPathWithSysPropRegistrarTestCase.java new file mode 100644 index 000000000..cadcdb0a6 --- /dev/null +++ b/config/impl-base/src/test/java/org/jboss/arquillian/config/impl/extension/ConfigurationPathWithSysPropRegistrarTestCase.java @@ -0,0 +1,78 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat Middleware LLC, and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * Licensed 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.jboss.arquillian.config.impl.extension; + +import java.util.List; + +import org.jboss.arquillian.config.descriptor.api.ArquillianDescriptor; +import org.jboss.arquillian.config.descriptor.impl.AssertXPath; +import org.jboss.arquillian.core.api.Instance; +import org.jboss.arquillian.core.api.annotation.Inject; +import org.jboss.arquillian.core.test.AbstractManagerTestBase; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * + * @author Davide D'Alto + */ +public class ConfigurationPathWithSysPropRegistrarTestCase extends AbstractManagerTestBase +{ + + private static final String CLASS_NAME = ConfigurationFolderPrioritiesRegistrarTestCase.class.getSimpleName(); + + private static final String SYS_PROP = "arquillian.qualifier"; + + private static final String SYS_PROP_VALUE = CLASS_NAME; + + @Inject + private Instance arquillianXmlDesc; + + @BeforeClass + public static void setSysprops() + { + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + String folderPath = classLoader.getResource("settings").getFile(); + System.setProperty(ConfigurationRegistrar.ARQUILLIAN_XML_FOLDER_PROPERTY, folderPath); + + System.setProperty(ConfigurationRegistrar.ARQUILLIAN_XML_PROPERTY, CLASS_NAME + "_arquillian.xml"); + System.setProperty(SYS_PROP, SYS_PROP_VALUE); + } + + @AfterClass + public static void clearSysprops() + { + System.clearProperty(ConfigurationRegistrar.ARQUILLIAN_XML_FOLDER_PROPERTY); + System.clearProperty(ConfigurationRegistrar.ARQUILLIAN_XML_PROPERTY); + System.clearProperty(SYS_PROP); + } + + @Test + public void shouldReplacePropertyInSelectedArquillianXml() throws Exception + { + final String xml = arquillianXmlDesc.get().exportAsString(); + AssertXPath.assertXPath(xml, "/arquillian/container/@qualifier", SYS_PROP_VALUE); + } + + @Override + protected void addExtensions(final List> extensions) + { + extensions.add(ConfigurationRegistrar.class); + super.addExtensions(extensions); + } +} diff --git a/config/impl-base/src/test/resources/ConfigurationFolderPrioritiesRegistrarTestCase_arquillian.xml b/config/impl-base/src/test/resources/ConfigurationFolderPrioritiesRegistrarTestCase_arquillian.xml new file mode 100644 index 000000000..5d12f4fdb --- /dev/null +++ b/config/impl-base/src/test/resources/ConfigurationFolderPrioritiesRegistrarTestCase_arquillian.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/config/impl-base/src/test/resources/settings/ConfigurationFolderPrioritiesRegistrarTestCase_arquillian.xml b/config/impl-base/src/test/resources/settings/ConfigurationFolderPrioritiesRegistrarTestCase_arquillian.xml new file mode 100644 index 000000000..07a6e6874 --- /dev/null +++ b/config/impl-base/src/test/resources/settings/ConfigurationFolderPrioritiesRegistrarTestCase_arquillian.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/config/impl-base/src/test/resources/settings/ConfigurationPathRegistrarTestCase_arquillian.xml b/config/impl-base/src/test/resources/settings/ConfigurationPathRegistrarTestCase_arquillian.xml new file mode 100644 index 000000000..2b51b4c14 --- /dev/null +++ b/config/impl-base/src/test/resources/settings/ConfigurationPathRegistrarTestCase_arquillian.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/config/impl-base/src/test/resources/settings/ConfigurationPathWithSysPropRegistrarTestCase_arquillian.xml b/config/impl-base/src/test/resources/settings/ConfigurationPathWithSysPropRegistrarTestCase_arquillian.xml new file mode 100644 index 000000000..07ff44761 --- /dev/null +++ b/config/impl-base/src/test/resources/settings/ConfigurationPathWithSysPropRegistrarTestCase_arquillian.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/config/impl-base/src/test/resources/settings/arquillian.xml b/config/impl-base/src/test/resources/settings/arquillian.xml new file mode 100644 index 000000000..eb62d9053 --- /dev/null +++ b/config/impl-base/src/test/resources/settings/arquillian.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file