This is an automated email from the ASF dual-hosted git repository.

sseifert pushed a commit to branch feature/SLING-13097-bind-method-fix
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-osgi-mock.git

commit f8e6c044e31e7fbe1a842579c5366d160226b0ed
Author: Stefan Seifert <[email protected]>
AuthorDate: Tue Mar 3 16:28:19 2026 +0100

    SLING-13097 Mock OSGi does inject reference when bind methods are present
---
 .../sling/testing/mock/osgi/OsgiServiceUtil.java   |  2 +-
 .../testing/mock/osgi/OsgiServiceUtilTest.java     |  2 ++
 .../osgi/testsvc/osgiserviceutil/Service3.java     | 30 +++++++++++++++++++---
 3 files changed, 29 insertions(+), 5 deletions(-)

diff --git 
a/core/src/main/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtil.java 
b/core/src/main/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtil.java
index 20755ca..5703fb0 100644
--- a/core/src/main/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtil.java
+++ b/core/src/main/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtil.java
@@ -783,7 +783,7 @@ final class OsgiServiceUtil {
         }
 
         // OSGi declarative services 1.3 supports modifying the field directly
-        else if (StringUtils.isNotEmpty(fieldName)) {
+        if (StringUtils.isNotEmpty(fieldName)) {
 
             // check for field with list/collection reference
             if (reference.isCardinalityMultiple()) {
diff --git 
a/core/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilTest.java
 
b/core/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilTest.java
index 128a272..6caef7e 100644
--- 
a/core/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilTest.java
+++ 
b/core/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilTest.java
@@ -99,6 +99,8 @@ public class OsgiServiceUtilTest {
         List<ServiceSuperInterface3> references3 = service3.getReferences3();
         assertEquals(1, references3.size());
         assertSame(service2, references3.get(0));
+        assertTrue(service3.isBindReference3Called());
+        assertFalse(service3.isUnbindReference3Called());
 
         List<Map<String, Object>> reference3Configs = 
service3.getReference3Configs();
         assertEquals(1, reference3Configs.size());
diff --git 
a/test-services/src/main/java/org/apache/sling/testing/mock/osgi/testsvc/osgiserviceutil/Service3.java
 
b/test-services/src/main/java/org/apache/sling/testing/mock/osgi/testsvc/osgiserviceutil/Service3.java
index 7328188..baf7195 100644
--- 
a/test-services/src/main/java/org/apache/sling/testing/mock/osgi/testsvc/osgiserviceutil/Service3.java
+++ 
b/test-services/src/main/java/org/apache/sling/testing/mock/osgi/testsvc/osgiserviceutil/Service3.java
@@ -59,6 +59,9 @@ public class Service3 implements ServiceInterface2 {
             unbind = "unbindReference1Optional")
     private volatile ServiceInterface1Optional reference1Optional;
 
+    private boolean bindReference1OptionalCalled = false;
+    private boolean unbindReference1OptionalCalled = false;
+
     private List<ServiceReference<ServiceInterface2>> references2 = new 
ArrayList<>();
 
     @Reference(
@@ -71,6 +74,9 @@ public class Service3 implements ServiceInterface2 {
             unbind = "unbindReference3")
     private volatile List<ServiceSuperInterface3> references3 = new 
ArrayList<>();
 
+    private boolean bindReference3Called = false;
+    private boolean unbindReference3Called = false;
+
     private List<Map<String, Object>> reference3Configs = new ArrayList<>();
 
     @Reference(
@@ -138,11 +144,19 @@ public class Service3 implements ServiceInterface2 {
     }
 
     void bindReference1Optional(ServiceInterface1Optional service) {
-        reference1Optional = service;
+        bindReference1OptionalCalled = true;
     }
 
     void unbindReference1Optional(ServiceInterface1Optional service) {
-        reference1Optional = null;
+        unbindReference1OptionalCalled = true;
+    }
+
+    public boolean isBindReference1OptionalCalled() {
+        return bindReference1OptionalCalled;
+    }
+
+    public boolean isUnbindReference1OptionalCalled() {
+        return unbindReference1OptionalCalled;
     }
 
     void bindReference1(ServiceInterface1 service) {
@@ -162,15 +176,23 @@ public class Service3 implements ServiceInterface2 {
     }
 
     void bindReference3(ServiceSuperInterface3 service, Map<String, Object> 
serviceConfig) {
-        references3.add(service);
+        bindReference3Called = true;
         reference3Configs.add(serviceConfig);
     }
 
     void unbindReference3(ServiceSuperInterface3 service, Map<String, Object> 
serviceConfig) {
-        references3.remove(service);
+        unbindReference3Called = true;
         reference3Configs.remove(serviceConfig);
     }
 
+    public boolean isBindReference3Called() {
+        return bindReference3Called;
+    }
+
+    public boolean isUnbindReference3Called() {
+        return unbindReference3Called;
+    }
+
     void bindReference3Set(ServiceSuperInterface3 service, Map<String, Object> 
serviceConfig) {
         references3Set.add(service);
     }

Reply via email to