/** Test {@link tachyon.client.block.BufferedBlockInStream#read()}. */ @Test public void readTest1() throws IOException, TachyonException { String uniqPath = PathUtils.uniqPath(); for (int k = MIN_LEN; k <= MAX_LEN; k += DELTA) { for (CreateFileOptions op : getOptionSet()) { TachyonURI path = new TachyonURI(uniqPath + "/file_" + k + "_" + op.hashCode()); FileSystemTestUtils.createByteFile(sFileSystem, path, op, k); for (int i = 0; i < 2; i++) { FileInStream is = sFileSystem.openFile(path, FileSystemTestUtils.toOpenFileOptions(op)); byte[] ret = new byte[k]; int value = is.read(); int cnt = 0; while (value != -1) { Assert.assertTrue(value >= 0); Assert.assertTrue(value < 256); ret[cnt++] = (byte) value; value = is.read(); } Assert.assertEquals(cnt, k); Assert.assertTrue(BufferUtils.equalIncreasingByteArray(k, ret)); is.close(); } } } }
/** * Keep creating files until something crashes or fail to create. Record how many files are * created successfully. */ @Override public void run() { try { // This infinity loop will be broken if something crashes or fail to create. This is // expected since the master will shutdown at a certain time. while (true) { if (mOpType == 0) { try { mFileSystem.createFile(new TachyonURI(TEST_FILE_DIR + mSuccessNum)).close(); } catch (IOException e) { break; } } else if (mOpType == 1) { // TODO(gene): Add this back when there is new RawTable client API. // if (mFileSystem.createRawTable(new TachyonURI(TEST_TABLE_DIR + mSuccessNum), 1) == // -1) { // break; // } } // The create operation may succeed at the master side but still returns false due to the // shutdown. So the mSuccessNum may be less than the actual success number. mSuccessNum++; CommonUtils.sleepMs(100); } } catch (Exception e) { // Something crashed. Stop the thread. } }
/** Test {@link tachyon.client.block.BufferedBlockInStream#read(byte[])}. */ @Test public void readTest2() throws IOException, TachyonException { for (int k = MIN_LEN; k <= MAX_LEN; k += DELTA) { for (CreateFileOptions op : getOptionSet()) { TachyonURI path = new TachyonURI(sTestPath + "/file_" + k + "_" + op.hashCode()); FileInStream is = sFileSystem.openFile(path, FileSystemTestUtils.toOpenFileOptions(op)); byte[] ret = new byte[k]; Assert.assertEquals(k, is.read(ret)); Assert.assertTrue(BufferUtils.equalIncreasingByteArray(k, ret)); is.close(); is = sFileSystem.openFile(path, FileSystemTestUtils.toOpenFileOptions(op)); ret = new byte[k]; Assert.assertEquals(k, is.read(ret)); Assert.assertTrue(BufferUtils.equalIncreasingByteArray(k, ret)); is.close(); } } }
/** Test {@link tachyon.client.block.BufferedBlockInStream#skip(long)}. */ @Test public void skipTest() throws IOException, TachyonException { for (int k = MIN_LEN + DELTA; k <= MAX_LEN; k += DELTA) { for (CreateFileOptions op : getOptionSet()) { TachyonURI path = new TachyonURI(sTestPath + "/file_" + k + "_" + op.hashCode()); FileInStream is = sFileSystem.openFile(path, FileSystemTestUtils.toOpenFileOptions(op)); Assert.assertEquals(k / 2, is.skip(k / 2)); Assert.assertEquals(k / 2, is.read()); is.close(); is = sFileSystem.openFile(path, FileSystemTestUtils.toOpenFileOptions(op)); int t = k / 3; Assert.assertEquals(t, is.skip(t)); Assert.assertEquals(t, is.read()); Assert.assertEquals(t, is.skip(t)); Assert.assertEquals(2 * t + 1, is.read()); is.close(); } } }
/** * Tests creating and opening a store with a number of keys, while each key-value pair is large * enough to take a separate key-value partition. */ @Test public void createMultiPartitionsTest() throws Exception { // TODO(cc): Remove codes using createStoreOfMultiplePartitions. final long maxPartitionSize = Constants.MB; // Each partition is at most 1 MB final int numKeys = 10; final int keyLength = 4; // 4Byte key final int valueLength = 500 * Constants.KB; // 500KB value FileSystem fs = FileSystem.Factory.get(); ClientContext.getConf() .set(Constants.KEY_VALUE_PARTITION_SIZE_BYTES_MAX, String.valueOf(maxPartitionSize)); mWriter = sKeyValueSystem.createStore(mStoreUri); for (int i = 0; i < numKeys; i++) { byte[] key = BufferUtils.getIncreasingByteArray(i, keyLength); byte[] value = BufferUtils.getIncreasingByteArray(i, valueLength); mWriter.put(key, value); } mWriter.close(); List<URIStatus> files = fs.listStatus(mStoreUri); Assert.assertEquals(numKeys, files.size()); for (URIStatus info : files) { Assert.assertTrue(info.getLength() <= maxPartitionSize); } mReader = sKeyValueSystem.openStore(mStoreUri); for (int i = 0; i < numKeys; i++) { byte[] key = BufferUtils.getIncreasingByteArray(i, keyLength); byte[] value = mReader.get(key); Assert.assertTrue(BufferUtils.equalIncreasingByteArray(i, valueLength, value)); } Assert.assertNull(mReader.get(KEY1)); Assert.assertNull(mReader.get(KEY2)); mReader.close(); }