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

网格计算

开发平台:

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.io.compress;
  19. import java.io.IOException;
  20. import java.io.InputStream;
  21. import java.io.OutputStream;
  22. import java.util.*;
  23. import junit.framework.TestCase;
  24. import org.apache.hadoop.fs.Path;
  25. import org.apache.hadoop.conf.Configuration;
  26. public class TestCodecFactory extends TestCase {
  27.   private static class BaseCodec implements CompressionCodec {
  28.     private Configuration conf;
  29.     
  30.     public void setConf(Configuration conf) {
  31.       this.conf = conf;
  32.     }
  33.     
  34.     public Configuration getConf() {
  35.       return conf;
  36.     }
  37.     
  38.     public CompressionOutputStream createOutputStream(OutputStream out) 
  39.     throws IOException {
  40.       return null;
  41.     }
  42.     
  43.     public Class<? extends Compressor> getCompressorType() {
  44.       return null;
  45.     }
  46.     public Compressor createCompressor() {
  47.       return null;
  48.     }
  49.     public CompressionInputStream createInputStream(InputStream in, 
  50.                                                     Decompressor decompressor) 
  51.     throws IOException {
  52.       return null;
  53.     }
  54.     public CompressionInputStream createInputStream(InputStream in) 
  55.     throws IOException {
  56.       return null;
  57.     }
  58.     public CompressionOutputStream createOutputStream(OutputStream out, 
  59.                                                       Compressor compressor) 
  60.     throws IOException {
  61.       return null;
  62.     }
  63.     public Class<? extends Decompressor> getDecompressorType() {
  64.       return null;
  65.     }
  66.     public Decompressor createDecompressor() {
  67.       return null;
  68.     }
  69.     public String getDefaultExtension() {
  70.       return ".base";
  71.     }
  72.   }
  73.   
  74.   private static class BarCodec extends BaseCodec {
  75.     public String getDefaultExtension() {
  76.       return "bar";
  77.     }
  78.   }
  79.   
  80.   private static class FooBarCodec extends BaseCodec {
  81.     public String getDefaultExtension() {
  82.       return ".foo.bar";
  83.     }
  84.   }
  85.   
  86.   private static class FooCodec extends BaseCodec {
  87.     public String getDefaultExtension() {
  88.       return ".foo";
  89.     }
  90.   }
  91.   
  92.   /**
  93.    * Returns a factory for a given set of codecs
  94.    * @param classes the codec classes to include
  95.    * @return a new factory
  96.    */
  97.   private static CompressionCodecFactory setClasses(Class[] classes) {
  98.     Configuration conf = new Configuration();
  99.     CompressionCodecFactory.setCodecClasses(conf, Arrays.asList(classes));
  100.     return new CompressionCodecFactory(conf);
  101.   }
  102.   
  103.   private static void checkCodec(String msg, 
  104.                                  Class expected, CompressionCodec actual) {
  105.     assertEquals(msg + " unexpected codec found",
  106.                  expected.getName(),
  107.                  actual.getClass().getName());
  108.   }
  109.   
  110.   public static void testFinding() {
  111.     CompressionCodecFactory factory = 
  112.       new CompressionCodecFactory(new Configuration());
  113.     CompressionCodec codec = factory.getCodec(new Path("/tmp/foo.bar"));
  114.     assertEquals("default factory foo codec", null, codec);
  115.     codec = factory.getCodec(new Path("/tmp/foo.gz"));
  116.     checkCodec("default factory for .gz", GzipCodec.class, codec);
  117.     codec = factory.getCodec(new Path("/tmp/foo.bz2"));
  118.     checkCodec("default factory for .bz2", BZip2Codec.class, codec);
  119.     factory = setClasses(new Class[0]);
  120.     codec = factory.getCodec(new Path("/tmp/foo.bar"));
  121.     assertEquals("empty codec bar codec", null, codec);
  122.     codec = factory.getCodec(new Path("/tmp/foo.gz"));
  123.     assertEquals("empty codec gz codec", null, codec);
  124.     codec = factory.getCodec(new Path("/tmp/foo.bz2"));
  125.     assertEquals("default factory for .bz2", null, codec);
  126.     factory = setClasses(new Class[]{BarCodec.class, FooCodec.class, 
  127.                                      FooBarCodec.class});
  128.     codec = factory.getCodec(new Path("/tmp/.foo.bar.gz"));
  129.     assertEquals("full factory gz codec", null, codec);
  130.     codec = factory.getCodec(new Path("/tmp/foo.bz2"));
  131.     assertEquals("default factory for .bz2", null, codec);
  132.     codec = factory.getCodec(new Path("/tmp/foo.bar"));
  133.     checkCodec("full factory bar codec", BarCodec.class, codec);
  134.     codec = factory.getCodec(new Path("/tmp/foo/baz.foo.bar"));
  135.     checkCodec("full factory foo bar codec", FooBarCodec.class, codec);
  136.     codec = factory.getCodec(new Path("/tmp/foo.foo"));
  137.     checkCodec("full factory foo codec", FooCodec.class, codec);
  138.   }
  139. }