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 <csab...@gmail.com>
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
  */
-@org.osgi.annotation.versioning.Version("2.0.1")
+@org.osgi.annotation.versioning.Version("2.1")
 package org.apache.sling.testing.mock.sling.oak;

Reply via email to