// Tests generating a report clears the state of the reporter @Test public void generateReportStateClearTest() { Long block1 = 1L; moveBlock(block1, MEM_LOC); // First report should have updates BlockHeartbeatReport report = mReporter.generateReport(); Assert.assertFalse(report.getAddedBlocks().isEmpty()); // Second report should not have updates BlockHeartbeatReport nextReport = mReporter.generateReport(); Assert.assertTrue(nextReport.getAddedBlocks().isEmpty()); Assert.assertTrue(nextReport.getRemovedBlocks().isEmpty()); }
// Tests a report is correctly generated after moving blocks @Test public void generateReportMoveTest() { Long block1 = 1L; Long block2 = 2L; Long block3 = 3L; moveBlock(block1, MEM_LOC); moveBlock(block2, SSD_LOC); moveBlock(block3, HDD_LOC); BlockHeartbeatReport report = mReporter.generateReport(); Map<Long, List<Long>> addedBlocks = report.getAddedBlocks(); // Block1 moved to memory List<Long> addedBlocksMem = addedBlocks.get(MEM_LOC.getStorageDirId()); Assert.assertEquals(1, addedBlocksMem.size()); Assert.assertEquals(block1, addedBlocksMem.get(0)); // Block2 moved to ssd List<Long> addedBlocksSsd = addedBlocks.get(SSD_LOC.getStorageDirId()); Assert.assertEquals(1, addedBlocksSsd.size()); Assert.assertEquals(block2, addedBlocksSsd.get(0)); // Block3 moved to hdd List<Long> addedBlocksHdd = addedBlocks.get(HDD_LOC.getStorageDirId()); Assert.assertEquals(1, addedBlocksHdd.size()); Assert.assertEquals(block3, addedBlocksHdd.get(0)); }
// Tests a report is correctly generated after moving and then removing a block @Test public void generateReportMoveThenRemoveTest() { Long block1 = 1L; moveBlock(block1, MEM_LOC); removeBlock(block1); // The block should not be in the added blocks list BlockHeartbeatReport report = mReporter.generateReport(); Assert.assertEquals(null, report.getAddedBlocks().get(MEM_LOC.getStorageDirId())); // The block should be in the removed blocks list List<Long> removedBlocks = report.getRemovedBlocks(); Assert.assertEquals(1, removedBlocks.size()); Assert.assertTrue(removedBlocks.contains(block1)); }
// Tests a report is correctly generated after removing blocks @Test public void generateReportRemoveTest() { Long block1 = 1L; Long block2 = 2L; Long block3 = 3L; removeBlock(block1); removeBlock(block2); removeBlock(block3); BlockHeartbeatReport report = mReporter.generateReport(); // All blocks should be removed List<Long> removedBlocks = report.getRemovedBlocks(); Assert.assertEquals(3, removedBlocks.size()); Assert.assertTrue(removedBlocks.contains(block1)); Assert.assertTrue(removedBlocks.contains(block2)); Assert.assertTrue(removedBlocks.contains(block3)); // No blocks should have been added Map<Long, List<Long>> addedBlocks = report.getAddedBlocks(); Assert.assertTrue(addedBlocks.isEmpty()); }
/** * Gets a report for the periodic heartbeat to master. Contains the blocks added since the last * heart beat and blocks removed since the last heartbeat. * * @return a block heartbeat report */ public BlockHeartbeatReport getReport() { return mHeartbeatReporter.generateReport(); }
// Tests Empty Report @Test public void generateReportEmptyTest() { BlockHeartbeatReport report = mReporter.generateReport(); Assert.assertTrue(report.getAddedBlocks().isEmpty()); Assert.assertTrue(report.getRemovedBlocks().isEmpty()); }
private void removeBlock(long blockId) { mReporter.onRemoveBlockByWorker(USER_ID, blockId); }
private void moveBlock(long blockId, BlockStoreLocation newLocation) { BlockStoreLocation unusedOldLocation = new BlockStoreLocation(1, 0, 0); mReporter.onMoveBlockByWorker(USER_ID, blockId, unusedOldLocation, newLocation); }