/* * The Alluxio Open Foundation licenses this work under the Apache License, version 2.0 * (the "License"). You may not use this work except in compliance with the License, which is * available at www.apache.org/licenses/LICENSE-2.0 * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied, as more fully set forth in the License. * * See the NOTICE file distributed with this work for information regarding copyright ownership. */ package alluxio.hadoop; import alluxio.LocalAlluxioClusterResource; import alluxio.BaseIntegrationTest; import alluxio.client.WriteType; import alluxio.client.file.FileSystemTestUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.Path; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Test; import java.net.URI; /** * Integration tests for {@link FileSystem#getFileBlockLocations(FileStatus, long, long)}. */ public class FileSystemBlockLocationIntegrationTest extends BaseIntegrationTest { private static final int BLOCK_SIZE = 1024; private static final int FILE_LEN = BLOCK_SIZE * 3; @ClassRule public static LocalAlluxioClusterResource sLocalAlluxioClusterResource = new LocalAlluxioClusterResource.Builder().build(); private static org.apache.hadoop.fs.FileSystem sTFS; @BeforeClass public static void beforeClass() throws Exception { Configuration conf = new Configuration(); conf.set("fs.alluxio.impl", FileSystem.class.getName()); alluxio.client.file.FileSystem alluxioFS = sLocalAlluxioClusterResource.get().getClient(); FileSystemTestUtils.createByteFile(alluxioFS, "/testFile1", WriteType.CACHE_THROUGH, FILE_LEN); URI uri = URI.create(sLocalAlluxioClusterResource.get().getMasterURI()); sTFS = org.apache.hadoop.fs.FileSystem.get(uri, conf); } /** * Test {@code BlockLocation[] getFileBlockLocations(FileStatus file, long start, long len)}. * Test the different situations of different start and len. */ @Test public void basicBlockLocation() throws Exception { FileStatus fStatus = sTFS.getFileStatus(new Path("/testFile1")); // block0.offset = start < start+len < block1.offset long start = 0; long len = BLOCK_SIZE - 1; Assert.assertEquals(1, sTFS.getFileBlockLocations(fStatus, start, len).length); // block0.offset < start < start+len < block1.offset start = 1; len = BLOCK_SIZE - 2; Assert.assertEquals(1, sTFS.getFileBlockLocations(fStatus, start, len).length); // block0.offset < start = start+len < block1.offset start = 1; len = 0; Assert.assertEquals(1, sTFS.getFileBlockLocations(fStatus, start, len).length); // block0.offset = start < start+len = block1.offset start = 0; len = BLOCK_SIZE; Assert.assertEquals(2, sTFS.getFileBlockLocations(fStatus, start, len).length); // block0.offset = start < block1.offset < start+len < block2.offset start = 0; len = BLOCK_SIZE + 1; Assert.assertEquals(2, sTFS.getFileBlockLocations(fStatus, start, len).length); // block0.offset < start < block1.offset < start+len < block2.offset start = 1; len = BLOCK_SIZE; Assert.assertEquals(2, sTFS.getFileBlockLocations(fStatus, start, len).length); // block0.offset = start < start+len = block2.offset start = 0; len = BLOCK_SIZE * 2; Assert.assertEquals(3, sTFS.getFileBlockLocations(fStatus, start, len).length); // block0.offset = start < start+len = file.len start = 0; len = FILE_LEN; Assert.assertEquals(3, sTFS.getFileBlockLocations(fStatus, start, len).length); // file.len < start < start+len start = FILE_LEN + 1; len = 1; Assert.assertEquals(0, sTFS.getFileBlockLocations(fStatus, start, len).length); } }