You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by dr...@apache.org on 2015/01/21 03:33:05 UTC
directory-kerberos git commit: DIRKRB-140 Section support in
Configuration. Contributed by Lin Chen
Repository: directory-kerberos
Updated Branches:
refs/heads/master 6b83abe96 -> dfddb4d3b
DIRKRB-140 Section support in Configuration. Contributed by Lin Chen
Project: http://git-wip-us.apache.org/repos/asf/directory-kerberos/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerberos/commit/dfddb4d3
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerberos/tree/dfddb4d3
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerberos/diff/dfddb4d3
Branch: refs/heads/master
Commit: dfddb4d3b07bf18e3601c18d663e7f403b5e2b06
Parents: 6b83abe
Author: drankye <dr...@gmail.com>
Authored: Wed Jan 21 18:29:54 2015 +0800
Committer: drankye <dr...@gmail.com>
Committed: Wed Jan 21 18:29:54 2015 +0800
----------------------------------------------------------------------
.../main/java/org/apache/haox/config/Conf.java | 2 +-
.../java/org/apache/haox/config/ConfigImpl.java | 65 ++++++++++----------
.../java/org/apache/haox/config/ConfTest.java | 40 ++++++++++--
.../org/apache/haox/config/ConfigImplTest.java | 62 +++++++++++++++++++
4 files changed, 132 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/dfddb4d3/contrib/haox-config/src/main/java/org/apache/haox/config/Conf.java
----------------------------------------------------------------------
diff --git a/contrib/haox-config/src/main/java/org/apache/haox/config/Conf.java b/contrib/haox-config/src/main/java/org/apache/haox/config/Conf.java
index f6ca51c..caa9651 100644
--- a/contrib/haox-config/src/main/java/org/apache/haox/config/Conf.java
+++ b/contrib/haox-config/src/main/java/org/apache/haox/config/Conf.java
@@ -98,7 +98,7 @@ public class Conf implements Config {
} else {
for (ConfigLoader loader : resourceConfigs) {
Config loaded = loader.load();
- config.set(loaded.getResource(), loaded);
+ config.add(loaded);
}
}
}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/dfddb4d3/contrib/haox-config/src/main/java/org/apache/haox/config/ConfigImpl.java
----------------------------------------------------------------------
diff --git a/contrib/haox-config/src/main/java/org/apache/haox/config/ConfigImpl.java b/contrib/haox-config/src/main/java/org/apache/haox/config/ConfigImpl.java
index 058d98b..470ee88 100644
--- a/contrib/haox-config/src/main/java/org/apache/haox/config/ConfigImpl.java
+++ b/contrib/haox-config/src/main/java/org/apache/haox/config/ConfigImpl.java
@@ -6,16 +6,16 @@
* 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.haox.config;
@@ -25,23 +25,26 @@ import org.slf4j.LoggerFactory;
import java.util.*;
public class ConfigImpl implements Config {
- private static final Logger logger = LoggerFactory.getLogger(Config.class);
+ private static final Logger logger = LoggerFactory.getLogger(Config.class);
private String resource;
- private Map<String, ConfigObject> properties;
- private List<Config> subConfigs;
+ private Map<String, ConfigObject> properties;
+ /**
+ * Config resources
+ */
+ private List<Config> configs;
private Set<String> propNames;
protected ConfigImpl(String resource) {
this.resource = resource;
this.properties = new HashMap<String, ConfigObject>();
- this.subConfigs = new ArrayList<Config>(0);
+ this.configs = new ArrayList<Config>(0);
}
protected void reset() {
this.properties.clear();
- this.subConfigs.clear();
+ this.configs.clear();
}
@Override
@@ -56,23 +59,23 @@ public class ConfigImpl implements Config {
}
@Override
- public String getString(String name) {
- String result = null;
+ public String getString(String name) {
+ String result = null;
ConfigObject co = properties.get(name);
- if (co != null) {
+ if (co != null) {
result = co.getPropertyValue();
- }
+ }
if (result == null) {
- for (Config sub : subConfigs) {
- result = sub.getString(name);
+ for (Config config : configs) {
+ result = config.getString(name);
if (result != null) break;
}
}
- return result;
- }
+ return result;
+ }
@Override
public String getString(ConfigKey name) {
@@ -214,14 +217,14 @@ public class ConfigImpl implements Config {
}
@Override
- public List<String> getList(String name) {
+ public List<String> getList(String name) {
List<String> results = null;
- ConfigObject co = properties.get(name);
- if (co != null) {
- results = co.getListValues();
- }
- return results;
- }
+ ConfigObject co = properties.get(name);
+ if (co != null) {
+ results = co.getListValues();
+ }
+ return results;
+ }
@Override
public List<String> getList(String name, String[] defaultValue) {
@@ -313,23 +316,21 @@ public class ConfigImpl implements Config {
}
protected void set(String name, String value) {
- ConfigObject co = new ConfigObject(value);
- set(name, co);
- }
+ ConfigObject co = new ConfigObject(value);
+ set(name, co);
+ }
protected void set(String name, Config value) {
ConfigObject co = new ConfigObject(value);
set(name, co);
-
- addSubConfig(value);
}
protected void set(String name, ConfigObject value) {
this.properties.put(name, value);
}
- private void addSubConfig(Config config) {
- this.subConfigs.add(config);
+ protected void add(Config config) {
+ this.configs.add(config);
}
private void reloadNames() {
@@ -337,8 +338,8 @@ public class ConfigImpl implements Config {
propNames.clear();
}
propNames = new HashSet<String>(properties.keySet());
- for (Config sub : subConfigs) {
- propNames.addAll(sub.getNames());
+ for (Config config : configs) {
+ propNames.addAll(config.getNames());
}
}
}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/dfddb4d3/contrib/haox-config/src/test/java/org/apache/haox/config/ConfTest.java
----------------------------------------------------------------------
diff --git a/contrib/haox-config/src/test/java/org/apache/haox/config/ConfTest.java b/contrib/haox-config/src/test/java/org/apache/haox/config/ConfTest.java
index 2bbce0e..592ed3d 100644
--- a/contrib/haox-config/src/test/java/org/apache/haox/config/ConfTest.java
+++ b/contrib/haox-config/src/test/java/org/apache/haox/config/ConfTest.java
@@ -6,28 +6,32 @@
* 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.haox.config;
-import junit.framework.Assert;
import org.apache.haox.config.Conf;
import org.apache.haox.config.ConfigKey;
+import org.junit.Assert;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
+/**
+ * The test is base on the Conf level.
+ * We hope users use the Conf object only, and don't need to care about its internal implementation.
+ */
public class ConfTest {
@Test
@@ -64,12 +68,40 @@ public class ConfTest {
Assert.assertEquals(conf.getBoolean("boolProp"), boolProp);
}
+ /**
+ * Test for whether can get right value form the conf which contains many config resources.
+ */
+ @Test
+ public void testMixedConfig() {
+ String mapStrProp = "hello map";
+ Integer intProp = 123456;
+ Map<String, String> mapConfig = new HashMap<String, String>();
+ mapConfig.put("mapStrProp", mapStrProp);
+ mapConfig.put("intProp", String.valueOf(intProp));
+
+ String propertiesStrProp = "hello properties";
+ Boolean boolProp = true;
+ Properties properties = new Properties();
+ properties.setProperty("propertiesStrProp", propertiesStrProp);
+ properties.setProperty("boolProp", String.valueOf(boolProp));
+
+ Conf conf = new Conf();
+ conf.addMapConfig(mapConfig);
+ conf.addPropertiesConfig(properties);
+ Assert.assertEquals(conf.getConfig("mapConfig"), null);
+ Assert.assertEquals(conf.getString("mapStrProp"), mapStrProp);
+ Assert.assertEquals(conf.getString("propertiesStrProp"), propertiesStrProp);
+ Assert.assertEquals(conf.getInt("intProp"), intProp);
+ Assert.assertEquals(conf.getBoolean("boolProp"), boolProp);
+ }
+
static enum TestConfKey implements ConfigKey {
ADDRESS("127.0.0.1"),
PORT(8015),
ENABLE(false);
private Object defaultValue;
+
private TestConfKey(Object defaultValue) {
this.defaultValue = defaultValue;
}
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/dfddb4d3/contrib/haox-config/src/test/java/org/apache/haox/config/ConfigImplTest.java
----------------------------------------------------------------------
diff --git a/contrib/haox-config/src/test/java/org/apache/haox/config/ConfigImplTest.java b/contrib/haox-config/src/test/java/org/apache/haox/config/ConfigImplTest.java
new file mode 100644
index 0000000..fd491e2
--- /dev/null
+++ b/contrib/haox-config/src/test/java/org/apache/haox/config/ConfigImplTest.java
@@ -0,0 +1,62 @@
+/**
+ * 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.haox.config;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * The test is on ConfigImpl level.
+ * ConfigImpl is the internal implementation of Conf, only visual by developers.
+ */
+public class ConfigImplTest {
+
+ /**
+ * Test for section config support.
+ */
+ @Test
+ public void testSectionConfig() {
+ ConfigImpl rootConfig = new ConfigImpl(null);
+ rootConfig.set("globalConfig", "true");
+
+ ConfigImpl sectionA = new ConfigImpl("libdefaults");
+ rootConfig.set("libdefaults", sectionA);
+ sectionA.set("default_realm", "EXAMPLE.COM");
+ sectionA.set("forwardable", "true");
+ sectionA.set("dns_lookup_realm", "false");
+
+ ConfigImpl sectionB = new ConfigImpl("logging");
+ rootConfig.set("logging", sectionB);
+ sectionB.set("kdc", "FILE:/var/log/krb5kdc.log");
+
+ Assert.assertEquals(rootConfig.getString("globalConfig"), "true");
+ Assert.assertEquals(rootConfig.getString("default_realm"), null);
+
+ Config subA = rootConfig.getConfig("libdefaults");
+ Assert.assertEquals(subA.getString("default_realm"), "EXAMPLE.COM");
+ Assert.assertEquals(subA.getString("globalConfig"), null);
+ Assert.assertEquals(subA.getString("kdc"), null);
+
+ Config subB = rootConfig.getConfig("logging");
+ Assert.assertEquals(subB.getString("kdc"), "FILE:/var/log/krb5kdc.log");
+ Assert.assertEquals(subB.getString("globalConfig"), null);
+ Assert.assertEquals(subB.getBoolean("forwardable"), null);
+ }
+}