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

网格计算

开发平台:

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 org.apache.hadoop.fs.FileStatus;
  21. import org.apache.hadoop.fs.FileSystem;
  22. import org.apache.hadoop.fs.Path;
  23. import org.apache.hadoop.fs.PathFilter;
  24. import java.io.IOException;
  25. import java.io.Writer;
  26. import java.io.OutputStreamWriter;
  27. import java.util.Set;
  28. import java.util.HashSet;
  29. public class TestFileInputFormatPathFilter extends TestCase {
  30.   public static class DummyFileInputFormat extends FileInputFormat {
  31.     public RecordReader getRecordReader(InputSplit split, JobConf job,
  32.                                         Reporter reporter) throws IOException {
  33.       return null;
  34.     }
  35.   }
  36.   private static FileSystem localFs = null;
  37.   static {
  38.     try {
  39.       localFs = FileSystem.getLocal(new JobConf());
  40.     } catch (IOException e) {
  41.       throw new RuntimeException("init failure", e);
  42.     }
  43.   }
  44.   private static Path workDir =
  45.       new Path(new Path(System.getProperty("test.build.data", "."), "data"),
  46.           "TestFileInputFormatPathFilter");
  47.   public void setUp() throws Exception {
  48.     tearDown();
  49.     localFs.mkdirs(workDir);
  50.   }
  51.   public void tearDown() throws Exception {
  52.     if (localFs.exists(workDir)) {
  53.       localFs.delete(workDir, true);
  54.     }
  55.   }
  56.   protected Path createFile(String fileName) throws IOException {
  57.     Path file = new Path(workDir, fileName);
  58.     Writer writer = new OutputStreamWriter(localFs.create(file));
  59.     writer.write("");
  60.     writer.close();
  61.     return localFs.makeQualified(file);
  62.   }
  63.   protected Set<Path> createFiles() throws IOException {
  64.     Set<Path> files = new HashSet<Path>();
  65.     files.add(createFile("a"));
  66.     files.add(createFile("b"));
  67.     files.add(createFile("aa"));
  68.     files.add(createFile("bb"));
  69.     files.add(createFile("_hello"));
  70.     files.add(createFile(".hello"));
  71.     return files;
  72.   }
  73.   public static class TestPathFilter implements PathFilter {
  74.     public boolean accept(Path path) {
  75.       String name = path.getName();
  76.       return name.equals("TestFileInputFormatPathFilter") || name.length() == 1;
  77.     }
  78.   }
  79.   private void _testInputFiles(boolean withFilter, boolean withGlob) throws Exception {
  80.     Set<Path> createdFiles = createFiles();
  81.     JobConf conf = new JobConf();
  82.     Path inputDir = (withGlob) ? new Path(workDir, "a*") : workDir;
  83.     FileInputFormat.setInputPaths(conf, inputDir);
  84.     conf.setInputFormat(DummyFileInputFormat.class);
  85.     if (withFilter) {
  86.       FileInputFormat.setInputPathFilter(conf, TestPathFilter.class);
  87.     }
  88.     DummyFileInputFormat inputFormat =
  89.         (DummyFileInputFormat) conf.getInputFormat();
  90.     Set<Path> computedFiles = new HashSet<Path>();
  91.     for (FileStatus file : inputFormat.listStatus(conf)) {
  92.       computedFiles.add(file.getPath());
  93.     }
  94.     createdFiles.remove(localFs.makeQualified(new Path(workDir, "_hello")));
  95.     createdFiles.remove(localFs.makeQualified(new Path(workDir, ".hello")));
  96.     
  97.     if (withFilter) {
  98.       createdFiles.remove(localFs.makeQualified(new Path(workDir, "aa")));
  99.       createdFiles.remove(localFs.makeQualified(new Path(workDir, "bb")));
  100.     }
  101.     if (withGlob) {
  102.       createdFiles.remove(localFs.makeQualified(new Path(workDir, "b")));
  103.       createdFiles.remove(localFs.makeQualified(new Path(workDir, "bb")));
  104.     }
  105.     assertEquals(createdFiles, computedFiles);
  106.   }
  107.   public void testWithoutPathFilterWithoutGlob() throws Exception {
  108.     _testInputFiles(false, false);
  109.   }
  110.   public void testWithoutPathFilterWithGlob() throws Exception {
  111.     _testInputFiles(false, true);
  112.   }
  113.   public void testWithPathFilterWithoutGlob() throws Exception {
  114.     _testInputFiles(true, false);
  115.   }
  116.   public void testWithPathFilterWithGlob() throws Exception {
  117.     _testInputFiles(true, true);
  118.   }
  119. }