View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.configuration2.spring;
18  
19  import static org.junit.jupiter.api.Assertions.assertArrayEquals;
20  import static org.junit.jupiter.api.Assertions.assertEquals;
21  import static org.junit.jupiter.api.Assertions.assertNotNull;
22  import static org.junit.jupiter.api.Assertions.assertNull;
23  import static org.junit.jupiter.api.Assertions.assertThrows;
24  
25  import java.io.StringReader;
26  import java.util.Properties;
27  
28  import org.apache.commons.configuration2.BaseConfiguration;
29  import org.apache.commons.configuration2.Configuration;
30  import org.apache.commons.configuration2.PropertiesConfiguration;
31  import org.apache.commons.configuration2.PropertiesConfigurationLayout;
32  import org.apache.commons.configuration2.XMLConfiguration;
33  import org.junit.jupiter.api.BeforeEach;
34  import org.junit.jupiter.api.Test;
35  import org.springframework.core.io.ClassPathResource;
36  import org.springframework.core.io.Resource;
37  
38  /**
39   * Spring FactoryBean test.
40   */
41  public class TestConfigurationPropertiesFactoryBean {
42  
43      private ConfigurationPropertiesFactoryBean configurationFactory;
44  
45      @BeforeEach
46      public void setUp() {
47          configurationFactory = new ConfigurationPropertiesFactoryBean();
48      }
49  
50      @Test
51      public void testAfterPropertiesSet() throws Exception {
52          assertThrows(IllegalArgumentException.class, configurationFactory::afterPropertiesSet);
53      }
54  
55      @Test
56      public void testGetConfigurationDefensiveCopy() {
57          final Configuration[] configs = {new PropertiesConfiguration(), new XMLConfiguration()};
58          configurationFactory.setConfigurations(configs);
59  
60          final Configuration[] configsGet = configurationFactory.getConfigurations();
61          configsGet[0] = null;
62          assertArrayEquals(configs, configurationFactory.getConfigurations());
63      }
64  
65      @Test
66      public void testGetLocationsDefensiveCopy() {
67          final Resource[] locations = {new ClassPathResource("f1"), new ClassPathResource("f2")};
68          configurationFactory.setLocations(locations);
69  
70          final Resource[] locationsGet = configurationFactory.getLocations();
71          locationsGet[1] = null;
72          assertArrayEquals(locations, configurationFactory.getLocations());
73      }
74  
75      @Test
76      public void testGetObject() throws Exception {
77          configurationFactory.setConfigurations(new BaseConfiguration());
78          assertNull(configurationFactory.getObject());
79          configurationFactory.afterPropertiesSet();
80          assertNotNull(configurationFactory.getObject());
81      }
82  
83      @Test
84      public void testInitialConfiguration() throws Exception {
85          configurationFactory = new ConfigurationPropertiesFactoryBean(new BaseConfiguration());
86          configurationFactory.afterPropertiesSet();
87          assertNotNull(configurationFactory.getConfiguration());
88      }
89  
90      @Test
91      public void testLoadResources() throws Exception {
92          configurationFactory.setLocations(new ClassPathResource("testConfigurationFactoryBean.file"));
93          configurationFactory.setConfigurations(new BaseConfiguration());
94          configurationFactory.afterPropertiesSet();
95  
96          final Properties props = configurationFactory.getObject();
97          assertEquals("duke", props.getProperty("java"));
98      }
99  
100     @Test
101     public void testMergeConfigurations() throws Exception {
102         final Configuration one = new BaseConfiguration();
103         one.setProperty("foo", "bar");
104         final String properties = "## some header \n" + "foo = bar1\n" + "bar = foo\n";
105 
106         final PropertiesConfiguration two = new PropertiesConfiguration();
107         final PropertiesConfigurationLayout layout = new PropertiesConfigurationLayout();
108         layout.load(two, new StringReader(properties));
109 
110         configurationFactory.setConfigurations(one, two);
111         configurationFactory.afterPropertiesSet();
112         final Properties props = configurationFactory.getObject();
113         assertEquals("foo", props.getProperty("bar"));
114         assertEquals("bar", props.getProperty("foo"));
115     }
116 
117     @Test
118     public void testSetConfigurationsDefensiveCopy() {
119         final Configuration[] configs = {new PropertiesConfiguration(), new XMLConfiguration()};
120         final Configuration[] configsUpdate = configs.clone();
121 
122         configurationFactory.setConfigurations(configsUpdate);
123         configsUpdate[0] = null;
124         assertArrayEquals(configs, configurationFactory.getConfigurations());
125     }
126 
127     @Test
128     public void testSetLocationsDefensiveCopy() {
129         final Resource[] locations = {new ClassPathResource("f1"), new ClassPathResource("f2")};
130         final Resource[] locationsUpdate = locations.clone();
131 
132         configurationFactory.setLocations(locationsUpdate);
133         locationsUpdate[0] = new ClassPathResource("other");
134         assertArrayEquals(locations, configurationFactory.getLocations());
135     }
136 
137     @Test
138     public void testSetLocationsNull() {
139         configurationFactory.setLocations(null);
140         assertNull(configurationFactory.getLocations());
141     }
142 }