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); }
