TestLocalFileSystem.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.fs;
  19. import org.apache.hadoop.conf.Configuration;
  20. import java.io.*;
  21. import junit.framework.*;
  22. /**
  23.  * This class tests the local file system via the FileSystem abstraction.
  24.  */
  25. public class TestLocalFileSystem extends TestCase {
  26.   private static String TEST_ROOT_DIR
  27.     = System.getProperty("test.build.data","build/test/data/work-dir/localfs");
  28.   static void writeFile(FileSystem fs, Path name) throws IOException {
  29.     FSDataOutputStream stm = fs.create(name);
  30.     stm.writeBytes("42n");
  31.     stm.close();
  32.   }
  33.   
  34.   static String readFile(FileSystem fs, Path name) throws IOException {
  35.     byte[] b = new byte[1024];
  36.     int offset = 0;
  37.     FSDataInputStream in = fs.open(name);
  38.     for(int remaining, n;
  39.         (remaining = b.length - offset) > 0 && (n = in.read(b, offset, remaining)) != -1;
  40.         offset += n); 
  41.     in.close();
  42.     String s = new String(b, 0, offset);
  43.     System.out.println("s=" + s);
  44.     return s;
  45.   }
  46.   private void cleanupFile(FileSystem fs, Path name) throws IOException {
  47.     assertTrue(fs.exists(name));
  48.     fs.delete(name, true);
  49.     assertTrue(!fs.exists(name));
  50.   }
  51.   
  52.   /**
  53.    * Test the capability of setting the working directory.
  54.    */
  55.   public void testWorkingDirectory() throws IOException {
  56.     Configuration conf = new Configuration();
  57.     FileSystem fileSys = FileSystem.getLocal(conf);
  58.     Path origDir = fileSys.getWorkingDirectory();
  59.     Path subdir = new Path(TEST_ROOT_DIR, "new");
  60.     try {
  61.       // make sure it doesn't already exist
  62.       assertTrue(!fileSys.exists(subdir));
  63.       // make it and check for it
  64.       assertTrue(fileSys.mkdirs(subdir));
  65.       assertTrue(fileSys.isDirectory(subdir));
  66.       
  67.       fileSys.setWorkingDirectory(subdir);
  68.       
  69.       // create a directory and check for it
  70.       Path dir1 = new Path("dir1");
  71.       assertTrue(fileSys.mkdirs(dir1));
  72.       assertTrue(fileSys.isDirectory(dir1));
  73.       
  74.       // delete the directory and make sure it went away
  75.       fileSys.delete(dir1, true);
  76.       assertTrue(!fileSys.exists(dir1));
  77.       
  78.       // create files and manipulate them.
  79.       Path file1 = new Path("file1");
  80.       Path file2 = new Path("sub/file2");
  81.       writeFile(fileSys, file1);
  82.       fileSys.copyFromLocalFile(file1, file2);
  83.       assertTrue(fileSys.exists(file1));
  84.       assertTrue(fileSys.isFile(file1));
  85.       cleanupFile(fileSys, file2);
  86.       fileSys.copyToLocalFile(file1, file2);
  87.       cleanupFile(fileSys, file2);
  88.       
  89.       // try a rename
  90.       fileSys.rename(file1, file2);
  91.       assertTrue(!fileSys.exists(file1));
  92.       assertTrue(fileSys.exists(file2));
  93.       fileSys.rename(file2, file1);
  94.       
  95.       // try reading a file
  96.       InputStream stm = fileSys.open(file1);
  97.       byte[] buffer = new byte[3];
  98.       int bytesRead = stm.read(buffer, 0, 3);
  99.       assertEquals("42n", new String(buffer, 0, bytesRead));
  100.       stm.close();
  101.     } finally {
  102.       fileSys.setWorkingDirectory(origDir);
  103.       fileSys.delete(subdir, true);
  104.     }
  105.   }
  106.   public void testCopy() throws IOException {
  107.     Configuration conf = new Configuration();
  108.     LocalFileSystem fs = FileSystem.getLocal(conf);
  109.     Path src = new Path(TEST_ROOT_DIR, "dingo");
  110.     Path dst = new Path(TEST_ROOT_DIR, "yak");
  111.     writeFile(fs, src);
  112.     assertTrue(FileUtil.copy(fs, src, fs, dst, true, false, conf));
  113.     assertTrue(!fs.exists(src) && fs.exists(dst));
  114.     assertTrue(FileUtil.copy(fs, dst, fs, src, false, false, conf));
  115.     assertTrue(fs.exists(src) && fs.exists(dst));
  116.     assertTrue(FileUtil.copy(fs, src, fs, dst, true, true, conf));
  117.     assertTrue(!fs.exists(src) && fs.exists(dst));
  118.     fs.mkdirs(src);
  119.     assertTrue(FileUtil.copy(fs, dst, fs, src, false, false, conf));
  120.     Path tmp = new Path(src, dst.getName());
  121.     assertTrue(fs.exists(tmp) && fs.exists(dst));
  122.     assertTrue(FileUtil.copy(fs, dst, fs, src, false, true, conf));
  123.     assertTrue(fs.delete(tmp, true));
  124.     fs.mkdirs(tmp);
  125.     try {
  126.       FileUtil.copy(fs, dst, fs, src, true, true, conf);
  127.       fail("Failed to detect existing dir");
  128.     } catch (IOException e) { }
  129.   }
  130.   public void testHomeDirectory() throws IOException {
  131.     Configuration conf = new Configuration();
  132.     FileSystem fileSys = FileSystem.getLocal(conf);
  133.     Path home = new Path(System.getProperty("user.home"))
  134.       .makeQualified(fileSys);
  135.     Path fsHome = fileSys.getHomeDirectory();
  136.     assertEquals(home, fsHome);
  137.   }
  138.   public void testPathEscapes() throws IOException {
  139.     Configuration conf = new Configuration();
  140.     FileSystem fs = FileSystem.getLocal(conf);
  141.     Path path = new Path(TEST_ROOT_DIR, "foo%bar");
  142.     writeFile(fs, path);
  143.     FileStatus status = fs.getFileStatus(path);
  144.     assertEquals(path.makeQualified(fs), status.getPath());
  145.     cleanupFile(fs, path);
  146.   }
  147. }