@Test public void constructorShouldCallHighIdSupplierOnNonExistingIdFile() { // Given // An empty file (default, nothing to do) // and a mock supplier to test against LongSupplier highId = mock( LongSupplier.class ); when( highId.getAsLong() ).thenReturn( 0L ); // necessary, otherwise it runs into NPE in the constructor below // When // The id generator is started IdGeneratorImpl idGenerator = new IdGeneratorImpl( fsr.get(), file, 100, 100, false, IdType.NODE, highId ); // Then // The highId supplier must have been called to get the high id verify( highId ).getAsLong(); idGenerator.close(); }
@Test( expected = IllegalArgumentException.class ) public void grabSizeCannotBeZero() { IdGeneratorImpl.createGenerator( fs, idGeneratorFile(), 0, false ); new IdGeneratorImpl( fs, idGeneratorFile(), 0, 100, false, IdType.NODE, () -> 0L ).close(); }
@Test( expected = IllegalArgumentException.class ) public void grabSizeCannotBeNegative() { IdGeneratorImpl.createGenerator( fs, idGeneratorFile(), 0, false ); new IdGeneratorImpl( fs, idGeneratorFile(), -1, 100, false, IdType.NODE, () -> 0L ).close(); }
@Test public void shouldBeAbleToReadWrittenGenerator() { // Given IdGeneratorImpl.createGenerator( fsr.get(), file, 42, false ); IdGeneratorImpl idGenerator = new IdGeneratorImpl( fsr.get(), file, 100, 100, false, IdType.NODE, () -> 42L ); idGenerator.close(); // When idGenerator = new IdGeneratorImpl( fsr.get(), file, 100, 100, false, IdType.NODE, () -> 0L ); // Then assertThat( idGenerator.getHighId(), equalTo( 42L ) ); }
@Test public void delete() { IdGeneratorImpl.createGenerator( fs, idGeneratorFile(), 0, false ); IdGeneratorImpl idGenerator = new IdGeneratorImpl( fs, idGeneratorFile(), 10, 1000, false, IdType.NODE, () -> 0L ); long id = idGenerator.nextId(); idGenerator.nextId(); idGenerator.freeId( id ); idGenerator.close(); idGenerator.delete(); assertFalse( idGeneratorFile().exists() ); IdGeneratorImpl.createGenerator( fs, idGeneratorFile(), 0, false ); idGenerator = new IdGeneratorImpl( fs, idGeneratorFile(), 10, 1000, false, IdType.NODE, () -> 0L ); assertEquals( id, idGenerator.nextId() ); idGenerator.close(); }
@Test public void shouldReadDefragCountUsingStaticMethod() throws Exception { EphemeralFileSystemAbstraction fs = fsr.get(); IdGeneratorImpl.createGenerator( fs, file, 0, false ); IdGeneratorImpl idGenerator = new IdGeneratorImpl( fs, file, 1, 10000, false, IdType.NODE, () -> 0L ); idGenerator.nextId(); long a = idGenerator.nextId(); idGenerator.nextId(); long b = idGenerator.nextId(); idGenerator.nextId(); idGenerator.freeId( a ); idGenerator.freeId( b ); long expectedDefragCount = idGenerator.getDefragCount(); idGenerator.close(); long actualDefragCount = IdGeneratorImpl.readDefragCount( fs, file ); assertEquals( 2, expectedDefragCount ); assertEquals( expectedDefragCount, actualDefragCount ); }