diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/SplitPersistenceServiceTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/SplitPersistenceServiceTest.java new file mode 100644 index 0000000000..ac862afaca --- /dev/null +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/osgi/SplitPersistenceServiceTest.java @@ -0,0 +1,65 @@ +package org.apache.jackrabbit.oak.segment.osgi; + +import org.apache.jackrabbit.guava.common.collect.ImmutableMap; +import org.apache.jackrabbit.oak.api.CommitFailedException; +import org.apache.jackrabbit.oak.segment.SegmentNodeStore; +import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders; +import org.apache.jackrabbit.oak.segment.file.FileStore; +import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder; +import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException; +import org.apache.jackrabbit.oak.segment.file.tar.TarPersistence; +import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentNodeStorePersistence; +import org.apache.jackrabbit.oak.spi.commit.CommitInfo; +import org.apache.jackrabbit.oak.spi.commit.EmptyHook; +import org.apache.jackrabbit.oak.spi.state.NodeBuilder; +import org.apache.sling.testing.mock.osgi.junit.OsgiContext; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; + +import java.io.File; +import java.io.IOException; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; + +public class SplitPersistenceServiceTest { + @Rule + public final OsgiContext ctx = new OsgiContext(); + + @Rule + public TemporaryFolder folder = new TemporaryFolder(new File("target")); + + /** + * Verifies that a minimally-configured SplitPersistence can be registered successfully + */ + @Test + public void bootstrap() throws IOException, InvalidFileStoreVersionException, CommitFailedException { + File roDir = folder.newFolder(); + SegmentNodeStorePersistence roPersistence = new TarPersistence(roDir); + + FileStore baseFileStore = FileStoreBuilder + .fileStoreBuilder(roDir) + .withCustomPersistence(roPersistence) + .build(); + SegmentNodeStore base = SegmentNodeStoreBuilders.builder(baseFileStore).build(); + + NodeBuilder builder = base.getRoot().builder(); + builder.child("foo").child("bar").setProperty("version", "v1"); + base.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY); + baseFileStore.flush(); + baseFileStore.close(); + + SegmentNodeStorePersistence localPersistence = new TarPersistence(folder.newFolder()); + + ctx.registerService(SegmentNodeStorePersistence.class, roPersistence, ImmutableMap.of("role", "split-persistence-ro")); + ctx.registerService(SegmentNodeStorePersistence.class, localPersistence, ImmutableMap.of("role", "split-persistence-rw")); + + ctx.registerInjectActivateService(new SplitPersistenceService()); + + SegmentNodeStorePersistence[] services = ctx.getServices(SegmentNodeStorePersistence.class, null); + assertThat("No SegmentNodeStorePersistence registered", services, notNullValue()); + assertThat("SegmentNodeStorePersistence registrations different of 3", services.length, is(3)); + } +}