// 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());
  }
Пример #5
0
 /**
  * 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);
 }