Hi Cris,

I took a quick look and noticed a couple of things:

1. It looks like the package that contains your service interfaces needs to
be exported.   The problem is that the service interface class that you are
trying to inject is not visible to the osgi bundle that contains the test
class.  The paxexam test class is in its own osgi bundle so it can only see
java packages that have been exported from the original bundle.  The
simplest way to do that would be to just place a package-info.java file in
that java package whose content looked something like the following to
declare the exported version number:

@org.osgi.annotation.versioning.Version("1.0.0")
package org.apache.sling.auth.saml2;


2. The line in org.apache.sling.auth.saml2.Activator that changes the
bundle start level seems to be interfering with completing the bundle
startup.  Removing that line got the Saml2UserMgtService service in the
bundle to activate for me and the osgi service got injected.

3. AuthenticationHandlerSAML2Impl has been defined as requiring
configuration before it is activated, so you will need to supply that
configuration in your paxexam configuration options before that would be
activated and available to be injected with something like this in your
Options:

        // supply the required configuration so the auth handler service
will activate

newConfiguration("org.apache.sling.auth.saml2.AuthenticationHandlerSAML2")
            //TODO: populate any configuration values here
            .asOption(),


I attempted to fix those issues and applied the changes in the commit at:
https://github.com/apache/sling-whiteboard/commit/b295f4320a03b15da0e713c9abd035b6cf31d8c4

Hope that helps.

Regards,
-Eric





On Fri, Mar 5, 2021 at 12:53 PM Cris Rockwell <[email protected]> wrote:

> Hi all,
>
> You all have been very helpful as I continuing learning about Pax Exam
> testing. After some time, I patched the oak bundles version to 1.32. My
> test logs the bundles names and states for each; as shown below all bundles
> but one bundle report status:active
> ...
> message=org.apache.sling.auth.form:1.0.14state:active
> message=org.apache.jackrabbit.oak-jackrabbit-api:1.32.0state:active
> message=org.apache.jackrabbit.oak-auth-external:1.32.0state:active
> message=org.ops4j.pax.tipi.junit:4.12.0.1state:active
> message=org.ops4j.pax.tipi.hamcrest.core:1.3.0.1state:active
> message=org.ops4j.pax.exam.invoker.junit:4.13.3state:active
> message=slf4j.api:1.7.26state:active
> …
>
> But my test bundle status reports "resolved"
> message=org.apache.sling.auth.saml2:0.2.0.SNAPSHOTstate:4
>
> My tests fail because I cannot get references to the services. As I
> mentioned, there are no more obvious wiring dependency errors in the logs.
> The bundle under test Activator logs messages, which look good.
>
> When my IT test tries to @Inject a reference
> @Inject
> Saml2UserMgtService saml2UserMgtService;
> it fails
> [ERROR] org.apache.sling.auth.saml2.impl.SamlHandlerIT.test_setup  Time
> elapsed: 0.073 s  <<< ERROR!
> java.lang.ClassNotFoundException:
> org.apache.sling.auth.saml2.Saml2UserMgtService not found by
> PAXEXAM-PROBE-dc8debbd-300f-46cf-b125-75a8e3e9ebc9 [198]
>
>
> Here is the IT test
>
> https://github.com/apache/sling-whiteboard/blob/SLING-9397/improve-test-coverage/saml-handler/src/test/java/org/apache/sling/auth/saml2/impl/SamlHandlerIT.java
> <
> https://github.com/apache/sling-whiteboard/blob/SLING-9397/improve-test-coverage/saml-handler/src/test/java/org/apache/sling/auth/saml2/impl/SamlHandlerIT.java
> >
>
>
> Activator looks like this
>
> https://github.com/apache/sling-whiteboard/blob/SLING-9397/improve-test-coverage/saml-handler/src/main/java/org/apache/sling/auth/saml2/Activator.java
> <
> https://github.com/apache/sling-whiteboard/blob/SLING-9397/improve-test-coverage/saml-handler/src/main/java/org/apache/sling/auth/saml2/Activator.java
> >
>
>
> If you looked at any of this, thank so much!
>
> Cris
>
>
>

Reply via email to