Have you tried using the grizzly test container per 
https://www.dropwizard.io/en/latest/manual/testing.html#test-containers ?  
That should, I believe, get you past the injection source issue but may 
result in a null user being injected (not 100% sure on exactly what 
happens, as we have the following set up as well as the changed test 
container):

To get a user injected, you'll need to register an AuthDynamicFeature as a 
provider per 
https://www.dropwizard.io/en/latest/manual/auth.html#testing-protected-resources
 
.  something along the lines of:

ResourceTestRule.builder()
    .addResource(new InquiryResource(...))
    .addProvider(new AuthDynamicFeature(mockAuthFilter)) // <-- may be able 
to use the auth filter you're registering for your application directly, 
depending on how integration-y the test is
    .addProvider(RolesAllowedDynamicFeature.class)
    .addProvider(new authValueFactoryProvider.Binder<>(User.class))
    .setTestContainerFactory(new GrizzlyWebTestContainerFactory())
    .build()

Hope that helps,
-Joe

On Thursday, May 28, 2020 at 2:39:04 PM UTC-7, jeremiah adams wrote:
>
> I am having issues using io.dropwizard.testing.junit.ResourceTestRule in 
> tandem with @Auth decorations associated with io.dropwizard.auth.Auth.
>
> I am using the @Auth decoration to fetch the Principal in my route 
> handlers. I am able to get our Okta roles in this manner for access 
> control. This all works fine when standing the AP and execute it as a jar. 
> However, I’m having problems when I attempt to UnitTest my route handlers. 
>
> Logs include this information:
>
> ERROR [2020-05-28 15:23:11,770] org.glassfish.jersey.internal.Errors: 
> Following issues have been detected:
>
> WARNING: No injection source found for a parameter of type public 
> javax.ws.rs.core.Response 
> com.helixeducation.ipa.admin.resources.InquiryResource.searchInquiries(com.helixeducation.components.auth.HelixUser,com.helixeducation.components.domain.InquirySearch)
>  
> at index 0.
>
> The parameter at index 0 is my Principal. Here is the method declaration:
>
>   @POST
>
>   @Timed
>
>   @Path("/search")
>
>   @Consumes(MediaType.APPLICATION_JSON)
>
>   @PermitAll
>
>   public Response searchInquiries(@Auth HelixUser user,
>
>       @Valid @NotNull InquirySearch inquirySearch) {
>
>     // check if user has an appropriate role or return 401.
>
> // implementation Omitted. 
>
> }
>
> Here’s the declaration of my TestRule:
>
> @ClassRule
>
> public static final ResourceTestRule resourceMock = 
> ResourceTestRule.builder()
>
>             .addResource(new InquiryResource(mockDao, mockSearchDao,  
> findApiConfiguration, mockInquiryCreateSvc))
>
>             .build();
>
>
>
> How do I get the TestRule to inject a mocked Principal? I think if I can 
> get past that issue, I can get unblocked.
>
> Regards,
>
> - jeremiah
>

-- 
You received this message because you are subscribed to the Google Groups 
"dropwizard-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/dropwizard-user/583e0752-a0c3-4bad-9fef-7b00c20e15cd%40googlegroups.com.

Reply via email to