TestTruncatedInputBug.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.fs;
  19. import junit.framework.TestCase;
  20. import java.io.*;
  21. import org.apache.hadoop.conf.Configuration;
  22. import org.apache.hadoop.fs.FSDataInputStream;
  23. import org.apache.hadoop.fs.FileSystem;
  24. import org.apache.hadoop.fs.LocalFileSystem;
  25. import org.apache.hadoop.fs.Path;
  26. import org.apache.hadoop.util.StringUtils;
  27. /**
  28.  * test for the input truncation bug when mark/reset is used.
  29.  * HADOOP-1489
  30.  */
  31. public class TestTruncatedInputBug extends TestCase {
  32.   private static String TEST_ROOT_DIR =
  33.     new Path(System.getProperty("test.build.data","/tmp"))
  34.     .toString().replace(' ', '+');
  35.   
  36.   private void writeFile(FileSystem fileSys, 
  37.                          Path name, int nBytesToWrite) 
  38.     throws IOException {
  39.     DataOutputStream out = fileSys.create(name);
  40.     for (int i = 0; i < nBytesToWrite; ++i) {
  41.       out.writeByte(0);
  42.     }
  43.     out.close();
  44.   }
  45.   
  46.   /**
  47.    * When mark() is used on BufferedInputStream, the request
  48.    * size on the checksum file system can be small.  However,
  49.    * checksum file system currently depends on the request size
  50.    * >= bytesPerSum to work properly.
  51.    */
  52.   public void testTruncatedInputBug() throws IOException {
  53.     final int ioBufSize = 512;
  54.     final int fileSize = ioBufSize*4;
  55.     int filePos = 0;
  56.     Configuration conf = new Configuration();
  57.     conf.setInt("io.file.buffer.size", ioBufSize);
  58.     FileSystem fileSys = FileSystem.getLocal(conf);
  59.     try {
  60.       // First create a test input file.
  61.       Path testFile = new Path(TEST_ROOT_DIR, "HADOOP-1489");
  62.       writeFile(fileSys, testFile, fileSize);
  63.       assertTrue(fileSys.exists(testFile));
  64.       assertTrue(fileSys.getLength(testFile) == fileSize);
  65.       // Now read the file for ioBufSize bytes
  66.       FSDataInputStream in = fileSys.open(testFile, ioBufSize);
  67.       // seek beyond data buffered by open
  68.       filePos += ioBufSize * 2 + (ioBufSize - 10);  
  69.       in.seek(filePos);
  70.       // read 4 more bytes before marking
  71.       for (int i = 0; i < 4; ++i) {  
  72.         if (in.read() == -1) {
  73.           break;
  74.         }
  75.         ++filePos;
  76.       }
  77.       // Now set mark() to trigger the bug
  78.       // NOTE: in the fixed code, mark() does nothing (not supported) and
  79.       //   hence won't trigger this bug.
  80.       in.mark(1);
  81.       System.out.println("MARKED");
  82.       
  83.       // Try to read the rest
  84.       while (filePos < fileSize) {
  85.         if (in.read() == -1) {
  86.           break;
  87.         }
  88.         ++filePos;
  89.       }
  90.       in.close();
  91.       System.out.println("Read " + filePos + " bytes."
  92.                          + " file size=" + fileSize);
  93.       assertTrue(filePos == fileSize);
  94.     } finally {
  95.       try {
  96.         fileSys.close();
  97.       } catch (Exception e) {
  98.         // noop
  99.       }
  100.     }
  101.   }  // end testTruncatedInputBug
  102. }