Mark, Cool. Thanks for the explanation. Is there any significance to the order of the following events in a Mock test: A) Adding a service to a processor or other service(TestRunner.addControllerService) B) Setting properties on a controller service(TestRunner.setProperty(ControllerService service, String key, String value) C) Enabling a service(TestRunner.enableControllerService)
I would assume enabling depends on the correct properties being set, so C must happen after B. But it seems like A can happen at any point. Correct? Dan Bress Software Engineer ONYX Consulting Services ________________________________________ From: Mark Payne <[email protected]> Sent: Thursday, April 2, 2015 11:38 AM To: [email protected] Subject: Re: Do I need to specifically enable a ControllerService in a unit test? Dan, Yes, you should be calling enableControllerService on the TestRunner. This was refactored a big in the 0.1.0 version because previously the only option you had was to create the Controller Service and then add it to the test runner with a Map or all properties. With the test runner, you can now set properties via TestRunner.setProperty(ControllerService, String, String); The test runner does not automatically enable the service because the service is not valid until the properties are set, and the properties will often no longer be set when creating the service. You are correct in that it is all a result of the full lifecycle support added for Controller Services via NIFI-250. Thanks -Mark From: Dan Bress Sent: Thursday, April 2, 2015 11:18 AM To: [email protected] Lets say I have a ControllerService that loads some data into memory, and lets say that is happening during OnEnabled. If I want to test this behavior using the NiFi Mock TestRunner, do I need to explicitly call "enableControllerService" to cause the "@OnEnabled" method on my ControllerService to be called? Looking at StandardSSLContextService [1] this appears to be the case. I was not aware of this requirement, and wanted to make sure I understood it. Is this part of allowing full life cycle support for controller services and NIFI-250? Any reason to not automatically enable controller services during mock testing? Or is the thinking that explicitly calling it allows you finer grained testing of difference scenarios. Thanks! [1] https://github.com/apache/incubator-nifi/blob/develop/nifi/nifi-nar-bundles/nifi-standard-services/nifi-ssl-context-bundle/nifi-ssl-context-service/src/test/java/org/apache/nifi/ssl/SSLContextServiceTest.java#L106 Dan Bress Software Engineer ONYX Consulting Services
