TestConfiguration.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:12k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.conf;
  19. import java.io.BufferedWriter;
  20. import java.io.File;
  21. import java.io.FileWriter;
  22. import java.io.IOException;
  23. import java.io.DataInputStream;
  24. import java.io.ByteArrayOutputStream;
  25. import java.io.ByteArrayInputStream;
  26. import java.io.DataOutputStream;
  27. import java.util.ArrayList;
  28. import java.util.Random;
  29. import junit.framework.TestCase;
  30. import org.apache.hadoop.fs.Path;
  31. public class TestConfiguration extends TestCase {
  32.   private Configuration conf;
  33.   final static String CONFIG = new File("./test-config.xml").getAbsolutePath();
  34.   final static String CONFIG2 = new File("./test-config2.xml").getAbsolutePath();
  35.   final static Random RAN = new Random();
  36.   @Override
  37.   protected void setUp() throws Exception {
  38.     super.setUp();
  39.     conf = new Configuration();
  40.   }
  41.   
  42.   @Override
  43.   protected void tearDown() throws Exception {
  44.     super.tearDown();
  45.     new File(CONFIG).delete();
  46.     new File(CONFIG2).delete();
  47.   }
  48.   
  49.   private void startConfig() throws IOException{
  50.     out.write("<?xml version="1.0"?>n");
  51.     out.write("<configuration>n");
  52.   }
  53.   private void endConfig() throws IOException{
  54.     out.write("</configuration>n");
  55.     out.close();
  56.   }
  57.   private void addInclude(String filename) throws IOException{
  58.     out.write("<xi:include href="" + filename + "" xmlns:xi="http://www.w3.org/2001/XInclude"  />n ");
  59.   }
  60.   public void testVariableSubstitution() throws IOException {
  61.     out=new BufferedWriter(new FileWriter(CONFIG));
  62.     startConfig();
  63.     declareProperty("my.int", "${intvar}", "42");
  64.     declareProperty("intvar", "42", "42");
  65.     declareProperty("my.base", "/tmp/${user.name}", UNSPEC);
  66.     declareProperty("my.file", "hello", "hello");
  67.     declareProperty("my.suffix", ".txt", ".txt");
  68.     declareProperty("my.relfile", "${my.file}${my.suffix}", "hello.txt");
  69.     declareProperty("my.fullfile", "${my.base}/${my.file}${my.suffix}", UNSPEC);
  70.     // check that undefined variables are returned as-is
  71.     declareProperty("my.failsexpand", "a${my.undefvar}b", "a${my.undefvar}b");
  72.     endConfig();
  73.     Path fileResource = new Path(CONFIG);
  74.     conf.addResource(fileResource);
  75.     for (Prop p : props) {
  76.       System.out.println("p=" + p.name);
  77.       String gotVal = conf.get(p.name);
  78.       String gotRawVal = conf.getRaw(p.name);
  79.       assertEq(p.val, gotRawVal);
  80.       if (p.expectEval == UNSPEC) {
  81.         // expansion is system-dependent (uses System properties)
  82.         // can't do exact match so just check that all variables got expanded
  83.         assertTrue(gotVal != null && -1 == gotVal.indexOf("${"));
  84.       } else {
  85.         assertEq(p.expectEval, gotVal);
  86.       }
  87.     }
  88.       
  89.     // check that expansion also occurs for getInt()
  90.     assertTrue(conf.getInt("intvar", -1) == 42);
  91.     assertTrue(conf.getInt("my.int", -1) == 42);
  92.   }
  93.     
  94.   public static void assertEq(Object a, Object b) {
  95.     System.out.println("assertEq: " + a + ", " + b);
  96.     assertEquals(a, b);
  97.   }
  98.   static class Prop {
  99.     String name;
  100.     String val;
  101.     String expectEval;
  102.   }
  103.   final String UNSPEC = null;
  104.   ArrayList<Prop> props = new ArrayList<Prop>();
  105.   void declareProperty(String name, String val, String expectEval)
  106.     throws IOException {
  107.     declareProperty(name, val, expectEval, false);
  108.   }
  109.   void declareProperty(String name, String val, String expectEval,
  110.                        boolean isFinal)
  111.     throws IOException {
  112.     appendProperty(name, val, isFinal);
  113.     Prop p = new Prop();
  114.     p.name = name;
  115.     p.val = val;
  116.     p.expectEval = expectEval;
  117.     props.add(p);
  118.   }
  119.   void appendProperty(String name, String val) throws IOException {
  120.     appendProperty(name, val, false);
  121.   }
  122.  
  123.   void appendProperty(String name, String val, boolean isFinal)
  124.     throws IOException {
  125.     out.write("<property>");
  126.     out.write("<name>");
  127.     out.write(name);
  128.     out.write("</name>");
  129.     out.write("<value>");
  130.     out.write(val);
  131.     out.write("</value>");
  132.     if (isFinal) {
  133.       out.write("<final>true</final>");
  134.     }
  135.     out.write("</property>n");
  136.   }
  137.   
  138.   public void testOverlay() throws IOException{
  139.     out=new BufferedWriter(new FileWriter(CONFIG));
  140.     startConfig();
  141.     appendProperty("a","b");
  142.     appendProperty("b","c");
  143.     appendProperty("d","e");
  144.     appendProperty("e","f", true);
  145.     endConfig();
  146.     out=new BufferedWriter(new FileWriter(CONFIG2));
  147.     startConfig();
  148.     appendProperty("a","b");
  149.     appendProperty("b","d");
  150.     appendProperty("e","e");
  151.     endConfig();
  152.     
  153.     Path fileResource = new Path(CONFIG);
  154.     conf.addResource(fileResource);
  155.     
  156.     //set dynamically something
  157.     conf.set("c","d");
  158.     conf.set("a","d");
  159.     
  160.     Configuration clone=new Configuration(conf);
  161.     clone.addResource(new Path(CONFIG2));
  162.     
  163.     assertEquals(clone.get("a"), "d"); 
  164.     assertEquals(clone.get("b"), "d"); 
  165.     assertEquals(clone.get("c"), "d"); 
  166.     assertEquals(clone.get("d"), "e"); 
  167.     assertEquals(clone.get("e"), "f"); 
  168.     
  169.   }
  170.   
  171.   public void testCommentsInValue() throws IOException {
  172.     out=new BufferedWriter(new FileWriter(CONFIG));
  173.     startConfig();
  174.     appendProperty("my.comment", "this <!--comment here--> contains a comment");
  175.     endConfig();
  176.     Path fileResource = new Path(CONFIG);
  177.     conf.addResource(fileResource);
  178.     //two spaces one after "this", one before "contains"
  179.     assertEquals("this  contains a comment", conf.get("my.comment"));
  180.   }
  181.   
  182.   public void testTrim() throws IOException {
  183.     out=new BufferedWriter(new FileWriter(CONFIG));
  184.     startConfig();
  185.     String[] whitespaces = {"", " ", "n", "t"};
  186.     String[] name = new String[100];
  187.     for(int i = 0; i < name.length; i++) {
  188.       name[i] = "foo" + i;
  189.       StringBuilder prefix = new StringBuilder(); 
  190.       StringBuilder postfix = new StringBuilder(); 
  191.       for(int j = 0; j < 3; j++) {
  192.         prefix.append(whitespaces[RAN.nextInt(whitespaces.length)]);
  193.         postfix.append(whitespaces[RAN.nextInt(whitespaces.length)]);
  194.       }
  195.       
  196.       appendProperty(prefix + name[i] + postfix, name[i] + ".value");
  197.     }
  198.     endConfig();
  199.     conf.addResource(new Path(CONFIG));
  200.     for(String n : name) {
  201.       assertEquals(n + ".value", conf.get(n));
  202.     }
  203.   }
  204.   public void testToString() throws IOException {
  205.     out=new BufferedWriter(new FileWriter(CONFIG));
  206.     startConfig();
  207.     endConfig();
  208.     Path fileResource = new Path(CONFIG);
  209.     conf.addResource(fileResource);
  210.     
  211.     String expectedOutput = 
  212.       "Configuration: core-default.xml, core-site.xml, " + 
  213.       fileResource.toString();
  214.     assertEquals(expectedOutput, conf.toString());
  215.   }
  216.   
  217.   public void testIncludes() throws Exception {
  218.     tearDown();
  219.     System.out.println("XXX testIncludes");
  220.     out=new BufferedWriter(new FileWriter(CONFIG2));
  221.     startConfig();
  222.     appendProperty("a","b");
  223.     appendProperty("c","d");
  224.     endConfig();
  225.     out=new BufferedWriter(new FileWriter(CONFIG));
  226.     startConfig();
  227.     addInclude(CONFIG2);
  228.     appendProperty("e","f");
  229.     appendProperty("g","h");
  230.     endConfig();
  231.     // verify that the includes file contains all properties
  232.     Path fileResource = new Path(CONFIG);
  233.     conf.addResource(fileResource);
  234.     assertEquals(conf.get("a"), "b"); 
  235.     assertEquals(conf.get("c"), "d"); 
  236.     assertEquals(conf.get("e"), "f"); 
  237.     assertEquals(conf.get("g"), "h"); 
  238.     tearDown();
  239.   }
  240.   BufferedWriter out;
  241.   public void testIntegerRanges() {
  242.     Configuration conf = new Configuration();
  243.     conf.set("first", "-100");
  244.     conf.set("second", "4-6,9-10,27");
  245.     conf.set("third", "34-");
  246.     Configuration.IntegerRanges range = conf.getRange("first", null);
  247.     System.out.println("first = " + range);
  248.     assertEquals(true, range.isIncluded(0));
  249.     assertEquals(true, range.isIncluded(1));
  250.     assertEquals(true, range.isIncluded(100));
  251.     assertEquals(false, range.isIncluded(101));
  252.     range = conf.getRange("second", null);
  253.     System.out.println("second = " + range);
  254.     assertEquals(false, range.isIncluded(3));
  255.     assertEquals(true, range.isIncluded(4));
  256.     assertEquals(true, range.isIncluded(6));
  257.     assertEquals(false, range.isIncluded(7));
  258.     assertEquals(false, range.isIncluded(8));
  259.     assertEquals(true, range.isIncluded(9));
  260.     assertEquals(true, range.isIncluded(10));
  261.     assertEquals(false, range.isIncluded(11));
  262.     assertEquals(false, range.isIncluded(26));
  263.     assertEquals(true, range.isIncluded(27));
  264.     assertEquals(false, range.isIncluded(28));
  265.     range = conf.getRange("third", null);
  266.     System.out.println("third = " + range);
  267.     assertEquals(false, range.isIncluded(33));
  268.     assertEquals(true, range.isIncluded(34));
  269.     assertEquals(true, range.isIncluded(100000000));
  270.   }
  271.   public void testHexValues() throws IOException{
  272.     out=new BufferedWriter(new FileWriter(CONFIG));
  273.     startConfig();
  274.     appendProperty("test.hex1", "0x10");
  275.     appendProperty("test.hex2", "0xF");
  276.     appendProperty("test.hex3", "-0x10");
  277.     endConfig();
  278.     Path fileResource = new Path(CONFIG);
  279.     conf.addResource(fileResource);
  280.     assertEquals(16, conf.getInt("test.hex1", 0));
  281.     assertEquals(16, conf.getLong("test.hex1", 0));
  282.     assertEquals(15, conf.getInt("test.hex2", 0));
  283.     assertEquals(15, conf.getLong("test.hex2", 0));
  284.     assertEquals(-16, conf.getInt("test.hex3", 0));
  285.     assertEquals(-16, conf.getLong("test.hex3", 0));
  286.   }
  287.   public void testIntegerValues() throws IOException{
  288.     out=new BufferedWriter(new FileWriter(CONFIG));
  289.     startConfig();
  290.     appendProperty("test.int1", "20");
  291.     appendProperty("test.int2", "020");
  292.     appendProperty("test.int3", "-20");
  293.     endConfig();
  294.     Path fileResource = new Path(CONFIG);
  295.     conf.addResource(fileResource);
  296.     assertEquals(20, conf.getInt("test.int1", 0));
  297.     assertEquals(20, conf.getLong("test.int1", 0));
  298.     assertEquals(20, conf.getInt("test.int2", 0));
  299.     assertEquals(20, conf.getLong("test.int2", 0));
  300.     assertEquals(-20, conf.getInt("test.int3", 0));
  301.     assertEquals(-20, conf.getLong("test.int3", 0));
  302.   }
  303.   public void testReload() throws IOException {
  304.     out=new BufferedWriter(new FileWriter(CONFIG));
  305.     startConfig();
  306.     appendProperty("test.key1", "final-value1", true);
  307.     appendProperty("test.key2", "value2");
  308.     endConfig();
  309.     Path fileResource = new Path(CONFIG);
  310.     conf.addResource(fileResource);
  311.     
  312.     out=new BufferedWriter(new FileWriter(CONFIG2));
  313.     startConfig();
  314.     appendProperty("test.key1", "value1");
  315.     appendProperty("test.key3", "value3");
  316.     endConfig();
  317.     Path fileResource1 = new Path(CONFIG2);
  318.     conf.addResource(fileResource1);
  319.     
  320.     // add a few values via set.
  321.     conf.set("test.key3", "value4");
  322.     conf.set("test.key4", "value5");
  323.     
  324.     assertEquals("final-value1", conf.get("test.key1"));
  325.     assertEquals("value2", conf.get("test.key2"));
  326.     assertEquals("value4", conf.get("test.key3"));
  327.     assertEquals("value5", conf.get("test.key4"));
  328.     
  329.     // change values in the test file...
  330.     out=new BufferedWriter(new FileWriter(CONFIG));
  331.     startConfig();
  332.     appendProperty("test.key1", "final-value1");
  333.     appendProperty("test.key3", "final-value3", true);
  334.     endConfig();
  335.     
  336.     conf.reloadConfiguration();
  337.     assertEquals("value1", conf.get("test.key1"));
  338.     // overlayed property overrides.
  339.     assertEquals("value4", conf.get("test.key3"));
  340.     assertEquals(null, conf.get("test.key2"));
  341.     assertEquals("value5", conf.get("test.key4"));
  342.   }
  343.   public void testSize() throws IOException {
  344.     Configuration conf = new Configuration(false);
  345.     conf.set("a", "A");
  346.     conf.set("b", "B");
  347.     assertEquals(2, conf.size());
  348.   }
  349.   public void testClear() throws IOException {
  350.     Configuration conf = new Configuration(false);
  351.     conf.set("a", "A");
  352.     conf.set("b", "B");
  353.     conf.clear();
  354.     assertEquals(0, conf.size());
  355.     assertFalse(conf.iterator().hasNext());
  356.   }
  357.   public static void main(String[] argv) throws Exception {
  358.     junit.textui.TestRunner.main(new String[]{
  359.       TestConfiguration.class.getName()
  360.     });
  361.   }
  362. }