This is an automated email from the ASF dual-hosted git repository.
sseifert pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-sling-mock-oak.git
The following commit(s) were added to refs/heads/master by this push:
new 7a8c92c SLING-12266 - Implement repo snapshot support (#12)
7a8c92c is described below
commit 7a8c92c3f6995c54d38aebecd8225d2fa3a2f5ee
Author: Csaba Varga <[email protected]>
AuthorDate: Thu Apr 11 14:16:45 2024 +0200
SLING-12266 - Implement repo snapshot support (#12)
Return the root NodeState of the repo to make a snapshot, and use it to
build
new repository instances. When working from a snapshot, we don't need to
initialize content since the snapshot was made from an already initialized
repo.
---
pom.xml | 2 +-
.../sling/oak/OakMockResourceResolverAdapter.java | 13 +++++++++++
.../mock/sling/oak/OakMockSlingRepository.java | 27 ++++++++++++++++++++--
.../sling/testing/mock/sling/oak/package-info.java | 2 +-
4 files changed, 40 insertions(+), 4 deletions(-)
diff --git a/pom.xml b/pom.xml
index 66b50cb..2917c2c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,7 +45,7 @@
<properties>
<oak.version>1.44.0</oak.version>
<jackrabbit.version>2.20.9</jackrabbit.version>
- <sling-mock.version>3.4.18</sling-mock.version>
+ <sling-mock.version>3.5.0-SNAPSHOT</sling-mock.version>
<project.build.outputTimestamp>2023-05-16T08:40:51Z</project.build.outputTimestamp>
</properties>
diff --git
a/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockResourceResolverAdapter.java
b/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockResourceResolverAdapter.java
index 73fb9ca..d78df7b 100644
---
a/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockResourceResolverAdapter.java
+++
b/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockResourceResolverAdapter.java
@@ -18,6 +18,7 @@
*/
package org.apache.sling.testing.mock.sling.oak;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.jcr.api.SlingRepository;
import org.apache.sling.testing.mock.sling.spi.ResourceResolverTypeAdapter;
@@ -36,4 +37,16 @@ public class OakMockResourceResolverAdapter implements
ResourceResolverTypeAdapt
public SlingRepository newSlingRepository() {
return new OakMockSlingRepository();
}
+
+ @Override
+ public Object snapshot(SlingRepository repository) {
+ OakMockSlingRepository mockRepository = (OakMockSlingRepository)
repository;
+ return mockRepository.snapshot();
+ }
+
+ @Override
+ public SlingRepository newSlingRepositoryFromSnapshot(Object snapshot) {
+ NodeState rootNodeState = (NodeState) snapshot;
+ return new OakMockSlingRepository(rootNodeState);
+ }
}
diff --git
a/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockSlingRepository.java
b/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockSlingRepository.java
index 2693cb5..c0ba571 100644
---
a/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockSlingRepository.java
+++
b/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockSlingRepository.java
@@ -41,6 +41,9 @@ import java.util.concurrent.ScheduledExecutorService;
import org.apache.jackrabbit.api.JackrabbitRepository;
import org.apache.jackrabbit.oak.Oak;
import org.apache.jackrabbit.oak.jcr.Jcr;
+import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.spi.state.NodeStore;
import org.apache.sling.jcr.api.SlingRepository;
import org.apache.sling.testing.mock.sling.oak.impl.ComparableVersion;
import org.osgi.framework.BundleContext;
@@ -61,8 +64,21 @@ public final class OakMockSlingRepository implements
SlingRepository {
private ExecutorService executor;
private ScheduledExecutorService scheduledExecutor;
+ private final NodeStore nodeStore;
+ private final boolean fromScratch;
+
private static final Logger log =
LoggerFactory.getLogger(OakMockSlingRepository.class);
+ public OakMockSlingRepository() {
+ this.nodeStore = new MemoryNodeStore();
+ this.fromScratch = true;
+ }
+
+ public OakMockSlingRepository(NodeState startingState) {
+ this.nodeStore = new MemoryNodeStore(startingState);
+ this.fromScratch = false;
+ }
+
@Activate
protected void activate(BundleContext bundleContext) throws IOException {
executor = Executors.newSingleThreadExecutor();
@@ -72,9 +88,12 @@ public final class OakMockSlingRepository implements
SlingRepository {
bundleContext.registerService(Executor.class, executor, null);
}
- Oak oak = new Oak().with(executor).with(scheduledExecutor);
+ Oak oak = new
Oak(this.nodeStore).with(executor).with(scheduledExecutor);
- Jcr jcr = new Jcr(oak).with(new
ExtraSlingContent()).with(executor).with(scheduledExecutor);
+ Jcr jcr = new Jcr(oak).with(executor).with(scheduledExecutor);
+ if (fromScratch) {
+ jcr.with(new ExtraSlingContent());
+ }
this.repository = jcr.createRepository();
// check if the right Oak version is loaded (older versions may be
loaded in case of non-deliberate class loader
@@ -123,6 +142,10 @@ public final class OakMockSlingRepository implements
SlingRepository {
}
}
+ NodeState snapshot() {
+ return nodeStore.getRoot();
+ }
+
public String getDescriptor(String key) {
return repository.getDescriptor(key);
}
diff --git
a/src/main/java/org/apache/sling/testing/mock/sling/oak/package-info.java
b/src/main/java/org/apache/sling/testing/mock/sling/oak/package-info.java
index 2d527c4..5b971ca 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/oak/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/oak/package-info.java
@@ -19,5 +19,5 @@
/**
* Sling Mock Jackrabbit Oak-based Resource Resolver
*/
[email protected]("2.0.1")
[email protected]("2.1")
package org.apache.sling.testing.mock.sling.oak;