@Test
public void testSpaceQuotaChangeAfterReplacement() throws IOException {
final TableName tn = TableName.valueOf(name.getMethodName());
init(name.getMethodName());
RegionSizeStoreImpl sizeStore = new RegionSizeStoreImpl();
HStoreFile sf1 = mockStoreFileWithLength(1024L);
HStoreFile sf2 = mockStoreFileWithLength(2048L);
HStoreFile sf3 = mockStoreFileWithLength(4096L);
HStoreFile sf4 = mockStoreFileWithLength(8192L);
RegionInfo regionInfo = RegionInfoBuilder.newBuilder(tn).setStartKey(Bytes.toBytes("a"))
.setEndKey(Bytes.toBytes("b")).build();
sizeStore.put(regionInfo, 1024L + 4096L);
store.updateSpaceQuotaAfterFileReplacement(
sizeStore, regionInfo, Arrays.asList(sf1, sf3), Arrays.asList(sf2));
assertEquals(2048L, sizeStore.getRegionSize(regionInfo).getSize());
store.updateSpaceQuotaAfterFileReplacement(
sizeStore, regionInfo, Arrays.asList(sf2), Arrays.asList(sf2));
assertEquals(2048L, sizeStore.getRegionSize(regionInfo).getSize());
store.updateSpaceQuotaAfterFileReplacement(
sizeStore, regionInfo, Arrays.asList(sf2), Arrays.asList(sf3));
assertEquals(4096L, sizeStore.getRegionSize(regionInfo).getSize());
RegionInfo regionInfo2 = RegionInfoBuilder.newBuilder(tn).setStartKey(Bytes.toBytes("b"))
.setEndKey(Bytes.toBytes("c")).build();
store.updateSpaceQuotaAfterFileReplacement(sizeStore, regionInfo2, null, Arrays.asList(sf4));
assertEquals(8192L, sizeStore.getRegionSize(regionInfo2).getSize());
}