use of alluxio.client.block.TestBufferedBlockOutStream in project alluxio by Alluxio.
the class FileInStreamTest method verifyCacheStreams.
/**
* Verifies that data was properly written to the cache streams.
*
* @param dataRead the bytes to read
*/
private void verifyCacheStreams(long dataRead) {
for (int streamIndex = 0; streamIndex < NUM_STREAMS; streamIndex++) {
TestBufferedBlockOutStream stream = mCacheStreams.get(streamIndex);
byte[] data = stream.getWrittenData();
if (streamIndex * BLOCK_LENGTH > dataRead) {
Assert.assertEquals(0, data.length);
} else {
long dataStart = streamIndex * BLOCK_LENGTH;
for (int i = 0; i < BLOCK_LENGTH && dataStart + i < dataRead; i++) {
Assert.assertEquals((byte) (dataStart + i), data[i]);
}
}
}
}
use of alluxio.client.block.TestBufferedBlockOutStream in project alluxio by Alluxio.
the class FileOutStreamTest method before.
/**
* Sets up the different contexts and clients before a test runs.
*/
@Before
public void before() throws Exception {
GroupMappingServiceTestUtils.resetCache();
ClientTestUtils.setSmallBufferSizes();
// PowerMock enums and final classes
mFileSystemContext = PowerMockito.mock(FileSystemContext.class);
mBlockStore = PowerMockito.mock(AlluxioBlockStore.class);
mFileSystemMasterClient = PowerMockito.mock(FileSystemMasterClient.class);
mFactory = PowerMockito.mock(UnderFileSystemFileOutStream.Factory.class);
PowerMockito.mockStatic(AlluxioBlockStore.class);
PowerMockito.when(AlluxioBlockStore.create(mFileSystemContext)).thenReturn(mBlockStore);
when(mFileSystemContext.acquireMasterClientResource()).thenReturn(new DummyCloseableResource<>(mFileSystemMasterClient));
when(mFileSystemMasterClient.getStatus(any(AlluxioURI.class))).thenReturn(new URIStatus(new FileInfo()));
// Worker file client mocking
mWorkerClient = PowerMockito.mock(FileSystemWorkerClient.class);
when(mFileSystemContext.createFileSystemWorkerClient()).thenReturn(mWorkerClient);
when(mWorkerClient.createUfsFile(any(AlluxioURI.class), any(CreateUfsFileOptions.class))).thenReturn(UFS_FILE_ID);
// Return sequentially increasing numbers for new block ids
when(mFileSystemMasterClient.getNewBlockIdForFile(FILE_NAME)).thenAnswer(new Answer<Long>() {
private long mCount = 0;
@Override
public Long answer(InvocationOnMock invocation) throws Throwable {
return mCount++;
}
});
// Set up out streams. When they are created, add them to outStreamMap
final Map<Long, TestBufferedBlockOutStream> outStreamMap = new HashMap<>();
when(mBlockStore.getOutStream(anyLong(), eq(BLOCK_LENGTH), any(OutStreamOptions.class))).thenAnswer(new Answer<BufferedBlockOutStream>() {
@Override
public BufferedBlockOutStream answer(InvocationOnMock invocation) throws Throwable {
Long blockId = invocation.getArgumentAt(0, Long.class);
if (!outStreamMap.containsKey(blockId)) {
TestBufferedBlockOutStream newStream = new TestBufferedBlockOutStream(blockId, BLOCK_LENGTH, mFileSystemContext);
outStreamMap.put(blockId, newStream);
}
return outStreamMap.get(blockId);
}
});
BlockWorkerInfo workerInfo = new BlockWorkerInfo(new WorkerNetAddress().setHost("localhost").setRpcPort(1).setDataPort(2).setWebPort(3), Constants.GB, 0);
when(mBlockStore.getWorkerInfoList()).thenReturn(Lists.newArrayList(workerInfo));
mAlluxioOutStreamMap = outStreamMap;
// Create an under storage stream so that we can check whether it has been flushed
final AtomicBoolean underStorageFlushed = new AtomicBoolean(false);
mUnderStorageOutputStream = new ByteArrayOutputStream() {
@Override
public void flush() {
underStorageFlushed.set(true);
}
};
mUnderStorageFlushed = underStorageFlushed;
when(mFactory.create(any(FileSystemContext.class), any(InetSocketAddress.class), anyLong())).thenReturn(mUnderStorageOutputStream);
// Set up underFileStorage so that we can test UnderStorageType.SYNC_PERSIST
mUnderFileSystem = ClientMockUtils.mockUnderFileSystem();
when(mUnderFileSystem.create(anyString())).thenReturn(mUnderStorageOutputStream);
when(mUnderFileSystem.create(anyString(), any(CreateOptions.class))).thenReturn(mUnderStorageOutputStream);
when(mUnderFileSystem.isDirectory(anyString())).thenReturn(true);
OutStreamOptions options = OutStreamOptions.defaults().setBlockSizeBytes(BLOCK_LENGTH).setWriteType(WriteType.CACHE_THROUGH).setUfsPath(FILE_NAME.getPath());
mTestStream = createTestStream(FILE_NAME, options);
}
use of alluxio.client.block.TestBufferedBlockOutStream in project alluxio by Alluxio.
the class FileInStreamTest method before.
/**
* Sets up the context and streams before a test runs.
*
* @throws AlluxioException when the worker ufs operations fail
* @throws IOException when the read and write streams fail
*/
@Before
public void before() throws Exception {
mInfo = new FileInfo().setBlockSizeBytes(BLOCK_LENGTH).setLength(FILE_LENGTH);
mDelegateUfsOps = Configuration.getBoolean(PropertyKey.USER_UFS_DELEGATION_ENABLED);
ClientTestUtils.setSmallBufferSizes();
mContext = PowerMockito.mock(FileSystemContext.class);
mBlockStore = Mockito.mock(AlluxioBlockStore.class);
PowerMockito.mockStatic(AlluxioBlockStore.class);
PowerMockito.when(AlluxioBlockStore.create(mContext)).thenReturn(mBlockStore);
PowerMockito.when(mBlockStore.getWorkerInfoList()).thenReturn(new ArrayList<BlockWorkerInfo>());
Mockito.mock(StreamFactory.class);
PowerMockito.mockStatic(StreamFactory.class);
// Set up BufferedBlockInStreams and caching streams
mCacheStreams = new ArrayList<>();
List<Long> blockIds = new ArrayList<>();
for (int i = 0; i < NUM_STREAMS; i++) {
blockIds.add((long) i);
mCacheStreams.add(new TestBufferedBlockOutStream(i, getBlockLength(i), mContext));
Mockito.when(mBlockStore.getInStream(Mockito.eq((long) i), Mockito.any(InStreamOptions.class))).thenAnswer(new Answer<BufferedBlockInStream>() {
@Override
public BufferedBlockInStream answer(InvocationOnMock invocation) throws Throwable {
long i = (Long) invocation.getArguments()[0];
byte[] input = BufferUtils.getIncreasingByteArray((int) (i * BLOCK_LENGTH), (int) getBlockLength((int) i));
return new TestBufferedBlockInStream(i, input);
}
});
Mockito.when(mBlockStore.getOutStream(Mockito.eq((long) i), Mockito.anyLong(), Mockito.any(WorkerNetAddress.class), Mockito.any(OutStreamOptions.class))).thenAnswer(new Answer<BufferedBlockOutStream>() {
@Override
public BufferedBlockOutStream answer(InvocationOnMock invocation) throws Throwable {
long i = (Long) invocation.getArguments()[0];
return mCacheStreams.get((int) i).isClosed() ? null : mCacheStreams.get((int) i);
}
});
}
mInfo.setBlockIds(blockIds);
mStatus = new URIStatus(mInfo);
mTestStream = new FileInStream(mStatus, InStreamOptions.defaults().setReadType(ReadType.CACHE_PROMOTE).setCachePartiallyReadBlock(false), mContext);
}
Aggregations