| /* |
| * 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.swift; |
| |
| import org.apache.hadoop.fs.FileStatus; |
| import org.apache.hadoop.fs.Path; |
| import org.junit.Test; |
| |
| import java.io.IOException; |
| |
| import static org.apache.hadoop.fs.swift.util.SwiftTestUtils.assertListStatusFinds; |
| import static org.apache.hadoop.fs.swift.util.SwiftTestUtils.cleanup; |
| import static org.apache.hadoop.fs.swift.util.SwiftTestUtils.dumpStats; |
| import static org.apache.hadoop.fs.swift.util.SwiftTestUtils.touch; |
| |
| /** |
| * Test the FileSystem#listStatus() operations |
| */ |
| public class TestSwiftFileSystemLsOperations extends SwiftFileSystemBaseTest { |
| |
| private Path[] testDirs; |
| |
| /** |
| * Setup creates dirs under test/hadoop |
| * |
| * @throws Exception |
| */ |
| @Override |
| public void setUp() throws Exception { |
| super.setUp(); |
| //delete the test directory |
| Path test = path("/test"); |
| fs.delete(test, true); |
| mkdirs(test); |
| } |
| |
| /** |
| * Create subdirectories and files under test/ for those tests |
| * that want them. Doing so adds overhead to setup and teardown, |
| * so should only be done for those tests that need them. |
| * @throws IOException on an IO problem |
| */ |
| private void createTestSubdirs() throws IOException { |
| testDirs = new Path[]{ |
| path("/test/hadoop/a"), |
| path("/test/hadoop/b"), |
| path("/test/hadoop/c/1"), |
| }; |
| |
| assertPathDoesNotExist("test directory setup", testDirs[0]); |
| for (Path path : testDirs) { |
| mkdirs(path); |
| } |
| } |
| |
| @Test(timeout = SWIFT_TEST_TIMEOUT) |
| public void testListLevelTest() throws Exception { |
| createTestSubdirs(); |
| FileStatus[] paths = fs.listStatus(path("/test")); |
| assertEquals(dumpStats("/test", paths), 1, paths.length); |
| assertEquals(path("/test/hadoop"), paths[0].getPath()); |
| } |
| |
| @Test(timeout = SWIFT_TEST_TIMEOUT) |
| public void testListLevelTestHadoop() throws Exception { |
| createTestSubdirs(); |
| FileStatus[] paths; |
| paths = fs.listStatus(path("/test/hadoop")); |
| String stats = dumpStats("/test/hadoop", paths); |
| assertEquals("Paths.length wrong in " + stats, 3, paths.length); |
| assertEquals("Path element[0] wrong: " + stats, path("/test/hadoop/a"), |
| paths[0].getPath()); |
| assertEquals("Path element[1] wrong: " + stats, path("/test/hadoop/b"), |
| paths[1].getPath()); |
| assertEquals("Path element[2] wrong: " + stats, path("/test/hadoop/c"), |
| paths[2].getPath()); |
| } |
| |
| @Test(timeout = SWIFT_TEST_TIMEOUT) |
| public void testListStatusEmptyDirectory() throws Exception { |
| createTestSubdirs(); |
| FileStatus[] paths; |
| paths = fs.listStatus(path("/test/hadoop/a")); |
| assertEquals(dumpStats("/test/hadoop/a", paths), 0, |
| paths.length); |
| } |
| |
| @Test(timeout = SWIFT_TEST_TIMEOUT) |
| public void testListStatusFile() throws Exception { |
| describe("Create a single file under /test;" + |
| " assert that listStatus(/test) finds it"); |
| Path file = path("/test/filename"); |
| createFile(file); |
| FileStatus[] pathStats = fs.listStatus(file); |
| assertEquals(dumpStats("/test/", pathStats), |
| 1, |
| pathStats.length); |
| //and assert that the len of that ls'd path is the same as the original |
| FileStatus lsStat = pathStats[0]; |
| assertEquals("Wrong file len in listing of " + lsStat, |
| data.length, lsStat.getLen()); |
| } |
| |
| @Test(timeout = SWIFT_TEST_TIMEOUT) |
| public void testListEmptyRoot() throws Throwable { |
| describe("Empty the root dir and verify that an LS / returns {}"); |
| cleanup("testListEmptyRoot", fs, "/test"); |
| cleanup("testListEmptyRoot", fs, "/user"); |
| FileStatus[] fileStatuses = fs.listStatus(path("/")); |
| assertEquals("Non-empty root" + dumpStats("/", fileStatuses), |
| 0, |
| fileStatuses.length); |
| } |
| |
| @Test(timeout = SWIFT_TEST_TIMEOUT) |
| public void testListNonEmptyRoot() throws Throwable { |
| Path test = path("/test"); |
| touch(fs, test); |
| FileStatus[] fileStatuses = fs.listStatus(path("/")); |
| String stats = dumpStats("/", fileStatuses); |
| assertEquals("Wrong #of root children" + stats, 1, fileStatuses.length); |
| FileStatus status = fileStatuses[0]; |
| assertEquals("Wrong path value" + stats,test, status.getPath()); |
| } |
| |
| @Test(timeout = SWIFT_TEST_TIMEOUT) |
| public void testListStatusRootDir() throws Throwable { |
| Path dir = path("/"); |
| Path child = path("/test"); |
| touch(fs, child); |
| assertListStatusFinds(fs, dir, child); |
| } |
| |
| @Test(timeout = SWIFT_TEST_TIMEOUT) |
| public void testListStatusFiltered() throws Throwable { |
| Path dir = path("/"); |
| Path child = path("/test"); |
| touch(fs, child); |
| FileStatus[] stats = fs.listStatus(dir, new AcceptAllFilter()); |
| boolean found = false; |
| StringBuilder builder = new StringBuilder(); |
| for (FileStatus stat : stats) { |
| builder.append(stat.toString()).append('\n'); |
| if (stat.getPath().equals(child)) { |
| found = true; |
| } |
| } |
| assertTrue("Path " + child |
| + " not found in directory " + dir + ":" + builder, |
| found); |
| } |
| |
| } |