Package org.apache.hadoop.hdfs.server.namenode

Source Code of org.apache.hadoop.hdfs.server.namenode.TestFileDeleteWhitelist

/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.hdfs.server.namenode;

import java.io.IOException;
import java.util.Random;

import org.apache.commons.logging.impl.Log4JLogger;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.TestTrash;
import org.apache.hadoop.fs.TrashPolicy;
import org.apache.hadoop.hdfs.server.namenode.FSNamesystem;
import org.apache.hadoop.hdfs.server.namenode.NameNode;
import org.apache.hadoop.hdfs.MiniDFSCluster;
import org.apache.hadoop.hdfs.TestFileCreation;
import org.apache.log4j.Level;

public class TestFileDeleteWhitelist extends junit.framework.TestCase {
  static final long seed = 0xDEADBEEFL;
  static final int blockSize = 8192;

  {
    ((Log4JLogger)NameNode.stateChangeLog).getLogger().setLevel(Level.ALL);
    ((Log4JLogger)FSNamesystem.LOG).getLogger().setLevel(Level.ALL);
  }

  //
  // creates a zero file.
  //
  private void createFile(FileSystem fileSys, Path name)
    throws IOException {
    FSDataOutputStream stm = fileSys.create(name, true,
                                            fileSys.getConf().getInt("io.file.buffer.size", 4096),
                                            (short)1, (long)blockSize);
    byte[] buffer = new byte[1024];
    Random rand = new Random(seed);
    rand.nextBytes(buffer);
    stm.write(buffer);
    stm.close();
  }

  public void testFileDeleteWhiteList() throws IOException {
    Configuration conf = new Configuration();
    conf.setInt("heartbeat.recheck.interval", 1000);
    conf.setInt("dfs.heartbeat.interval", 1);
    conf.set("dfs.namenode.whitelist.file", "whitelist.conf");
    conf.setLong("dfs.namenode.config.reload.wait", 10000)// 10 milliseconds
    conf.setLong("dfs.replication.interval", 2)// seconds

    // create cluster
    MiniDFSCluster cluster = new MiniDFSCluster(conf, 1, true, null);
    FileSystem fs = null;
    try {
      cluster.waitActive();
      fs = cluster.getFileSystem();
      FSNamesystem namesys = cluster.getNameNode().getNamesystem();

      // create file1.
      Path dir = new Path("/foo");
      Path file1 = new Path(dir, "file1");
      createFile(fs, file1);
      System.out.println("testFileCreationDeleteParent: "
          + "Created file " + file1);

      // create file2.
      Path file2 = new Path(dir, "file2");
      createFile(fs, file2);
      System.out.println("testFileCreationDeleteParent: "
          + "Created file " + file2);

      // tell the namenode to never allow deletion of this path
      namesys.neverDeletePaths.add("/foo/file2");

      // this directory shoudl be deleted sucecssfully
      assertTrue(fs.delete(file1, true));
      System.out.println("testFileCreationDeleteParent: " +
                         "Successfulle deleted " + file1);

      // deleting file2 should fail
      boolean success = false;
      try {
        success = fs.delete(file2, true);
      } catch (Exception e) {
      }
      assertFalse(success);
      System.out.println("testFileCreationDeleteParent: " +
                         "Unable to  deleted " + file2 + " as expected");

      // renaming file2 should fail too
      success = false;
      try {
        success = fs.rename(file2, file1);
      } catch (Exception e) {
      }
      assertFalse(success);
      System.out.println("testFileCreationDeleteParent: " +
                         "Unable to rename " + file2 + " as expected");

    } finally {
      fs.close();
      cluster.shutdown();
    }
  }
 
  public void testFileDeleteWithTrash() throws IOException {
    Configuration conf = new Configuration();
    conf.set("fs.trash.interval", "10"); // 10 minute

    // create cluster
    MiniDFSCluster cluster = new MiniDFSCluster(conf, 1, true, null);
    FileSystem fs = null;
    try {
      cluster.waitActive();
      fs = cluster.getFileSystem();

      // create file1.
      Path dir = new Path("/foo");
      Path file1 = new Path(dir, "file1");
      createFile(fs, file1);
      System.out.println("testFileCreationDeleteParent: "
          + "Created file " + file1);
      fs.delete(file1, true);

      // create file2.
      Path file2 = new Path("/tmp", "file2");
      createFile(fs, file2);
      System.out.println("testFileCreationDeleteParent: "
          + "Created file " + file2);
      fs.delete(file2, true);

      TrashPolicy trashPolicy = TrashPolicy.getInstance(conf, fs, fs.getHomeDirectory());
      Path trashRoot = trashPolicy.getCurrentTrashDir();
      TestTrash.checkTrash(fs, trashRoot, file1);
      TestTrash.checkNotInTrash(fs, trashRoot, file2.toString());
    } finally {
      fs.close();
      cluster.shutdown();
    }
  }
}
TOP

Related Classes of org.apache.hadoop.hdfs.server.namenode.TestFileDeleteWhitelist

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.