Skip to content

Commit

Permalink
fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
nitin-ebi committed Mar 15, 2024
1 parent e4fabd0 commit 3d179ed
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -90,4 +90,8 @@ public List<ContiguousIdBlock> reserveUncompletedBlocksByCategoryIdAndApplicatio
return blocksList;
}
}

public ContiguousIdBlockRepository getRepository() {
return repository;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
import uk.ac.ebi.ampt2d.commons.accession.core.models.AccessionWrapper;
import uk.ac.ebi.ampt2d.commons.accession.core.models.GetOrCreateAccessionWrapper;
import uk.ac.ebi.ampt2d.commons.accession.generators.monotonic.MonotonicAccessionGenerator;
import uk.ac.ebi.ampt2d.commons.accession.generators.monotonic.MonotonicRange;
import uk.ac.ebi.ampt2d.commons.accession.generators.monotonic.MonotonicRangePriorityQueue;
import uk.ac.ebi.ampt2d.commons.accession.hashing.SHA1HashingFunction;
import uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.monotonic.entities.ContiguousIdBlock;
Expand All @@ -46,6 +45,8 @@

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static uk.ac.ebi.ampt2d.commons.accession.util.ContiguousIdBlockUtil.getUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc;
import static uk.ac.ebi.ampt2d.commons.accession.util.ContiguousIdBlockUtil.getUnreservedContiguousIdBlock;

@RunWith(SpringRunner.class)
@DataJpaTest
Expand Down Expand Up @@ -75,12 +76,12 @@ public void testRecoverState() {
// create 3 un-complete contiguous id blocks of size 10
// block-1 : (100 to 109), block-2 : (110 to 119), block-3 : (120 to 129)
List<ContiguousIdBlock> uncompletedBlocks = new ArrayList<>();
uncompletedBlocks.add(new ContiguousIdBlock(categoryId, instanceId2, 100, 10));
uncompletedBlocks.add(new ContiguousIdBlock(categoryId, instanceId2, 110, 10));
uncompletedBlocks.add(new ContiguousIdBlock(categoryId, instanceId2, 120, 10));
uncompletedBlocks.add(getUnreservedContiguousIdBlock(categoryId, instanceId2, 100, 10));
uncompletedBlocks.add(getUnreservedContiguousIdBlock(categoryId, instanceId2, 110, 10));
uncompletedBlocks.add(getUnreservedContiguousIdBlock(categoryId, instanceId2, 120, 10));
contiguousIdBlockService.save(uncompletedBlocks);

assertEquals(3, contiguousIdBlockService.reserveUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(categoryId, instanceId2).size());
assertEquals(3, getUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(contiguousIdBlockService.getRepository(), categoryId, instanceId2).size());

// create and save accessions in db (100 to 124) - save 2 sets of same accessions with different hashes
List<AccessionWrapper<TestModel, String, Long>> accessionsSet1 = LongStream.range(100l, 125l)
Expand All @@ -101,8 +102,8 @@ public void testRecoverState() {
// block-1 (100 to 109) : fully complete
// block-2 (110 to 119) : fully complete
// block-3 (120 to 124) : partially complete
assertEquals(1, contiguousIdBlockService.reserveUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(categoryId, instanceId2).size());
ContiguousIdBlock uncompletedBlock = contiguousIdBlockService.reserveUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(categoryId, instanceId2).get(0);
assertEquals(1, getUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(contiguousIdBlockService.getRepository(),categoryId, instanceId2).size());
ContiguousIdBlock uncompletedBlock = getUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(contiguousIdBlockService.getRepository(), categoryId, instanceId2).get(0);
assertEquals(120l, uncompletedBlock.getFirstValue());
assertEquals(129l, uncompletedBlock.getLastValue());
assertEquals(124l, uncompletedBlock.getLastCommitted());
Expand All @@ -120,19 +121,19 @@ public void testAlternateRangesWithDifferentGenerators() throws AccessionCouldNo
so the accesions will be in the range of 0-19,40-59,80-99 */
String categoryId = "eva_2";
String instanceId2 = "test-instance_2";
List<GetOrCreateAccessionWrapper<TestModel, String, Long>> evaAccessions = getAccessioningService(categoryId, INSTANCE_ID)
.getOrCreate(getObjectsForAccessionsInRange(1, 9));
BasicAccessioningService accService1 = getAccessioningService(categoryId, INSTANCE_ID);
List<GetOrCreateAccessionWrapper<TestModel, String, Long>> evaAccessions = accService1.getOrCreate(getObjectsForAccessionsInRange(1, 9));
assertEquals(9, evaAccessions.size());
assertEquals(0, evaAccessions.get(0).getAccession().longValue());
assertEquals(8, evaAccessions.get(8).getAccession().longValue());
//BlockSize of 10 was reserved but only 9 elements have been accessioned
assertEquals(1, contiguousIdBlockService
.reserveUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(categoryId, INSTANCE_ID)
assertEquals(1, getUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(contiguousIdBlockService.getRepository(),categoryId, INSTANCE_ID)
.size());
accService1.shutDownAccessioning();

//Get another service for same category
evaAccessions = getAccessioningService(categoryId, INSTANCE_ID)
.getOrCreate(getObjectsForAccessionsInRange(11, 30));
BasicAccessioningService accService2 = getAccessioningService(categoryId, INSTANCE_ID);
evaAccessions = accService2.getOrCreate(getObjectsForAccessionsInRange(11, 30));
assertEquals(20, evaAccessions.size());
//Previous block ended here as only 9 elements were accessioned out of a blocksize of 10
assertEquals(9, evaAccessions.get(0).getAccession().longValue());
Expand All @@ -145,23 +146,23 @@ public void testAlternateRangesWithDifferentGenerators() throws AccessionCouldNo
assertEquals(40, evaAccessions.get(11).getAccession().longValue());
assertEquals(48, evaAccessions.get(19).getAccession().longValue());
//BlockSize if 10 was reserved but only 9 elements have been accessioned
assertEquals(1, contiguousIdBlockService.reserveUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc
(categoryId, INSTANCE_ID).size());
assertEquals(1, getUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(contiguousIdBlockService.getRepository(), categoryId, INSTANCE_ID).size());
accService2.shutDownAccessioning();

//Get another service for same category but different Instance
evaAccessions = getAccessioningService(categoryId, instanceId2)
.getOrCreate(getObjectsForAccessionsInRange(31, 39));
BasicAccessioningService accService3 = getAccessioningService(categoryId, instanceId2);
evaAccessions = accService3.getOrCreate(getObjectsForAccessionsInRange(31, 39));
assertEquals(9, evaAccessions.size());
//New Block from different instance have not jumped as still blocks are available before interleaving point
assertNotEquals(80, evaAccessions.get(0).getAccession().longValue());
assertEquals(50, evaAccessions.get(0).getAccession().longValue());
assertEquals(58, evaAccessions.get(8).getAccession().longValue());
assertEquals(1, contiguousIdBlockService
.reserveUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(categoryId, instanceId2).size());
assertEquals(1, getUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(contiguousIdBlockService.getRepository(),categoryId, instanceId2).size());
accService3.shutDownAccessioning();

//Get previous uncompleted service from instance1 and create accessions
evaAccessions = getAccessioningService(categoryId, INSTANCE_ID)
.getOrCreate(getObjectsForAccessionsInRange(40, 41));
BasicAccessioningService accService4 = getAccessioningService(categoryId, INSTANCE_ID);
evaAccessions = accService4.getOrCreate(getObjectsForAccessionsInRange(40, 41));
assertEquals(2, evaAccessions.size());
assertEquals(49, evaAccessions.get(0).getAccession().longValue()); //Block ended here
//New Block with 20 interval from last block made in instanceId2
Expand All @@ -173,7 +174,7 @@ private List<TestModel> getObjectsForAccessionsInRange(int startRange, int endRa
.toList());
}

private AccessioningService<TestModel, String, Long> getAccessioningService(String categoryId,
private BasicAccessioningService<TestModel, String, Long> getAccessioningService(String categoryId,
String instanceId) {
return new BasicAccessioningService<>(
getGenerator(categoryId, instanceId),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,7 @@ public void assertMultipleReleaseAndCommitsWorks() throws Exception {
public void assertRecoverNoPendingCommit() throws Exception {
MonotonicAccessionGenerator generator = getMonotonicAccessionGenerator();
long[] accessions1 = generator.generateAccessions(BLOCK_SIZE);
generator.shutDownAccessionGenerator();
// Now assume that the db layer has stored some elements and that the application has died and restarted.

MonotonicAccessionGenerator generatorRecovering =
Expand All @@ -319,6 +320,7 @@ public void assertRecoverPendingCommit() throws Exception {
MonotonicAccessionGenerator generator = getMonotonicAccessionGenerator();
long[] accessions1 = generator.generateAccessions(BLOCK_SIZE);
generator.commit(0, 1);
generator.shutDownAccessionGenerator();
// Now assume that the db layer has stored some elements and that the application has died and restarted.

MonotonicAccessionGenerator generatorRecovering = new MonotonicAccessionGenerator(
Expand Down Expand Up @@ -420,6 +422,7 @@ public void assertReleaseInAlternateRanges() throws Exception {
public void assertRecoverInAlternateRanges() throws Exception {
MonotonicAccessionGenerator generator = getMonotonicAccessionGeneratorForCategoryHavingBlockInterval();
long[] accessions1 = generator.generateAccessions(NUM_OF_ACCESSIONS);
generator.shutDownAccessionGenerator();
// Now assume that the db layer has stored some elements and that the application has died and restarted.
MonotonicAccessionGenerator generatorRecovering =
new MonotonicAccessionGenerator(CATEGORY_ID_2, INSTANCE_ID, service, new long[]{2, 3});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThrows;
import static org.junit.Assert.assertTrue;
import static uk.ac.ebi.ampt2d.commons.accession.util.ContiguousIdBlockUtil.getUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc;
import static uk.ac.ebi.ampt2d.commons.accession.util.ContiguousIdBlockUtil.getUnreservedContiguousIdBlock;

@RunWith(SpringRunner.class)
@DataJpaTest
Expand Down Expand Up @@ -98,16 +100,13 @@ public void testReserveNewBlocksWithMultipleInstances() {
@Test
public void testGetUncompleteBlocks() {
// block: uncompleted and unreserved
ContiguousIdBlock uncompletedBlock = new ContiguousIdBlock(CATEGORY_ID, INSTANCE_ID, 0, 5);
uncompletedBlock.releaseReserved();
ContiguousIdBlock uncompletedBlock = getUnreservedContiguousIdBlock(CATEGORY_ID, INSTANCE_ID, 0, 5);
// block: completed and unreserved
ContiguousIdBlock completedBlock = new ContiguousIdBlock(CATEGORY_ID, INSTANCE_ID, 10, 5);
ContiguousIdBlock completedBlock = getUnreservedContiguousIdBlock(CATEGORY_ID, INSTANCE_ID, 10, 5);
completedBlock.setLastCommitted(14);
completedBlock.releaseReserved();

// block: different instance id
ContiguousIdBlock newBlock1 = new ContiguousIdBlock(CATEGORY_ID, INSTANCE_ID_2, 5, 5);
newBlock1.releaseReserved();
// block: uncompleted and unreserved but with different instance id
ContiguousIdBlock newBlock1 = getUnreservedContiguousIdBlock(CATEGORY_ID, INSTANCE_ID_2, 5, 5);
// block: uncompleted but reserved
ContiguousIdBlock newBlock2 = new ContiguousIdBlock(CATEGORY_ID, INSTANCE_ID, 15, 5);

Expand All @@ -129,16 +128,13 @@ public void testGetUncompleteBlocks() {
@Test
public void testBlockSizeAndIntervalForCategory() {
ContiguousIdBlock block1 = service.reserveNewBlock(CATEGORY_ID_2, INSTANCE_ID);
block1.releaseReserved();
assertEquals(0, block1.getFirstValue());
assertEquals(999, block1.getLastValue());
ContiguousIdBlock block2 = service.reserveNewBlock(CATEGORY_ID_2, INSTANCE_ID);
block2.releaseReserved();
assertEquals(2000, block2.getFirstValue());
assertEquals(2999, block2.getLastValue());

List<ContiguousIdBlock> contiguousBlocks = service
.reserveUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(CATEGORY_ID_2, INSTANCE_ID);
List<ContiguousIdBlock> contiguousBlocks = getUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(service.getRepository(),CATEGORY_ID_2, INSTANCE_ID);
assertEquals(2, contiguousBlocks.size());
assertTrue(contiguousBlocks.get(0).isNotFull());
assertTrue(contiguousBlocks.get(1).isNotFull());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package uk.ac.ebi.ampt2d.commons.accession.util;

import uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.monotonic.entities.ContiguousIdBlock;
import uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.monotonic.repositories.ContiguousIdBlockRepository;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class ContiguousIdBlockUtil {

public static ContiguousIdBlock getUnreservedContiguousIdBlock(ContiguousIdBlock block) {
block.releaseReserved();
return block;
}

public static ContiguousIdBlock getUnreservedContiguousIdBlock(String categoryId, String instanceId, long firstValue, long size) {
ContiguousIdBlock block = new ContiguousIdBlock(categoryId, instanceId, firstValue, size);
block.releaseReserved();
return block;
}

public static List<ContiguousIdBlock> getUncompletedBlocksByCategoryIdAndApplicationInstanceIdOrderByEndAsc(ContiguousIdBlockRepository repository,
String categoryId, String applicationInstanceId) {
try (Stream<ContiguousIdBlock> reservedBlocksOfThisInstance = repository
.findAllByCategoryIdAndApplicationInstanceIdOrderByLastValueAsc(categoryId, applicationInstanceId)) {
List<ContiguousIdBlock> blocksList = reservedBlocksOfThisInstance.filter(block -> block.isNotFull())
.collect(Collectors.toList());

return blocksList;
}
}

}

0 comments on commit 3d179ed

Please sign in to comment.