You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@nifi.apache.org by sanjeet rath <ra...@gmail.com> on 2019/10/17 15:49:59 UTC

Unable to do unit testing Awscredentialprovidercontrolerservice

Hi Team,

I am new to this community, today i have joined and this is my first
query.(already from last 15 days i got stuck here)

I have build a nifi custom processor.to put a object in AWS s3 bucket.(Just
Modified Puts3Object processor in NIFI- AWS-PROCESSOR project)
In this processor  Awscredentialprovidercontrolerservice is the default one
to connect AWS.

But our project structure we have a custom controller service
,Awscredentialprovidercontrolerservice controller service  to connect AWS
with our defined attributes.(This is present in a separate project
NIFI-AWS-CUSTOM_PING_CONTROLER)
I want to use this custom controller service , instead of the default
Awscredentialprovidercontrolerservice one which is present in the NIFI-
AWS-PROCESSOR project

My question is I want to do the unit testing (Using JUnit & Mockito)  to
validate this custom Awscredentialprovidercontrolerservice is working or
not like if I get invalid bucket name then test case should failed.

My code structure:
@Test
    public void testRetryLogin() {
        final TestRunner runner = TestRunners.newTestRunner(new
puts3Object);
final Awscredentialprovidercontrolerservice  serviceimpl= new
Awscredentialprovidercontrolerservice()
Runner.setproperty(…)
Runner.enablecontrolerservice(serviceimpl)
runner.run();
       // will do assert  }

This gives me compiler error in error in
Awscredentialprovidercontrolerservice instance creation line as custom
controller service project is not available to this processor service
project. If we add dependency in pom file to make it available then it will
be circular dependency.
Because  already in custom controlerservice pom file , custom processor is
already added in dependency..

Thanks in advance :)

-- 
Sanjeet Kumar Rath,
mob- +91 8777577470

Re: Unable to do unit testing Awscredentialprovidercontrolerservice

Posted by sanjeet rath <ra...@gmail.com>.
Hi Team,

 please help me with the trailed mail issue.i got stuck here.

Thanks & Regards
sanjeet

On Fri, 18 Oct, 2019, 10:02 PM sanjeet rath, <ra...@gmail.com> wrote:

> Hi ,
>
> While testing a controller service (Awscredentialprovidercontrolerservice)
> i am getting IlligalStateException,
> in the runner.enablecontrolerService(...) , when i am removing LINE3 code
> i am getting null pointer exception in the useStratergy value(in the custom
> validate).
> What i have annalysed the properties list,  i am getting all the
> properties values that are present in the default
> Awscredentialprovidercontrolerservice class.
> It should have my properties list which i have defined in the custom
> Awscredentialprovidercontrolerservice class.
>
>
> code:
> @Test
>     public void testAwscredentialprovidercontrolerservice() {
> final TestRunner runner = TestRunners.newTestRunner(puts3Object.class);
> Final Awscredentialprovidercontrolerservice serviceImpl = new
> Awscredentialprovidercontrolerservice()
> Runner.setProperty(..)
>
> #LINE3#runner.setProperty(serviceImpl,AbstractAWSCredentialsProviderProcessor.AWS_CREDENTIALS_PROVIDER_SERVICE,"awsCredsProviderService");
> runner.enablecontrolerService(serviceImpl)
>    }
>
> In the custom Awscredentialprovidercontrolerservice I have added ,
>
> public static final PropertyDescriptor AWS_CONTROLER_SERVICE = new
> PropertyDescriptor.Builder()
>   .name(“AWS Service")
>   .description("Specified the SSL Context Service that can be used to
> create secure connections")
>   .required(true)
>   .identifiesControllerService(Awscredentialprovidercontrolerservice
> .class)
>
> Thanks,
> Sanjeet
>
>
> On Thu, 17 Oct, 2019, 11:42 PM Bryan Bende, <bb...@gmail.com> wrote:
>
>> You should be able use mockito (or any other mocking framework),
>> something like...
>>
>> AWSCredentialsProviderService service =
>> Mockito.mock(AWSCredentialsProviderService.class)
>> //setup whatever you want the mock to do
>>
>> runner.setProperty(service,
>> AbstractAWSCredentialsProviderProcessor.AWS_CREDENTIALS_PROVIDER_SERVICE,
>> "awsCredsProviderService");
>> runner.enableControllerService(service);
>>
>> On Thu, Oct 17, 2019 at 1:54 PM sanjeet rath <ra...@gmail.com>
>> wrote:
>> >
>> > Thanks a lot bryan , for helping me to identify proper UNIT testing.
>> > I will go with ur suggestion, will write unit testing for custom
>> > controlerservice and separate for custom processor service.
>> > If possible Can u give me a example of mock the
>> > AWSCredentialsProviderService interface.
>> >
>> > Regards,
>> > sanjeet
>> >
>> > On Thu, Oct 17, 2019 at 9:41 PM Bryan Bende <bb...@gmail.com> wrote:
>> >
>> > > Please only email one list, removing users...
>> > >
>> > > The AWS processors depend on an interface called
>> > > AWSCredentialsProviderService.  The unit test of the processor should
>> > > not need to depend on real implementations of this interface,
>> > > otherwise it is really an integration test of multiple components.
>> > >
>> > > I would suggest testing your processor and service separately... the
>> > > processor test can mock the AWSCredentialsProviderService interface.
>> > >
>> > >
>> > > On Thu, Oct 17, 2019 at 11:50 AM sanjeet rath <rath.sanjeet@gmail.com
>> >
>> > > wrote:
>> > > >
>> > > > Hi Team,
>> > > >
>> > > > I am new to this community, today i have joined and this is my first
>> > > query.(already from last 15 days i got stuck here)
>> > > >
>> > > > I have build a nifi custom processor.to put a object in AWS s3
>> > > bucket.(Just Modified Puts3Object processor in NIFI- AWS-PROCESSOR
>> project)
>> > > > In this processor  Awscredentialprovidercontrolerservice is the
>> default
>> > > one to connect AWS.
>> > > >
>> > > > But our project structure we have a custom controller service
>> > > ,Awscredentialprovidercontrolerservice controller service  to connect
>> AWS
>> > > with our defined attributes.(This is present in a separate project
>> > > NIFI-AWS-CUSTOM_PING_CONTROLER)
>> > > > I want to use this custom controller service , instead of the
>> default
>> > > Awscredentialprovidercontrolerservice one which is present in the
>> NIFI-
>> > > AWS-PROCESSOR project
>> > > >
>> > > > My question is I want to do the unit testing (Using JUnit &
>> Mockito)  to
>> > > validate this custom Awscredentialprovidercontrolerservice is working
>> or
>> > > not like if I get invalid bucket name then test case should failed.
>> > > >
>> > > > My code structure:
>> > > > @Test
>> > > >     public void testRetryLogin() {
>> > > >         final TestRunner runner = TestRunners.newTestRunner(new
>> > > puts3Object);
>> > > > final Awscredentialprovidercontrolerservice  serviceimpl= new
>> > > Awscredentialprovidercontrolerservice()
>> > > > Runner.setproperty(…)
>> > > > Runner.enablecontrolerservice(serviceimpl)
>> > > > runner.run();
>> > > >        // will do assert  }
>> > > >
>> > > > This gives me compiler error in error in
>> > > Awscredentialprovidercontrolerservice instance creation line as custom
>> > > controller service project is not available to this processor service
>> > > project. If we add dependency in pom file to make it available then
>> it will
>> > > be circular dependency.
>> > > > Because  already in custom controlerservice pom file , custom
>> processor
>> > > is already added in dependency..
>> > > >
>> > > > Thanks in advance :)
>> > > >
>> > > > --
>> > > > Sanjeet Kumar Rath,
>> > > > mob- +91 8777577470
>> > > >
>> > >
>> >
>> >
>> > --
>> > Sanjeet Kumar Rath,
>> > mob- +91 8777577470
>>
>

Re: Unable to do unit testing Awscredentialprovidercontrolerservice

Posted by sanjeet rath <ra...@gmail.com>.
Hi ,

While testing a controller service (Awscredentialprovidercontrolerservice)
i am getting IlligalStateException,
in the runner.enablecontrolerService(...) , when i am removing LINE3 code i
am getting null pointer exception in the useStratergy value(in the custom
validate).
What i have annalysed the properties list,  i am getting all the properties
values that are present in the default
Awscredentialprovidercontrolerservice class.
It should have my properties list which i have defined in the custom
Awscredentialprovidercontrolerservice class.


code:
@Test
    public void testAwscredentialprovidercontrolerservice() {
final TestRunner runner = TestRunners.newTestRunner(puts3Object.class);
Final Awscredentialprovidercontrolerservice serviceImpl = new
Awscredentialprovidercontrolerservice()
Runner.setProperty(..)
#LINE3#runner.setProperty(serviceImpl,AbstractAWSCredentialsProviderProcessor.AWS_CREDENTIALS_PROVIDER_SERVICE,"awsCredsProviderService");
runner.enablecontrolerService(serviceImpl)
   }

In the custom Awscredentialprovidercontrolerservice I have added ,

public static final PropertyDescriptor AWS_CONTROLER_SERVICE = new
PropertyDescriptor.Builder()
  .name(“AWS Service")
  .description("Specified the SSL Context Service that can be used to
create secure connections")
  .required(true)
  .identifiesControllerService(Awscredentialprovidercontrolerservice
.class)

Thanks,
Sanjeet


On Thu, 17 Oct, 2019, 11:42 PM Bryan Bende, <bb...@gmail.com> wrote:

> You should be able use mockito (or any other mocking framework),
> something like...
>
> AWSCredentialsProviderService service =
> Mockito.mock(AWSCredentialsProviderService.class)
> //setup whatever you want the mock to do
>
> runner.setProperty(service,
> AbstractAWSCredentialsProviderProcessor.AWS_CREDENTIALS_PROVIDER_SERVICE,
> "awsCredsProviderService");
> runner.enableControllerService(service);
>
> On Thu, Oct 17, 2019 at 1:54 PM sanjeet rath <ra...@gmail.com>
> wrote:
> >
> > Thanks a lot bryan , for helping me to identify proper UNIT testing.
> > I will go with ur suggestion, will write unit testing for custom
> > controlerservice and separate for custom processor service.
> > If possible Can u give me a example of mock the
> > AWSCredentialsProviderService interface.
> >
> > Regards,
> > sanjeet
> >
> > On Thu, Oct 17, 2019 at 9:41 PM Bryan Bende <bb...@gmail.com> wrote:
> >
> > > Please only email one list, removing users...
> > >
> > > The AWS processors depend on an interface called
> > > AWSCredentialsProviderService.  The unit test of the processor should
> > > not need to depend on real implementations of this interface,
> > > otherwise it is really an integration test of multiple components.
> > >
> > > I would suggest testing your processor and service separately... the
> > > processor test can mock the AWSCredentialsProviderService interface.
> > >
> > >
> > > On Thu, Oct 17, 2019 at 11:50 AM sanjeet rath <ra...@gmail.com>
> > > wrote:
> > > >
> > > > Hi Team,
> > > >
> > > > I am new to this community, today i have joined and this is my first
> > > query.(already from last 15 days i got stuck here)
> > > >
> > > > I have build a nifi custom processor.to put a object in AWS s3
> > > bucket.(Just Modified Puts3Object processor in NIFI- AWS-PROCESSOR
> project)
> > > > In this processor  Awscredentialprovidercontrolerservice is the
> default
> > > one to connect AWS.
> > > >
> > > > But our project structure we have a custom controller service
> > > ,Awscredentialprovidercontrolerservice controller service  to connect
> AWS
> > > with our defined attributes.(This is present in a separate project
> > > NIFI-AWS-CUSTOM_PING_CONTROLER)
> > > > I want to use this custom controller service , instead of the default
> > > Awscredentialprovidercontrolerservice one which is present in the NIFI-
> > > AWS-PROCESSOR project
> > > >
> > > > My question is I want to do the unit testing (Using JUnit &
> Mockito)  to
> > > validate this custom Awscredentialprovidercontrolerservice is working
> or
> > > not like if I get invalid bucket name then test case should failed.
> > > >
> > > > My code structure:
> > > > @Test
> > > >     public void testRetryLogin() {
> > > >         final TestRunner runner = TestRunners.newTestRunner(new
> > > puts3Object);
> > > > final Awscredentialprovidercontrolerservice  serviceimpl= new
> > > Awscredentialprovidercontrolerservice()
> > > > Runner.setproperty(…)
> > > > Runner.enablecontrolerservice(serviceimpl)
> > > > runner.run();
> > > >        // will do assert  }
> > > >
> > > > This gives me compiler error in error in
> > > Awscredentialprovidercontrolerservice instance creation line as custom
> > > controller service project is not available to this processor service
> > > project. If we add dependency in pom file to make it available then it
> will
> > > be circular dependency.
> > > > Because  already in custom controlerservice pom file , custom
> processor
> > > is already added in dependency..
> > > >
> > > > Thanks in advance :)
> > > >
> > > > --
> > > > Sanjeet Kumar Rath,
> > > > mob- +91 8777577470
> > > >
> > >
> >
> >
> > --
> > Sanjeet Kumar Rath,
> > mob- +91 8777577470
>

Re: Unable to do unit testing Awscredentialprovidercontrolerservice

Posted by Bryan Bende <bb...@gmail.com>.
You should be able use mockito (or any other mocking framework),
something like...

AWSCredentialsProviderService service =
Mockito.mock(AWSCredentialsProviderService.class)
//setup whatever you want the mock to do

runner.setProperty(service,
AbstractAWSCredentialsProviderProcessor.AWS_CREDENTIALS_PROVIDER_SERVICE,
"awsCredsProviderService");
runner.enableControllerService(service);

On Thu, Oct 17, 2019 at 1:54 PM sanjeet rath <ra...@gmail.com> wrote:
>
> Thanks a lot bryan , for helping me to identify proper UNIT testing.
> I will go with ur suggestion, will write unit testing for custom
> controlerservice and separate for custom processor service.
> If possible Can u give me a example of mock the
> AWSCredentialsProviderService interface.
>
> Regards,
> sanjeet
>
> On Thu, Oct 17, 2019 at 9:41 PM Bryan Bende <bb...@gmail.com> wrote:
>
> > Please only email one list, removing users...
> >
> > The AWS processors depend on an interface called
> > AWSCredentialsProviderService.  The unit test of the processor should
> > not need to depend on real implementations of this interface,
> > otherwise it is really an integration test of multiple components.
> >
> > I would suggest testing your processor and service separately... the
> > processor test can mock the AWSCredentialsProviderService interface.
> >
> >
> > On Thu, Oct 17, 2019 at 11:50 AM sanjeet rath <ra...@gmail.com>
> > wrote:
> > >
> > > Hi Team,
> > >
> > > I am new to this community, today i have joined and this is my first
> > query.(already from last 15 days i got stuck here)
> > >
> > > I have build a nifi custom processor.to put a object in AWS s3
> > bucket.(Just Modified Puts3Object processor in NIFI- AWS-PROCESSOR project)
> > > In this processor  Awscredentialprovidercontrolerservice is the default
> > one to connect AWS.
> > >
> > > But our project structure we have a custom controller service
> > ,Awscredentialprovidercontrolerservice controller service  to connect AWS
> > with our defined attributes.(This is present in a separate project
> > NIFI-AWS-CUSTOM_PING_CONTROLER)
> > > I want to use this custom controller service , instead of the default
> > Awscredentialprovidercontrolerservice one which is present in the NIFI-
> > AWS-PROCESSOR project
> > >
> > > My question is I want to do the unit testing (Using JUnit & Mockito)  to
> > validate this custom Awscredentialprovidercontrolerservice is working or
> > not like if I get invalid bucket name then test case should failed.
> > >
> > > My code structure:
> > > @Test
> > >     public void testRetryLogin() {
> > >         final TestRunner runner = TestRunners.newTestRunner(new
> > puts3Object);
> > > final Awscredentialprovidercontrolerservice  serviceimpl= new
> > Awscredentialprovidercontrolerservice()
> > > Runner.setproperty(…)
> > > Runner.enablecontrolerservice(serviceimpl)
> > > runner.run();
> > >        // will do assert  }
> > >
> > > This gives me compiler error in error in
> > Awscredentialprovidercontrolerservice instance creation line as custom
> > controller service project is not available to this processor service
> > project. If we add dependency in pom file to make it available then it will
> > be circular dependency.
> > > Because  already in custom controlerservice pom file , custom processor
> > is already added in dependency..
> > >
> > > Thanks in advance :)
> > >
> > > --
> > > Sanjeet Kumar Rath,
> > > mob- +91 8777577470
> > >
> >
>
>
> --
> Sanjeet Kumar Rath,
> mob- +91 8777577470

Re: Unable to do unit testing Awscredentialprovidercontrolerservice

Posted by sanjeet rath <ra...@gmail.com>.
Thanks a lot bryan , for helping me to identify proper UNIT testing.
I will go with ur suggestion, will write unit testing for custom
controlerservice and separate for custom processor service.
If possible Can u give me a example of mock the
AWSCredentialsProviderService interface.

Regards,
sanjeet

On Thu, Oct 17, 2019 at 9:41 PM Bryan Bende <bb...@gmail.com> wrote:

> Please only email one list, removing users...
>
> The AWS processors depend on an interface called
> AWSCredentialsProviderService.  The unit test of the processor should
> not need to depend on real implementations of this interface,
> otherwise it is really an integration test of multiple components.
>
> I would suggest testing your processor and service separately... the
> processor test can mock the AWSCredentialsProviderService interface.
>
>
> On Thu, Oct 17, 2019 at 11:50 AM sanjeet rath <ra...@gmail.com>
> wrote:
> >
> > Hi Team,
> >
> > I am new to this community, today i have joined and this is my first
> query.(already from last 15 days i got stuck here)
> >
> > I have build a nifi custom processor.to put a object in AWS s3
> bucket.(Just Modified Puts3Object processor in NIFI- AWS-PROCESSOR project)
> > In this processor  Awscredentialprovidercontrolerservice is the default
> one to connect AWS.
> >
> > But our project structure we have a custom controller service
> ,Awscredentialprovidercontrolerservice controller service  to connect AWS
> with our defined attributes.(This is present in a separate project
> NIFI-AWS-CUSTOM_PING_CONTROLER)
> > I want to use this custom controller service , instead of the default
> Awscredentialprovidercontrolerservice one which is present in the NIFI-
> AWS-PROCESSOR project
> >
> > My question is I want to do the unit testing (Using JUnit & Mockito)  to
> validate this custom Awscredentialprovidercontrolerservice is working or
> not like if I get invalid bucket name then test case should failed.
> >
> > My code structure:
> > @Test
> >     public void testRetryLogin() {
> >         final TestRunner runner = TestRunners.newTestRunner(new
> puts3Object);
> > final Awscredentialprovidercontrolerservice  serviceimpl= new
> Awscredentialprovidercontrolerservice()
> > Runner.setproperty(…)
> > Runner.enablecontrolerservice(serviceimpl)
> > runner.run();
> >        // will do assert  }
> >
> > This gives me compiler error in error in
> Awscredentialprovidercontrolerservice instance creation line as custom
> controller service project is not available to this processor service
> project. If we add dependency in pom file to make it available then it will
> be circular dependency.
> > Because  already in custom controlerservice pom file , custom processor
> is already added in dependency..
> >
> > Thanks in advance :)
> >
> > --
> > Sanjeet Kumar Rath,
> > mob- +91 8777577470
> >
>


-- 
Sanjeet Kumar Rath,
mob- +91 8777577470

Re: Unable to do unit testing Awscredentialprovidercontrolerservice

Posted by Bryan Bende <bb...@gmail.com>.
Please only email one list, removing users...

The AWS processors depend on an interface called
AWSCredentialsProviderService.  The unit test of the processor should
not need to depend on real implementations of this interface,
otherwise it is really an integration test of multiple components.

I would suggest testing your processor and service separately... the
processor test can mock the AWSCredentialsProviderService interface.


On Thu, Oct 17, 2019 at 11:50 AM sanjeet rath <ra...@gmail.com> wrote:
>
> Hi Team,
>
> I am new to this community, today i have joined and this is my first query.(already from last 15 days i got stuck here)
>
> I have build a nifi custom processor.to put a object in AWS s3 bucket.(Just Modified Puts3Object processor in NIFI- AWS-PROCESSOR project)
> In this processor  Awscredentialprovidercontrolerservice is the default one to connect AWS.
>
> But our project structure we have a custom controller service ,Awscredentialprovidercontrolerservice controller service  to connect AWS with our defined attributes.(This is present in a separate project NIFI-AWS-CUSTOM_PING_CONTROLER)
> I want to use this custom controller service , instead of the default Awscredentialprovidercontrolerservice one which is present in the NIFI- AWS-PROCESSOR project
>
> My question is I want to do the unit testing (Using JUnit & Mockito)  to validate this custom Awscredentialprovidercontrolerservice is working or not like if I get invalid bucket name then test case should failed.
>
> My code structure:
> @Test
>     public void testRetryLogin() {
>         final TestRunner runner = TestRunners.newTestRunner(new puts3Object);
> final Awscredentialprovidercontrolerservice  serviceimpl= new Awscredentialprovidercontrolerservice()
> Runner.setproperty(…)
> Runner.enablecontrolerservice(serviceimpl)
> runner.run();
>        // will do assert  }
>
> This gives me compiler error in error in Awscredentialprovidercontrolerservice instance creation line as custom controller service project is not available to this processor service project. If we add dependency in pom file to make it available then it will be circular dependency.
> Because  already in custom controlerservice pom file , custom processor is already added in dependency..
>
> Thanks in advance :)
>
> --
> Sanjeet Kumar Rath,
> mob- +91 8777577470
>