From 8196a07c3211385ce85ae24f763b62696edc60b9 Mon Sep 17 00:00:00 2001 From: Steve Loughran Date: Thu, 24 Aug 2017 16:17:30 +0100 Subject: [PATCH] HDFS-12344. LocatedFileStatus regression: no longer accepting null FSPermission. Contributed by Ewan Higgs --- .../apache/hadoop/fs/LocatedFileStatus.java | 6 ++- .../hadoop/fs/TestLocatedFileStatus.java | 52 +++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocatedFileStatus.java diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/LocatedFileStatus.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/LocatedFileStatus.java index 885da07c4ca..dbb751dc44e 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/LocatedFileStatus.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/LocatedFileStatus.java @@ -84,8 +84,10 @@ public class LocatedFileStatus extends FileStatus { Path symlink, Path path, BlockLocation[] locations) { this(length, isdir, block_replication, blocksize, modification_time, access_time, permission, owner, group, symlink, path, - permission.getAclBit(), permission.getEncryptedBit(), - permission.getErasureCodedBit(), locations); + permission == null ? false : permission.getAclBit(), + permission == null ? false : permission.getEncryptedBit(), + permission == null ? false : permission.getErasureCodedBit(), + locations); } /** diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocatedFileStatus.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocatedFileStatus.java new file mode 100644 index 00000000000..4490f923e24 --- /dev/null +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocatedFileStatus.java @@ -0,0 +1,52 @@ +/** + * 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.fs; + +import org.apache.hadoop.fs.permission.FsPermission; +import org.junit.Test; + +import java.io.IOException; + +import static org.mockito.Mockito.mock; + +/** + * This class tests the LocatedFileStatus class. + */ +public class TestLocatedFileStatus { + @Test + public void testDeprecatedConstruction() throws IOException { + BlockLocation[] locs = new BlockLocation[] {mock(BlockLocation.class)}; + final boolean isDir = false; + final int repl = 3; + final long blocksize = 64 * 1024 * 1024; + final long modificationTime = 0; + final long accessTime = 0; + + // We should be able to pass null for the permission. + LocatedFileStatus lfsNullPerm = new LocatedFileStatus(1, isDir, + repl, blocksize, modificationTime, accessTime, null, null, null, + null, new Path("/some-file.txt"), locs); + FsPermission permission = mock(FsPermission.class); + + // We should also be able to pass a permission or the permission. + LocatedFileStatus lfsNonNullPerm = new LocatedFileStatus(1, isDir, + repl, blocksize, modificationTime, accessTime, permission, null, + null, null, new Path("/some-file.txt"), locs); + } +}