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

网格计算

开发平台:

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.mapred;
  19. import junit.framework.TestCase;
  20. import java.io.IOException;
  21. import java.text.ParseException;
  22. /**
  23.  * TestCounters checks the sanity and recoverability of {@code Counters}
  24.  */
  25. public class TestCounters extends TestCase {
  26.   enum myCounters {TEST1, TEST2};
  27.   private static final long MAX_VALUE = 10;
  28.   
  29.   // Generates enum based counters
  30.   private Counters getEnumCounters(Enum[] keys) {
  31.     Counters counters = new Counters();
  32.     for (Enum key : keys) {
  33.       for (long i = 0; i < MAX_VALUE; ++i) {
  34.         counters.incrCounter(key, i);
  35.       }
  36.     }
  37.     return counters;
  38.   }
  39.   
  40.   // Generate string based counters
  41.   private Counters getEnumCounters(String[] gNames, String[] cNames) {
  42.     Counters counters = new Counters();
  43.     for (String gName : gNames) {
  44.       for (String cName : cNames) {
  45.         for (long i = 0; i < MAX_VALUE; ++i) {
  46.           counters.incrCounter(gName, cName, i);
  47.         }
  48.       }
  49.     }
  50.     return counters;
  51.   }
  52.   
  53.   /**
  54.    * Test counter recovery
  55.    */
  56.   private void testCounter(Counters counter) throws ParseException {
  57.     String compactEscapedString = counter.makeEscapedCompactString();
  58.     
  59.     Counters recoveredCounter = 
  60.       Counters.fromEscapedCompactString(compactEscapedString);
  61.     // Check for recovery from string
  62.     assertEquals("Recovered counter does not match on content", 
  63.                  counter, recoveredCounter);
  64.     assertEquals("recovered counter has wrong hash code",
  65.                  counter.hashCode(), recoveredCounter.hashCode());
  66.   }
  67.   
  68.   public void testCounters() throws IOException {
  69.     Enum[] keysWithResource = {Task.Counter.MAP_INPUT_BYTES, 
  70.                                Task.Counter.MAP_OUTPUT_BYTES};
  71.     
  72.     Enum[] keysWithoutResource = {myCounters.TEST1, myCounters.TEST2};
  73.     
  74.     String[] groups = {"group1", "group2", "group{}()[]"};
  75.     String[] counters = {"counter1", "counter2", "counter{}()[]"};
  76.     
  77.     try {
  78.       // I. Check enum counters that have resource bundler
  79.       testCounter(getEnumCounters(keysWithResource));
  80.       // II. Check enum counters that dont have resource bundler
  81.       testCounter(getEnumCounters(keysWithoutResource));
  82.       // III. Check string counters
  83.       testCounter(getEnumCounters(groups, counters));
  84.     } catch (ParseException pe) {
  85.       throw new IOException(pe);
  86.     }
  87.   }
  88.   
  89.   public static void main(String[] args) throws IOException {
  90.     new TestCounters().testCounters();
  91.   }
  92. }