| /** |
| * 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.hadoop.conf; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertNull; |
| import static org.junit.Assert.assertTrue; |
| |
| import java.io.BufferedWriter; |
| import java.io.File; |
| import java.io.FileWriter; |
| import java.io.IOException; |
| |
| import org.apache.hadoop.fs.Path; |
| import org.junit.After; |
| import org.junit.Before; |
| import org.junit.Test; |
| |
| |
| public class TestConfigurationDeprecation { |
| private Configuration conf; |
| final static String CONFIG = new File("./test-config.xml").getAbsolutePath(); |
| final static String CONFIG2 = |
| new File("./test-config2.xml").getAbsolutePath(); |
| final static String CONFIG3 = |
| new File("./test-config3.xml").getAbsolutePath(); |
| BufferedWriter out; |
| |
| @Before |
| public void setUp() throws Exception { |
| conf = new Configuration(false); |
| } |
| |
| @After |
| public void tearDown() throws Exception { |
| new File(CONFIG).delete(); |
| new File(CONFIG2).delete(); |
| new File(CONFIG3).delete(); |
| } |
| |
| private void startConfig() throws IOException{ |
| out.write("<?xml version=\"1.0\"?>\n"); |
| out.write("<configuration>\n"); |
| } |
| |
| private void endConfig() throws IOException{ |
| out.write("</configuration>\n"); |
| out.close(); |
| } |
| |
| void appendProperty(String name, String val) throws IOException { |
| appendProperty(name, val, false); |
| } |
| |
| void appendProperty(String name, String val, boolean isFinal) |
| throws IOException { |
| out.write("<property>"); |
| out.write("<name>"); |
| out.write(name); |
| out.write("</name>"); |
| out.write("<value>"); |
| out.write(val); |
| out.write("</value>"); |
| if (isFinal) { |
| out.write("<final>true</final>"); |
| } |
| out.write("</property>\n"); |
| } |
| |
| private void addDeprecationToConfiguration() { |
| Configuration.addDeprecation("A", new String[]{"B"}); |
| Configuration.addDeprecation("C", new String[]{"D"}); |
| Configuration.addDeprecation("E", new String[]{"F"}); |
| Configuration.addDeprecation("G", new String[]{"H"}); |
| Configuration.addDeprecation("I", new String[]{"J"}); |
| Configuration.addDeprecation("M", new String[]{"N"}); |
| Configuration.addDeprecation("X", new String[]{"Y","Z"}); |
| Configuration.addDeprecation("P", new String[]{"Q","R"}); |
| } |
| |
| /** |
| * This test checks the correctness of loading/setting the properties in terms |
| * of occurrence of deprecated keys. |
| * @throws IOException |
| */ |
| @Test |
| public void testDeprecation() throws IOException { |
| addDeprecationToConfiguration(); |
| out=new BufferedWriter(new FileWriter(CONFIG)); |
| startConfig(); |
| // load an old key and a new key. |
| appendProperty("A", "a"); |
| appendProperty("D", "d"); |
| // load an old key with multiple new-key mappings |
| appendProperty("P", "p"); |
| endConfig(); |
| Path fileResource = new Path(CONFIG); |
| conf.addResource(fileResource); |
| |
| // check if loading of old key with multiple new-key mappings actually loads |
| // the corresponding new keys. |
| assertEquals("p", conf.get("P")); |
| assertEquals("p", conf.get("Q")); |
| assertEquals("p", conf.get("R")); |
| |
| assertEquals("a", conf.get("A")); |
| assertEquals("a", conf.get("B")); |
| assertEquals("d", conf.get("C")); |
| assertEquals("d", conf.get("D")); |
| |
| out=new BufferedWriter(new FileWriter(CONFIG2)); |
| startConfig(); |
| // load the old/new keys corresponding to the keys loaded before. |
| appendProperty("B", "b"); |
| appendProperty("C", "c"); |
| endConfig(); |
| Path fileResource1 = new Path(CONFIG2); |
| conf.addResource(fileResource1); |
| |
| assertEquals("b", conf.get("A")); |
| assertEquals("b", conf.get("B")); |
| assertEquals("c", conf.get("C")); |
| assertEquals("c", conf.get("D")); |
| |
| // set new key |
| conf.set("N","n"); |
| // get old key |
| assertEquals("n", conf.get("M")); |
| // check consistency in get of old and new keys |
| assertEquals(conf.get("M"), conf.get("N")); |
| |
| // set old key and then get new key(s). |
| conf.set("M", "m"); |
| assertEquals("m", conf.get("N")); |
| conf.set("X", "x"); |
| assertEquals("x", conf.get("X")); |
| assertEquals("x", conf.get("Y")); |
| assertEquals("x", conf.get("Z")); |
| |
| // set new keys to different values |
| conf.set("Y", "y"); |
| conf.set("Z", "z"); |
| // get old key |
| assertEquals("y", conf.get("X")); |
| } |
| |
| /** |
| * This test is to ensure the correctness of loading of keys with respect to |
| * being marked as final and that are related to deprecation. |
| * @throws IOException |
| */ |
| @Test |
| public void testDeprecationForFinalParameters() throws IOException { |
| addDeprecationToConfiguration(); |
| out=new BufferedWriter(new FileWriter(CONFIG)); |
| startConfig(); |
| // set the following keys: |
| // 1.old key and final |
| // 2.new key whose corresponding old key is final |
| // 3.old key whose corresponding new key is final |
| // 4.new key and final |
| // 5.new key which is final and has null value. |
| appendProperty("A", "a", true); |
| appendProperty("D", "d"); |
| appendProperty("E", "e"); |
| appendProperty("H", "h", true); |
| appendProperty("J", "", true); |
| endConfig(); |
| Path fileResource = new Path(CONFIG); |
| conf.addResource(fileResource); |
| |
| assertEquals("a", conf.get("A")); |
| assertEquals("a", conf.get("B")); |
| assertEquals("d", conf.get("C")); |
| assertEquals("d", conf.get("D")); |
| assertEquals("e", conf.get("E")); |
| assertEquals("e", conf.get("F")); |
| assertEquals("h", conf.get("G")); |
| assertEquals("h", conf.get("H")); |
| assertNull(conf.get("I")); |
| assertNull(conf.get("J")); |
| |
| out=new BufferedWriter(new FileWriter(CONFIG2)); |
| startConfig(); |
| // add the corresponding old/new keys of those added to CONFIG1 |
| appendProperty("B", "b"); |
| appendProperty("C", "c", true); |
| appendProperty("F", "f", true); |
| appendProperty("G", "g"); |
| appendProperty("I", "i"); |
| endConfig(); |
| Path fileResource1 = new Path(CONFIG2); |
| conf.addResource(fileResource1); |
| |
| assertEquals("a", conf.get("A")); |
| assertEquals("a", conf.get("B")); |
| assertEquals("c", conf.get("C")); |
| assertEquals("c", conf.get("D")); |
| assertEquals("f", conf.get("E")); |
| assertEquals("f", conf.get("F")); |
| assertEquals("h", conf.get("G")); |
| assertEquals("h", conf.get("H")); |
| assertNull(conf.get("I")); |
| assertNull(conf.get("J")); |
| |
| out=new BufferedWriter(new FileWriter(CONFIG3)); |
| startConfig(); |
| // change the values of all the previously loaded |
| // keys (both deprecated and new) |
| appendProperty("A", "a1"); |
| appendProperty("B", "b1"); |
| appendProperty("C", "c1"); |
| appendProperty("D", "d1"); |
| appendProperty("E", "e1"); |
| appendProperty("F", "f1"); |
| appendProperty("G", "g1"); |
| appendProperty("H", "h1"); |
| appendProperty("I", "i1"); |
| appendProperty("J", "j1"); |
| endConfig(); |
| fileResource = new Path(CONFIG); |
| conf.addResource(fileResource); |
| |
| assertEquals("a", conf.get("A")); |
| assertEquals("a", conf.get("B")); |
| assertEquals("c", conf.get("C")); |
| assertEquals("c", conf.get("D")); |
| assertEquals("f", conf.get("E")); |
| assertEquals("f", conf.get("F")); |
| assertEquals("h", conf.get("G")); |
| assertEquals("h", conf.get("H")); |
| assertNull(conf.get("I")); |
| assertNull(conf.get("J")); |
| } |
| } |