SLING-10918 detect re-registering of ResourceResolverFactory and prevent this

add failing test
detect re-registering of ResourceResolverFactory and prevent this

Co-authored-by: Stefan Seifert <stefanseifert@users.noreply.github.com>
diff --git a/core/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java b/core/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java
index 0573d87..fb808b9 100644
--- a/core/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java
+++ b/core/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java
@@ -34,6 +34,7 @@
 import org.apache.sling.testing.mock.sling.spi.ResourceResolverTypeAdapter;
 import org.jetbrains.annotations.NotNull;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
 
 /**
  * Factory for mock Sling objects.
@@ -70,8 +71,15 @@
      * @param bundleContext Bundle context
      * @return Resource resolver factory instance
      */
+    @SuppressWarnings("null")
     public static @NotNull ResourceResolverFactory newResourceResolverFactory(@NotNull final ResourceResolverType type,
             @NotNull final BundleContext bundleContext) {
+
+        ServiceReference<ResourceResolverFactory> existingReference = bundleContext.getServiceReference(ResourceResolverFactory.class);
+        if (existingReference != null) {
+            throw new IllegalStateException("A ResourceResolverFactory is already registered in this BundleContext - please get the existing service instance.");
+        }
+
         ResourceResolverTypeAdapter adapter = getResourceResolverTypeAdapter(type, bundleContext);
         ResourceResolverFactory factory = adapter.newResourceResolverFactory();
         if (factory == null) {
diff --git a/core/src/test/java/org/apache/sling/testing/mock/sling/context/AbstractSlingContextImplTest.java b/core/src/test/java/org/apache/sling/testing/mock/sling/context/AbstractSlingContextImplTest.java
index ec483ec..a40c75f 100644
--- a/core/src/test/java/org/apache/sling/testing/mock/sling/context/AbstractSlingContextImplTest.java
+++ b/core/src/test/java/org/apache/sling/testing/mock/sling/context/AbstractSlingContextImplTest.java
@@ -30,6 +30,7 @@
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.api.scripting.SlingBindings;
 import org.apache.sling.settings.SlingSettingsService;
+import org.apache.sling.testing.mock.sling.MockSling;
 import org.apache.sling.testing.mock.sling.ResourceResolverType;
 import org.apache.sling.testing.mock.sling.context.models.OsgiServiceModel;
 import org.apache.sling.testing.mock.sling.context.models.RequestAttributeModel;
@@ -150,4 +151,11 @@
         assertTrue(newRunModes.contains("mode2"));
     }
 
+    @Test(expected = IllegalStateException.class)
+    public void testReRegisteringResourceResolverFaactory() {
+        // it is not allowed to create/register a new resource resolver factory instance if there is already one
+        // so this should throw an IllegalStateException it this is detected
+        MockSling.newResourceResolver(context.bundleContext());
+    }
+
 }
diff --git a/junit4/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java b/junit4/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java
index abacb39..da3e281 100644
--- a/junit4/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java
+++ b/junit4/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java
@@ -157,7 +157,6 @@
         assertEquals("/foo", context.resourceResolver().map("/content/test/foo"));
     }
 
-
     private void prepareInitialAdapterFactory() {
         // register "traditional" adapter factory without specific service ranking
         AdapterFactory adapterFactory = new AdapterFactory() {