TestUrlStreamHandler.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 java.io.File;
  20. import java.io.IOException;
  21. import java.io.InputStream;
  22. import java.io.OutputStream;
  23. import java.net.URI;
  24. import java.net.URISyntaxException;
  25. import java.net.URL;
  26. import junit.framework.TestCase;
  27. import org.apache.hadoop.conf.Configuration;
  28. import org.apache.hadoop.hdfs.MiniDFSCluster;
  29. import org.apache.hadoop.fs.FileSystem;
  30. import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
  31. import org.apache.hadoop.fs.Path;
  32. /**
  33.  * Test of the URL stream handler factory.
  34.  */
  35. public class TestUrlStreamHandler extends TestCase {
  36.   /**
  37.    * Test opening and reading from an InputStream through a hdfs:// URL.
  38.    * <p>
  39.    * First generate a file with some content through the FileSystem API, then
  40.    * try to open and read the file through the URL stream API.
  41.    * 
  42.    * @throws IOException
  43.    */
  44.   public void testDfsUrls() throws IOException {
  45.     Configuration conf = new Configuration();
  46.     MiniDFSCluster cluster = new MiniDFSCluster(conf, 2, true, null);
  47.     FileSystem fs = cluster.getFileSystem();
  48.     // Setup our own factory
  49.     // setURLSteramHandlerFactor is can be set at most once in the JVM
  50.     // the new URLStreamHandler is valid for all tests cases 
  51.     // in TestStreamHandler
  52.     FsUrlStreamHandlerFactory factory =
  53.         new org.apache.hadoop.fs.FsUrlStreamHandlerFactory();
  54.     java.net.URL.setURLStreamHandlerFactory(factory);
  55.     Path filePath = new Path("/thefile");
  56.     try {
  57.       byte[] fileContent = new byte[1024];
  58.       for (int i = 0; i < fileContent.length; ++i)
  59.         fileContent[i] = (byte) i;
  60.       // First create the file through the FileSystem API
  61.       OutputStream os = fs.create(filePath);
  62.       os.write(fileContent);
  63.       os.close();
  64.       // Second, open and read the file content through the URL API
  65.       URI uri = fs.getUri();
  66.       URL fileURL =
  67.           new URL(uri.getScheme(), uri.getHost(), uri.getPort(), filePath
  68.               .toString());
  69.       InputStream is = fileURL.openStream();
  70.       assertNotNull(is);
  71.       byte[] bytes = new byte[4096];
  72.       assertEquals(1024, is.read(bytes));
  73.       is.close();
  74.       for (int i = 0; i < fileContent.length; ++i)
  75.         assertEquals(fileContent[i], bytes[i]);
  76.       // Cleanup: delete the file
  77.       fs.delete(filePath, false);
  78.     } finally {
  79.       fs.close();
  80.       cluster.shutdown();
  81.     }
  82.   }
  83.   /**
  84.    * Test opening and reading from an InputStream through a file:// URL.
  85.    * 
  86.    * @throws IOException
  87.    * @throws URISyntaxException
  88.    */
  89.   public void testFileUrls() throws IOException, URISyntaxException {
  90.     // URLStreamHandler is already set in JVM by testDfsUrls() 
  91.     Configuration conf = new Configuration();
  92.     // Locate the test temporary directory.
  93.     File tmpDir = new File(conf.get("hadoop.tmp.dir"));
  94.     if (!tmpDir.exists()) {
  95.       if (!tmpDir.mkdirs())
  96.         throw new IOException("Cannot create temporary directory: " + tmpDir);
  97.     }
  98.     File tmpFile = new File(tmpDir, "thefile");
  99.     URI uri = tmpFile.toURI();
  100.     FileSystem fs = FileSystem.get(uri, conf);
  101.     try {
  102.       byte[] fileContent = new byte[1024];
  103.       for (int i = 0; i < fileContent.length; ++i)
  104.         fileContent[i] = (byte) i;
  105.       // First create the file through the FileSystem API
  106.       OutputStream os = fs.create(new Path(uri.getPath()));
  107.       os.write(fileContent);
  108.       os.close();
  109.       // Second, open and read the file content through the URL API.
  110.       URL fileURL = uri.toURL();
  111.       InputStream is = fileURL.openStream();
  112.       assertNotNull(is);
  113.       byte[] bytes = new byte[4096];
  114.       assertEquals(1024, is.read(bytes));
  115.       is.close();
  116.       for (int i = 0; i < fileContent.length; ++i)
  117.         assertEquals(fileContent[i], bytes[i]);
  118.       // Cleanup: delete the file
  119.       fs.delete(new Path(uri.getPath()), false);
  120.     } finally {
  121.       fs.close();
  122.     }
  123.   }
  124. }