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

网格计算

开发平台:

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.ftp;
  19. import java.net.URI;
  20. import junit.framework.TestCase;
  21. import org.apache.ftpserver.DefaultFtpServerContext;
  22. import org.apache.ftpserver.FtpServer;
  23. import org.apache.ftpserver.ftplet.Authority;
  24. import org.apache.ftpserver.ftplet.UserManager;
  25. import org.apache.ftpserver.listener.mina.MinaListener;
  26. import org.apache.ftpserver.usermanager.BaseUser;
  27. import org.apache.ftpserver.usermanager.WritePermission;
  28. import org.apache.hadoop.conf.Configuration;
  29. import org.apache.hadoop.hdfs.DFSTestUtil;
  30. import org.apache.hadoop.fs.FileSystem;
  31. import org.apache.hadoop.fs.FileUtil;
  32. import org.apache.hadoop.fs.Path;
  33. import org.apache.hadoop.mapred.JobConf;
  34. /**
  35.  * Generates a bunch of random files and directories using class 'DFSTestUtil',
  36.  * stores them on the FTP file system, copies them and check if all the files
  37.  * were retrieved successfully without any data corruption
  38.  */
  39. public class TestFTPFileSystem extends TestCase {
  40.   private Configuration defaultConf = new JobConf();
  41.   private FtpServer server = null;
  42.   private FileSystem localFs = null;
  43.   private FileSystem ftpFs = null;
  44.   private Path workDir = new Path(new Path(System.getProperty(
  45.       "test.build.data", "."), "data"), "TestFTPFileSystem");
  46.   Path ftpServerRoot = new Path(workDir, "FTPServer");
  47.   Path ftpServerConfig = null;
  48.   private void startServer() {
  49.     try {
  50.       DefaultFtpServerContext context = new DefaultFtpServerContext(false);
  51.       MinaListener listener = new MinaListener();
  52.       // Set port to 0 for OS to give a free port
  53.       listener.setPort(0);
  54.       context.setListener("default", listener);
  55.       // Create a test user.
  56.       UserManager userManager = context.getUserManager();
  57.       BaseUser adminUser = new BaseUser();
  58.       adminUser.setName("admin");
  59.       adminUser.setPassword("admin");
  60.       adminUser.setEnabled(true);
  61.       adminUser.setAuthorities(new Authority[] { new WritePermission() });
  62.       Path adminUserHome = new Path(ftpServerRoot, "user/admin");
  63.       adminUser.setHomeDirectory(adminUserHome.toUri().getPath());
  64.       adminUser.setMaxIdleTime(0);
  65.       userManager.save(adminUser);
  66.       // Initialize the server and start.
  67.       server = new FtpServer(context);
  68.       server.start();
  69.     } catch (Exception e) {
  70.       throw new RuntimeException("FTP server start-up failed", e);
  71.     }
  72.   }
  73.   private void stopServer() {
  74.     if (server != null) {
  75.       server.stop();
  76.     }
  77.   }
  78.   @Override
  79.   public void setUp() throws Exception {
  80.     startServer();
  81.     defaultConf = new Configuration();
  82.     localFs = FileSystem.getLocal(defaultConf);
  83.     ftpServerConfig = new Path(localFs.getWorkingDirectory(), "res");
  84.     MinaListener listener = (MinaListener) server.getServerContext()
  85.         .getListener("default");
  86.     int serverPort = listener.getPort();
  87.     ftpFs = FileSystem.get(URI.create("ftp://admin:admin@localhost:"
  88.         + serverPort), defaultConf);
  89.   }
  90.   @Override
  91.   public void tearDown() throws Exception {
  92.     localFs.delete(ftpServerRoot, true);
  93.     localFs.delete(ftpServerConfig, true);
  94.     localFs.close();
  95.     ftpFs.close();
  96.     stopServer();
  97.   }
  98.   /**
  99.    * Tests FTPFileSystem, create(), open(), delete(), mkdirs(), rename(),
  100.    * listStatus(), getStatus() APIs. *
  101.    * 
  102.    * @throws Exception
  103.    */
  104.   public void testReadWrite() throws Exception {
  105.     DFSTestUtil util = new DFSTestUtil("TestFTPFileSystem", 20, 3, 1024 * 1024);
  106.     localFs.setWorkingDirectory(workDir);
  107.     Path localData = new Path(workDir, "srcData");
  108.     Path remoteData = new Path("srcData");
  109.     util.createFiles(localFs, localData.toUri().getPath());
  110.     boolean dataConsistency = util.checkFiles(localFs, localData.getName());
  111.     assertTrue("Test data corrupted", dataConsistency);
  112.     // Copy files and directories recursively to FTP file system.
  113.     boolean filesCopied = FileUtil.copy(localFs, localData, ftpFs, remoteData,
  114.         false, defaultConf);
  115.     assertTrue("Copying to FTPFileSystem failed", filesCopied);
  116.     // Rename the remote copy
  117.     Path renamedData = new Path("Renamed");
  118.     boolean renamed = ftpFs.rename(remoteData, renamedData);
  119.     assertTrue("Rename failed", renamed);
  120.     // Copy files and directories from FTP file system and delete remote copy.
  121.     filesCopied = FileUtil.copy(ftpFs, renamedData, localFs, workDir, true,
  122.         defaultConf);
  123.     assertTrue("Copying from FTPFileSystem fails", filesCopied);
  124.     // Check if the data was received completely without any corruption.
  125.     dataConsistency = util.checkFiles(localFs, renamedData.getName());
  126.     assertTrue("Invalid or corrupted data recieved from FTP Server!",
  127.         dataConsistency);
  128.     // Delete local copies
  129.     boolean deleteSuccess = localFs.delete(renamedData, true)
  130.         & localFs.delete(localData, true);
  131.     assertTrue("Local test data deletion failed", deleteSuccess);
  132.   }
  133. }